열혈 Java 8 - 접근 수준 지시자

whipbaek·2021년 11월 13일
0

열혈Java

목록 보기
8/18

  • Java에서 제공하는 접근 수준 지시자

//클래스 정의 대상 public와 default선언이 갖는 의미

public class AAA{
   ....
}

class ZZZ {
   ....
}
  • public : 어디서든 인스턴스 생성이 가능하다.
    -> 소스 파일명을 AAA.java로 설정해야한다. (외부 노출도를 높이기 위함)
    -> 따라서 2가지의 public 클래스를 설정할 수 없다.

  • default : 동일 패키지로 묶인 클래스 내에서만 인스턴스 생성을 허용한다.
    -> 파일명을 무엇으로 하든 상관없음

  • 현재 cat.java와 Dog.java의 package가 다르다.

  • Dog.java에서는 public 클래스인 cat은 불러 올 수 있다.

  • 그러나 Duck는 같은 패키지 내에서만 불러 올 수 있기에 Dog.java에서는 불러 올 수 없다.

  • 위의 선언을 원한다면 Dog.java의 package를 zoo로 바꾸면 해결된다.

  • public : 클래스 외부에서 접근이 가능하다. ( . <- 지시자로 접근 가능)
  • private : 클래스 내부에서만 접근이 가능하다.

  • default 메서드인 makeHappy()는 다른 package에서 불러 올 수 없다.
    (default 는 private 보다는 한단계 더 (클래스 내 -> 패키지 내) 확장 된 공간에서 접근이 가능하다고 생각하면 된다.)

protected 이해를 위한 설명

  • package를 따로 선언하지 않으면 디폴트 패키지로 묶인다.
  • extends는 상속을 의미.

  • 그러나 상속 관계에서 패키지가 다를 경우에는 접근이 불가능하다.
    (AAA는 alpha 패키지, ZZZ는 default 패키지)

  • 이 때 상속 관계에서 패키지가 달라도 접근이 가능하게 해주는 키워드가 protected 이다.
    -> 위의 protected 선언이 없다고 가정하면 밑에서 오류가 발생!

출처 : 윤성우의 열혈Java 프로그래밍

profile
코딩 및 CS에 관하여 공부합니다.

0개의 댓글

관련 채용 정보