상속에서의 접근제어자와 그 예시를 알아보자.
학교의 자바수업에서 상속에서는 접근제어자를 사용하는 것으로 접근이 가능해지거나 불가능해진다고 듣게 되었습니다.
접근제어자
가 상속에서 중요한 존재라고 생각되어 이 글로 정리하고자 합니다.
객체 지향에서 정보 은닉(data hiding)
이란 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨겨야 한다는 개념입니다.
그렇게 함으로써 사용자는 언제나 최소한의 정보만으로 프로그램을 손쉽게 사용할 수 있게 됩니다.
자바에서는 정보은닉을 위해 접근제어자를 제공하고 있습니다.
접근 제어자를 사용하면 클래스 외부에서의 직접적인 접근을 허용하지 않는 멤버를 설정하여 정보 은닉을 구체화할 수 있습니다.
자바에는 총 4개의 접근제어자가 있습니다.
public
다른 모든 클래스에 접근을 허용합니다.
protected
같은 패키지 내의 모든 클래스는 접근을 허용합니다.
하지만 다른 패키지에 있더라도 서브클래스는 슈퍼클래스의 protected
멤버에 접근이 가능합니다! 이 차이를 꼭 기억합시다.
default
같은 패키지 내의 모든 클래스는 접근을 허용합니다.
private
private
은 오직 자기자신 안에서만 사용할 수 있습니다. 클래스 내의 멤버들에게만 접근을 허용하므로 부모클래스든 자식클래스던간에 접근이 불가하게 됩니다.
이번 글은 상속과 관련된 접근제어자를 다루기 때문에 protected
와 private
정도를 유심히 봐주시면 좋겠습니다.
그렇다면 접근제어자를 이용해 어떻게 슈퍼클래스에 접근할 수 있는지를 알아볼까요?
우선, private
은 같은 클래스 내에서만 접근할 수 있고 public
은 모든 클래스에서 접근할 수 있으니 이 둘은 제외하고 protected
와 default
을 중점으로 살펴보도록 하겠습니다.
패키지 P에 있는 클래스 A와 B를 봅시다.
A와 B클래스는 같은 P 패키지에 있으니 protected
와 default
는 자식클래스인 B
에서 접근하여 사용하고 있는 모습을 볼 수 있죠.
그 다음은 패키지 Q에 있는 클래스 A와 패키지 R에 있는 클래스 B를 봅시다.
부모클래스인 A클래스와 자식클래스인 B클래스는 각각 다른 패키지에 있기 때문에 이번에는 protected
와 default
모두 접근이 불가하겠구나.. 하고 생각하시면 안 됩니다!
앞에서 보셨다시피
protected 접근제어자는 패키지가 같은 경우 또는 상속관계일 때 자식클래스가 부모클래스에 접근할 수 있습니다.
때문에 A클래스를 상속받은 B클래스에서 A의 멤버를 사용할 수 있는 것입니다.
default
는 같은 패키지 안에서만 사용할 수 있으니 접근은 불가능하겠죠?