[Java] 상속 : 슈퍼 클래스의 멤버에 대한 서브 클래스의 접근

Haeun Noh·2023년 4월 15일
1

JAVA

목록 보기
2/8
post-thumbnail

0416

상속에서의 접근제어자와 그 예시를 알아보자.

학교의 자바수업에서 상속에서는 접근제어자를 사용하는 것으로 접근이 가능해지거나 불가능해진다고 듣게 되었습니다.
접근제어자가 상속에서 중요한 존재라고 생각되어 이 글로 정리하고자 합니다.


접근제어자

객체 지향에서 정보 은닉(data hiding)이란 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨겨야 한다는 개념입니다.

그렇게 함으로써 사용자는 언제나 최소한의 정보만으로 프로그램을 손쉽게 사용할 수 있게 됩니다.

자바에서는 정보은닉을 위해 접근제어자를 제공하고 있습니다.

접근 제어자를 사용하면 클래스 외부에서의 직접적인 접근을 허용하지 않는 멤버를 설정하여 정보 은닉을 구체화할 수 있습니다.



자바의 접근제어자 4가지

자바에는 총 4개의 접근제어자가 있습니다.

  1. public
    다른 모든 클래스에 접근을 허용합니다.

  2. protected
    같은 패키지 내의 모든 클래스는 접근을 허용합니다.
    하지만 다른 패키지에 있더라도 서브클래스는 슈퍼클래스의 protected 멤버에 접근이 가능합니다! 이 차이를 꼭 기억합시다.

  3. default
    같은 패키지 내의 모든 클래스는 접근을 허용합니다.

  4. private
    private은 오직 자기자신 안에서만 사용할 수 있습니다. 클래스 내의 멤버들에게만 접근을 허용하므로 부모클래스든 자식클래스던간에 접근이 불가하게 됩니다.

이번 글은 상속과 관련된 접근제어자를 다루기 때문에 protectedprivate정도를 유심히 봐주시면 좋겠습니다.



슈퍼클래스의 멤버에 대한 서브클래스의 접근

그렇다면 접근제어자를 이용해 어떻게 슈퍼클래스에 접근할 수 있는지를 알아볼까요?

우선, private은 같은 클래스 내에서만 접근할 수 있고 public은 모든 클래스에서 접근할 수 있으니 이 둘은 제외하고 protecteddefault을 중점으로 살펴보도록 하겠습니다.


패키지 P에 있는 클래스 A와 B를 봅시다.

A와 B클래스는 같은 P 패키지에 있으니 protecteddefault는 자식클래스인 B에서 접근하여 사용하고 있는 모습을 볼 수 있죠.


그 다음은 패키지 Q에 있는 클래스 A와 패키지 R에 있는 클래스 B를 봅시다.

부모클래스인 A클래스와 자식클래스인 B클래스는 각각 다른 패키지에 있기 때문에 이번에는 protecteddefault 모두 접근이 불가하겠구나.. 하고 생각하시면 안 됩니다!

앞에서 보셨다시피

protected 접근제어자는 패키지가 같은 경우 또는 상속관계일 때 자식클래스가 부모클래스에 접근할 수 있습니다.

때문에 A클래스를 상속받은 B클래스에서 A의 멤버를 사용할 수 있는 것입니다.

default는 같은 패키지 안에서만 사용할 수 있으니 접근은 불가능하겠죠?



profile
기록의 힘을 믿는 개발자, 노하은입니다!

0개의 댓글