Access Modifier

Dmitry Klokov·2021년 1월 11일
0

JAVA

목록 보기
7/13
post-thumbnail

Overview


자바에는 다음과 같은 접근 제어자가 있다.

  1. private
  2. default
  3. protected
  4. public

private → default → protected → public 순으로 보다 많은 접근을 허용한다.

private


private이 붙은 변수, 메소드는

  • 해당 클래스에서만 접근이 가능하다.

Example

public class AccessModifier {
    private String secret;
    private String getSecret() {
        return this.secret;
    }
}

위 예제의 secret 변수와 getSecret() 메소드는 오직 AccessModifier 클래스에서만 접근이 가능하다.

default


접근 제어자를 별도로 설정하지 않는다면, 접근 제어자가 없는 변수, 메소드는

  • default 접근제어자가 되어 해당 패키지 내에서만 접근이 가능하다.

Example

package jump2java.house;

public class HouseKim {
    String lastname = "kim";
}
package jump2java.house;

public class HousePark {
    String lastname = "park";

    public static void main(String[] args) {
        HouseKim kim = new HouseKim();
        System.out.println(kim.lastname);
    }
}

HouseKimHousePark의 패키지는 jump2java.house 로 동일하다. HouseKim 클래스의 lastname 변수는 접근제어자가 default 이므로 HousePark 클래스에서 main 메소드에서 사용한 것과 같이 kim.lastname 으로 HouseKimlastname 변수에 접근이 가능하다.

protected


접근 제어자가 protected로 설정되었다면, protected가 붙은 변수, 메소드는

  • 동일 패키지내의 클래스 또는
  • 해당 클래스를 상속받은 외부 패키지의 클래스

에서 접근이 가능하다.

Example

package jump2java.house;

public class HousePark {
    protected String lastname = "park";
}
package jump2java.house.person;

import house.HousePark;

public class EungYongPark extends HousePark {       
    public static void main(String[] args) {
        EungYongPark eyp = new EungYongPark();
        System.out.println(eyp.lastname);       
    }    
}

HousePark 클래스를 상속받은 EungYongPark이라는 클래스의 패키지는 jump2java.house.person으로 HousePark의 패키지인 jump2java.house와 다르지만 HouseParklastname 변수가 protected로 설정되었기 때문에 eyp.lastname과 같은 접근이 가능하다.

만약 lastname의 접근제어자가 protected 가 아닌 default 접근제어자였다면 eyp.lastname 문장은 컴파일 에러를 유발 할 것이다.

public


접근 제어자가 public으로 설정되었다면 public 접근 제어자가 붙은 변수, 메소드는

  • 어떤 클래스에서라도 접근이 가능하다.

Example

package jump2java.house;

public class HousePark {
    protected String lastname = "park";
    public String info = "this is public message.";
}

위 예제의 HouseParkinfo 변수는 public 접근제어자가 붙어 있으므로 어떤 클래스에서던지 접근이 가능하다.

profile
Power Weekend

0개의 댓글