접근 제어자 :
객체 지향에서 정보 은닉 위해 접근 제어자라는 기능 사용.
접근 제어자를 사용하면 클래스 외부에서의 직접적인 접근을 허용하지 않는 멤버를 설정 해 정보 은닉 구체화 시킴
① private 접근 제어자
private 접근 제어자를 사용하여 선언된 클래스 멤버는 외부에 공개되지 않으며, 외부에서는 직접 접근할 수 없다.
즉, 자바 프로그램은 private 멤버에 직접 접근할 수 없으며, 해당 객체의 public 메소드를 통해서만 접근할 수 있다.
따라서 private 멤버는 public 인터페이스를 직접 구성하지 않고, 클래스 내부의 세부적인 동작을 구현하는 데 사용된다.
package week_two;
class Private1 {
private int a;
// private = 생성 된 클래스 안(Private1) 에서만 보인다.
int b; // default = 같은 패키지 내에서만 보인다
public int c;
// public = 현재 패키지(package week_two;)와 다른 패키지에서도 보인다
public Private1() {
};
public Private1(int a, int b, int c) {
super();
this.a = a;
this.b = b;
this.c = c;
}
@Override
public String toString() {
return "Private1 [a=" + a + ", b=" + b + ", c=" + c + "]";
}
}
public class PrivateTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Private1 pt = new Private1(1, 2, 3);
// pt.a = 10; //프라이빗 접근 제어자 라서 여기에서 안보여서 오류발생
pt.b = 10;
pt.c = 10;
}
}
② public 접근 제어자
public 접근 제어자를 사용하여 선언된 클래스 멤버는 외부로 공개되고, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있다. 자바 프로그램은 public 메소드를 통해서만 해당 객체의 private 멤버에 접근할 수 있다. 따라서 public 메소드는 private 멤버와 프로그램 사이의 인터페이스(interface) 역할을 수행한다고 할 수 있습니다.
③ default 접근 제어
클래스 및 클래스 멤버의 접근 제어의 기본값으로 default 접근 제어를 별도로 명시하고 있다. 접근 제어자가 지정되지 않으면 자동적으로 default 접근 제어를 가지게 된다. default 접근 제어를 가지는 멤버는 같은 클래스의 멤버와 같은 패키지에 속하는 멤버에서만 접근할 수 있다.
④ protected 접근 제어자
자바 클래스는 private 멤버로 정보를 은닉하고, public 멤버로 사용자나 프로그램과의 인터페이스를 구축한다.
protected 멤버는 부모 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급된다.
▶ 클래스 protected 멤버에 접근할 수 있는 영역
- 이 멤버를 선언한 클래스의 멤버
- 이 멤버를 선언한 클래스가 속한 패키지의 멤버
- 이 멤버를 선언한 클래스를 상속받은 자식 클래스의 멤버 (다른 패키지의 자식 클래스도 가능)
package week_two;
//퍼블릭 클래스
public class AccessTest {
private int a; // private 멤버
int b; // default 멤버
public int c; // public 멤버
// 생성자를 비롯한 대부분 매서드는 public
public AccessTest(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
public void printData() { //프린트하는 메서드 생성
System.out.println("a : " + a);
System.out.println("b : " + b);
System.out.println("c : " + c);
}
}
class MyTest { // default
int x;
int y;
}
public class AccessTestMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
// public 클래스는 다른 클래스에서 객체 생성 가능
AccessTest at = new AccessTest(1, 2, 3);
// private 멤버는 다른 클래스에서 사용 불가
// System.out.println(at.a); 해당 구문은 실행 될 수 없다
// 하기 두개의 접근제어자는 다른 클래스에서 사용 가능
System.out.println(at.b); //default
System.out.println(at.c); //public
at.printData();
// default 클래스도 같은 패키지 내의 다른 클래스에서 객체 생성 가능
MyTest mt = new MyTest();
// default 클래스도 같은 패키지 내의 사용 가능
mt.x = 10;
mt.y = 20;
}
}
'JAVA' 카테고리의 다른 글
[JAVA] 객체지향 - 싱글톤(Singleton) 패턴 (0) | 2023.03.01 |
---|---|
[JAVA] 객체지향 - getter 와 setter (0) | 2023.02.28 |
[JAVA] 객체지향 - fianl 키워드 (0) | 2023.02.28 |
[JAVA] 객체지향 - 초기화 블록 (0) | 2023.02.28 |
[JAVA] 객체지향 - static (0) | 2023.02.28 |