본문 바로가기
java

[java] 접근제어자

by 개발LOG 2024. 7. 23.

범위가 큰 순

public > protected > default > private

 

private

- 해당 클래스 내에서만 접근 가능

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

secret 변수와 getSecret 메서드는 오직 Sample 클래스에서만 접근이 가능하고 다른 클래스에서는 접근이 불가능하다.

 

default

- 자바의 기본 접근제어자

- 같은 패키지 내에서만 접근 가능

 

house/HouseKim.java

package house;  // 패키지가 동일하다.

public class HouseKim {
    String lastname = "kim";  // lastname은 default 접근제어자로 설정된다.
}

house/HousePark.java

package house;  // 패키지가 동일하다.

public class HousePark {
    String lastname = "park";

    public static void main(String[] args) {
        HouseKim kim = new HouseKim();
        System.out.println(kim.lastname);  // HouseKim 클래스의 lastname 변수를 사용할 수 있다.
    }
}

HouseKim과 HousePark의 패키지는 house로 동일하다. 따라서 HousePark 클래스에서 default 접근 제어자로 설정된 HouseKim의 lastname 변수에 접근이 가능하다.

 

 

protected

- 같은 패키지의 클래스 또는 해당 클래스를 상속받은 클래스

house/HousePark.java

package house;  // 패키지가 서로 다르다.

public class HousePark {
    protected String lastname = "park";
}

house/person/EungYongPark.java

package house.person;  // 패키지가 서로 다르다.

import house.HousePark;

public class EungYongPark extends HousePark {  // HousePark을 상속했다.
    public static void main(String[] args) {
        EungYongPark eyp = new EungYongPark();
        System.out.println(eyp.lastname);  // 상속한 클래스의 protected 변수는 접근이 가능하다.
    }
}

HousePark 클래스를 상속한 EungYongPark 클래스의 패키지는 house.person으로 HousePark의 패키지인 house와 다르지만 HousePark의 lastname 변수가 protected이기때문에 eyp.lastname과 같은 접근이 가능하다. 만약 lastname의 접근 제어자가 protected가 아닌 default였다면 eyp.lastname 문장은 컴파일 오류가 발생할 것이다.

public

- public 접근 제어자가 붙은 변수나 메서드 어떤 클래스에서도 접근 가능

package house;

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

public class Sample {
    public static void main(String[] args) {
        HousePark housePark = new HousePark();
        System.out.println(housePark.info);
    }
}

'java' 카테고리의 다른 글

[java] HashMap  (0) 2024.07.22
[java] 제네릭스, ArrayList  (0) 2024.07.22
[java] StringBuffer, StringBuilder, String 차이  (0) 2024.07.22
[java] 배열  (0) 2024.06.04
[java] 메서드 오버로딩, 매서드 오버라이딩, 가변인자  (0) 2024.06.04