객체 지향 프로그램에서 예약어를 사용해 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있는데, 이러한 예약어를 '접근 제어자(access modifier)'라 한다.
클래스 앞에 사용하는 public이라는 예약어는 public이라고 선언한 변수나 메서드는 외부 클래스에서 접근이 가능하며, 외부 클래스가 사용할 수 있다는 뜻이다.
반대로 private로 전언한 변수나 메서드는 외부 클래스에서 사용할 수 없다.
[실습] private 사용하기
package hiding;
public class Student {
int studentID;
private String studentName; //studentName 변수를 private로 선언
int grade;
String address;
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
}
[실습] private 변수 테스트하기
package hiding;
public class StudentTest {
public static void main(String[] args) {
Student studentLee = new Student();
studentLee.studentName = "이상원";
System.out.println(studentLee.getStudentName());
}
}
studentName 변수의 접근 제어자가 public일 때는 외부 클래스인 StudentTest.java 클래스에서 이 변수에 접근할 수 있었지만, private로 바뀌면서 외부 클래스의 접근이 허용되지 않기 때문에 에러가 발생한다.
그렇다면, private로 선언한 studentName 변수를 외부 코드에서 사용하려면 어떻게 해야 할까?
studentName 변수를 사용할 수 있도록 public 메서드를 제공하면 가능하다.
이때 사용할 수 있는 메서드가 get(), set() 이다.
[실습] get(), set() 메서드 사용하기
package hiding;
public class Student {
int studentID;
private String studentName; //studentName 변수를 private로 선언
int grade;
String address;
public String getStudentName() { //private 변수인 studentName에 접근해
return studentName; //값을 가져오는 public get() 메서드
}
public void setStudentName(String studentName) {
this.studentName = studentName; //private 변수인 studentName에 접근해
} //값을 지정하는 public set() 메서드
}
[실습] private 변수에 접근하기
package hiding;
public class StudentTest {
public static void main(String[] args) {
Student studentLee = new Student();
// studentLee.studentName = "이상원";
studentLee.setStudentName("이상원"); //setStudentName 메서드로 private변수에 접근
System.out.println(studentLee.getStudentName());
}
}
이처럼 studentName 멤버 변수에 이름값을 직접 대입하는 것이 아니고 setStudentName() 메서드를 활용하여 값을 대입한다. 즉, 외부 클래스에서 private 변수에 직접 접근할 수는 없지만, public 메서드를 통하면 private 변수에 접근할 수 있다.
이렇게 클래스 내부에서 사용할 변수나 메서드는 private로 선언해서 외부에서 접근하지 못하도록 하는 것을 객체 지향에서 '정보 은닉(information hiding)'이라 한다. 정보 은닉은 객체 지향 프로그래밍의 특징 중 하나이며, 자바에서는 접근 제어자를 사용해서 정보 은닉을 구현한다.
모든 변수를 private로 선언해야 하는 것은 아니지만, 필요한 경우 private로 선언하여 오류를 막을 수 있다.
▶ 자바에서 사용하는 접근 제어자
접근 제어자 | 설명 |
public | 외부 클래스 어디에서나 접근할 수 있다. |
protected | 같은 패키지 내부와 상속 관계의 클래스에서만 접근할 수 있고, 그 외 클래스에서는 접근할 수 없다. |
아무것도 없는 경우 | default이며, 같은 패키지 내부에서만 접근할 수 있다. |
private | 같은 클래스 내부에서만 접근할 수 있다. |
'Language > Java' 카테고리의 다른 글
[Java] 객체 간 협력 (0) | 2022.10.17 |
---|---|
[Java] this 예약어 (0) | 2022.10.12 |
[Java] 참조 자료형 (0) | 2022.10.01 |
[Java] 생성자 (0) | 2022.09.30 |
[Java] 클래스와 인스턴스 (0) | 2022.09.28 |