티스토리 뷰

▶자바에서의 접근 권한 제어자(Access Modifier)

오늘은 자바에서의 접근 권한 제어자에 대해 알아보려고 합니다.

 

🔎 접근 권한 제어자


변수나 메소드의 사용 권한을 다음과 같은 접근 제어자를 사용하여 설정할 수가 있는데요.

 

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

 

접근 권한 제어자는

private → default → protected → public

순으로 보다 많은 접근 허용합니다.

 

📌 private

접근 권한 제어자가 private로 설정되었다면 private이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능합니다.

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

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

 

📌 default

접근 권한 제어가를 별도로 설정하지 않는다면 접근 제어자가 없는 변수, 메소드는 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 클래스에서 HouseKim의 lastname 변수에 접근이 가능합니다.

 

📌 protected

접근 권한 제어자가 protected로 설정되었다면 protected가 붙은 변수, 메소드는 동일 패키지의 클래스 또는 해당 클래스를 상속받은 다른 패키지의 클래스에서만 접근이 가능하다.

 

📄 house/HouseKim.java

package house;

public class HouseKim {
    protected String lastname = "kim";
}

 

📄 house/person/DoeunKim.java

package house.person;

import house.HouseKim;

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

HouseKim 클래스를 상속받은 DoeunKim 클래스의 패키지는 house.person으로 HouseKim의 패키지인 house와 다르지만 HousePark의 lastname 변수가 protected이기 때문에 dek.lastname과 같은 접근이 가능했습니다.

만약 lastname의 접근 권한 제어자가 protected가 아닌 default 접근 권한 제어자였다면 dek.lastname 문장은 컴파일 오류가 발생했을 것입니다.

 

 📌 public

접근 권한 제어자가 public으로 설정되어있다면 public 접근 제어자가 붙은 변수, 메소드는 어떤 클래스에서라도 접근이 가능합니다.

package house;

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

public class Sample {
    public static void main(String[] args) {
        HouseKim houseKim = new HouseKim();
        System.out.println(houseKim.info); // this is public message
    }
}

 


이번 글에서 위와 같은 4가지 접근 권한 제어자에 대해 알아보았습니다.

위의 예제는 변수만을 대상으로 설명했지만 클래스나 메소드에서도 마찬가지로 접근 권한 제어자의 규칙을 따릅니다.

접근 권한 제어자를 모두 public으로 설정해도 프로그램은 잘 동작할 것입니다.

하지만 접근 권한 제어자를 이용하면 개발자의 코딩 실수를 방지할 수 있고 기타 위험 요소를 제거할 수 있는 등의 장점이 있습니다.

728x90
LIST
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함