[JAVA] 접근제어자
자바의 접근제어자
-
private
-
default
-
protected
-
public
public > protected > default > private 순으로 보다 많은 접근을 허용함
private
-
private이 붙은 변수, 메소드는 해당 클래스에서만 접근 가능
-
아래 예제의 study 변수와 getStudy 메소드는 AccessStudy 클래스 안에서만 접근가능하고 다른 클래스에서는 접근이 불가능함.
public class AccessStudy {
private String study;
private String getStudy() {
return this.study;
}
}
default
-
접근제어자를 별도로 설정하지 않는다면 접근제어자가 없는 변수, 메소드는 default 접근제어자가 되어 해당 패키지 내에서만 접근 가능
-
StartJava와 EndJava의 패키지는 javastart.study로 동일한데 StartJava의 lastname 변수는 접근제어자가 default로 EndJava 클래스에서 main 메소드에서 사용한 것처럼 lee.lastname으로 StartJava의 lastname변수에 접근이 가능
StartJava.java
package javastart.study;
public class StartJava {
String lastname = "lee";
}
EndJava.java
package javastart.study;
public class EndJava {
String lastname = "yoon";
public static void main(String[] args) {
StartJava lee = new StartJava();
System.out.println(lee.lastname);
}
}
protected
-
protected가 붙은 변수, 메소드는 동일 패키지 내의 클래스 또는 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근 가능
-
NaEun 클래스를 상속받은 April 클래스의 패키지는 javastart.start.grup으로 NaEun의 패키지인 javastart.start와는 다르지만 NaEun의 lastname 변수가 protected로 설정되어 있기 때문에 april.lastname의 접근이 가능함
-
만약 lastname의 접근제어자가 protected가 아닌 default 였다면 april.lastname은 컴파일 오류가 발생
NaEun.java
package javastudy.start;
public class NaEun {
protected String lastname = "lee";
}
package javastudy.start.grup;
import start.NaEun;
public class April extends NaEun {
public static void main(String[] args) {
April april = new April();
System.out.println(april.lastname);
}
}
public
-
public 접근제어자가 붙은 변수, 메소드는 어떤 클래스에서도 접근 가능
-
NaEun의 info 변수는 public 접근제어자가 붙어 있어서 어떤 클래스에서든지 접근 가능
NaEun.java
package javastart.study;
public class NaEun {
protected String lastname = "lee";
public String info = "public";
}