정보은닉을 위해 사용한다.
정보은닉은 캡슐화의 중요한 목적 중 하나로 데이터를 보호하기 위해서 접근을 제어한다.
public으로 갈수록 접근을 제한하지 않는다.
대상 | 접근 제어자 |
---|---|
클래스 | public, default |
멤버 변수 | public, protected, default, private |
메소드 | public, protected, default, private |
지역 변수 | 없음 |
default로 설정한 클래스를 다른 패키지에서 사용하려고 하면 not visible하다고 나온다.
// com.yoon package에 있는 Bye
package com.yoon;
class Bye {
public String hello;
public void printHello() {
System.out.println(hello);
}
}
// default package에 있는 Hello
import com.yoon.*;
public class Hello {
public static void main(String[] args) {
Bye bye = new Bye();
// -> error
// The type Bye is not visible
}
}
하위 클래스일 경우 다른 패키지더라도 멤버변수나 메소드를 사용할 수 있다.
// com.yoon 패키지에 있는 One
package com.yoon;
public class One {
protected String name;
protected String getName() {
return name;
}
protected void setName(String name) {
this.name = name;
}
}
// com.nayoon 패키지에 있는 Main
package com.nayoon;
import com.yoon.One;
public class Main {
public static void main(String[] args) {
One one = new One();
one.setName("jiyoon");
System.out.println(one.getName());
}
}
// com.nayoon 패키지에 있는 Main
package com.nayoon;
import com.yoon.One;
public class Main extends One{
public static void main(String[] args) {
Main main = new Main();
main.setName("yoon");
System.out.println(main.getName());
}
}