
접근제어 지시자
지시자 | 접근 허용 범위 | |||
클래스 내부 | 해당 패키지 내부 | 상속받은 클래스 | 그 이외 | |
private | 가능 | 불가능 | 불가능 | 불가능 |
default | 가능 | 가능 | 불가능 | 불가능 |
protected | 가능 | 가능 | 가능 | 불가능 |
public | 가능 | 가능 | 가능 | 가능 |
default는 생소하지만, 우리가 여태 계속 써왔던 부분이다.
class A { ... } --> 보통은 클래스를 생성할 때 이렇게 생성을 한다. class앞에 아무것도 없는 경우를
default 지시자 라고 한다.
이 default 지시자는 같은 클래스, 같은 패키지내에서만 사용이 가능하다.
private, protected, public 지시자의 이해를 돕기위한 코드 예제

Line17에서 int_private = 3; 에서 오류가 생긴다.
여기서 private의 접근 범위를 보면 클래스 내부에서만 가능하다고 되어있다.
int_private는 A라는 클래스에 정의가 되어있다.
그래서 A클래스를 벗어난 JAVA클래스에서는 접근이 불가능하다.
반대로 default, protected, public은
지시자 | 접근 허용범위 | |||
클래스 내부 | 해당 패키지 내부 | 상속받은 클래스 | 그 이외 | |
default | 가능 | 가능 | 불가능 | 불가능 |
protected | 가능 | 가능 | 가능 | 불가능 |
public | 가능 | 가능 | 가능 | 가능 |
해당 패키지 내부에 있는(같은 경로) 경로에서 사용이 가능하므로 접근이 가능하다.
private와 정보은닉
private는 정보은닉을 위해서 사용 한다.
해당 클래스 내부에서만 사용 가능.. 즉, 외부에서의 해당 값 접근이 불가능하다

여자가 남자보다 돈이 많으면 여자가 돈을 내고, 그 이외의 상황에서는 남자가 돈을 내게 되는 예제이다.
예제에서 각각의 BoyFriend,GirlFriend 클래스에서 돈을 뜻하는 money가 default로 되어있다.
public class JAVA {
public static void main(String[] args ) {
GirlFriend girl = new GirlFriend(5000);
BoyFriend boy = new BoyFriend(10000);
int FoodValue = 4000;
if (girl.getMoney() > boy.getMoney()) {
girl.pay(FoodValue);
}else
boy.pay(FoodValue);
}
}
dafault 지시자여서 이렇게 외부에서 값을 조정을 할 수 있다.↓↓↓
public class TestClass {
public static void main(String[] args) {
GirlFriend girl = new GirlFriend(5000);
BoyFriend boy = new BoyFirend(10000);
girl.money += 10000;
boy.money += 5000;
...
}
}
protected. private
protected는 접근범위 위치가 조금 애메해서, 가급적이면 public 또는 default를 쓰게 된다.
메소드에서 public과 default
class A {
public A() {
int a() {..}
public void aa() {...}
}
여기서 클래스는 dafault인데 메소드는 public으로 선언되어 있다.
클래스가 default 라서 아무리 메소드를 public으로 걸어봐도, public의 범위가 아닌 default 범위 내에서만 사용이 된다.
그래서 보통 public을 지워주는 것이 현명하다.
여기서 알 수 있는 사실은
속해있는 클래스의 범위에 한정되서 , 생성자의 범위를 결정 할 수 있다.
(메소드의 경우 public을 사용하여 default 클래스에서도 선언할 수 있다)
'Backend > JAVA' 카테고리의 다른 글
[JAVA] Scanner (0) | 2022.03.18 |
---|---|
[JAVA] TreeSet HashSet (0) | 2022.03.17 |
[JAVA] Object (0) | 2022.03.15 |
[JAVA] 오버로딩, 오버라이딩 (Overloading, Overrding) (0) | 2022.03.14 |
[JAVA] abstract , interface (0) | 2022.03.11 |