[Java] 접근제한자 종류, 사용 방법

Hee·2024년 4월 1일

Java 복습

목록 보기
23/46
post-thumbnail

접근제한자

: 클래스 내에서 멤버의 접근을 제한하는 역할을 한다.


접근제한자의 종류

  • public

    • 어떤 클래스든 접근할 수 있다.
  • protected

    • 자기 자신, 같은 패키지, 서로 다른 패키지이더라도 상속받은 자식 클래스에서는 접근가능하다.
  • private

    • 자기 자신만 접근할 수 있다.
  • 접근제한자를 적지 않으면 default 접근 지정자

    • 자기자신과 같은 패키지에서만 접근할 수 있다.
public class AccessObj{
	private int i = 1;
    int k = 2;			// default 접근 제한자
    public int p = 3;
    protected int p2 = 4;
}


접근제한자 사용과 예시

  • 다른 클래스에서 AccessObj를 사용해보기
    • AccessObj 클래스의 필드 i 접근제한자는 private이므로 AccessObj 객체를 생성했더라도, 다른 클래스인 AccessObjExam에서 접근 불가능하다.
public class AccessObjExam{
	public static void main(String[] args){
    	private int i = 1;
        int k = 2;			// default 접근 제한자
        public int p = 3;
        protected int p2 = 4;
        
        AccessObj po = new AccessObj();
        
        System.out.println(po.i);	// 컴파일 오류가 발생한다.
        System.out.println(po.k);
        System.out.println(po.p);
        System.out.println(po.p2);
    }
}

  • 다른 패키지에서 AccessObj를 사용해보기
    • 패키지가 달라졌기 때문에 public 접근제한자를 이용한 필드만 접근 가능하고, 나머지 접근제한자(default, protected, private)는 접근 불가능하다.
public class AccessObjExam{
	public static void main(String[] args){
    	AccessObj po = new AccessObj();
        
        System.out.println(po.i);	// 컴파일 오류 발생
        System.out.println(po.k);	// 컴파일 오류 발생
        System.out.println(po.p);
        System.out.println(po.p2);	// 컴파일 오류 발생
    }
}

  • 다른 패키지에서 AccessObj를 상속받은 클래스에서 사용해보기
    • 패키지는 다르지만 상속관계에 있으므로, protected를 이용한 필드에 접근 가능하다.
public class AccessObjExam extends AccessObj{
	public static void main(String[] args){
    	AccessObj po = new AccessObj();
        
        System.out.println(po.i);	// 컴파일 오류 발생
        System.out.println(po.k);	// 컴파일 오류 발생
        System.out.println(po.p);
        System.out.println(po.p2);	
    }
}

0개의 댓글