본문 바로가기
프로그래밍 언어/JAVA

[Java] 접근 제어 지시자(private, protected, public)

by 티옌.liy 2022. 11. 11.

 

1. 접근 제어 지시자 (Access Modifier)

클래스 외부에서 클래스의 맴버 변수, 메서드, 생성자를 접근할 수 있는 권한을 설정하는 키워드이다.

 

1.1 비공개 (private) 

private 지시자는 같은 클래스 내부에서만 접근 가능하다

외부 클래스 및 상속 관계 클래스도 접근이 불가능하다.

조건에 따라 get, set메서드로, 제한적인 접근 기능을 제공하기도 한다.

 

사용 목적

객체의 값(맴버 변수), 기능(메서드)를 외부에 접근 및 사용을 원치 않을 때

객체의 동작 매커니즘을 노출하고 싶지 않을 때

보안성 확보와 객체 오남용을 방지하고 싶을 때

 

 

1.2 보호, 부분 공개 (protected)

protected 지시자는 같은 패키지와 상속받은 자식 클래스만 접근 가능하다.

외부 클래스는 접근이 불가능하다.

조건에 따라 get, set메서드로, 제한적인 접근 기능을 제공하기도 한다.


사용 목적

상속받은 클래스에게만 부분적으로 값(맴버 변수)과 기능(메서드)를 공유하고 싶을때

[Java 한정] 같은 패키지에서는 값과 기능을 공유하고 싶을 때

 

 

1.3 공개 (public)

public 지시자는 클래스 외부에서 언제든지 누구나 접근이 가능하다.

사용방법이 가장 편하지만(편의성) 가장 조심해서 사용해야하는 키워드(보안성).


사용 목적

객체의 값과 기능을 누구나 사용할 수 있도록 공유하고 싶을 때.

데이터의 중요성이 낮아, 누구나 접근해도 무방할 때.

교육 시 실습을 위한 테스트 코드

 

 

1.4 기본 (default) [Java 한정]

default는 지시자가 없어 명시하지 않으면 자동으로 적용된다.

같은 패키지 내에서만 접근이 가능하며, 상속받은 클래스도 패키지가 다르면 접근이 불가능하다.

 

사용 목적

같은 패키지(폴더) 내 객체간에는 값(맴버 변수)와 기능(메서드)를 공유하고 싶을 때

[사담] 실습 시 일일히 접근 제어 지시자 쓰기 귀찮을 때

 

 

1.5 접근 제어 지시자 사용 팁

protected와 default 지시자는 혼동하기 쉬우므로, 제어 범위를 명확히 학습 권장

private 지시자는 편의성을 희생하고 보안성을 얻기 위해 사용하므로, 오남용 시 유지보수가 힘들어진다.

public 지시자는 편의성을 얻고 보안성을 희생한 것이므로, 오남용 시 보안 이슈가 발생할 수 있다.

 

2. 정보 은닉 (information hiding)

객체지향에서 필요한 정보의 노출을 최소화하여, 객체가 오작동, 오기능을 사전에 방지하기 위함이다.

객체 사용자가 사용할 값과 기능만 노출하여 사용 난이도(복잡도)를 낮추어 더 효율적으로 객체를 사용하도록 유도한다.

이를 위해 get, set 메서드를 제공하여 제작자가 원하는 맴버 변수에만 접근이 가능하도록 설계한다.

 

 

예시 코드 - get ,set  메서드를 활용한 정보 은닉 및 제한적인 접근
public GameUserProfile{
    private int userID;
    protected Inventory userInventory;
    public int userLevel;
    public String userNickname;

    // userID 값을 반환하는 get 메서드
    public getUserID(){
        return userID;
    }

    // userInventory에 아이템을 추가하는 set 메서드
    public setUserInventory(Item object){
        this.userInventory.slot.add(object.);
    }

    ...
    
}

 

댓글