이번에 코틀린을 사용하다가 자바의 접근 제한자에 대해서 궁금한 것이 생겨서 내가 공부한 내용을 정리해 보려고 한다.
먼저 자바의 접근제한자는 4가지가 있다.
1. public : 어느 곳에서나 접근이 가능함
2. protected : 다른 패키지에서는 접근이 불가능함 *단 상속받은 클래스에서는 접근이 가능함
3. default : 다른 패키지에서는 접근이 불가능함
4. private : 자기 클래스에서만 접근이 가능함
public > protected > default > private 순으로 더 많은 접근이 가능하다.
private부터 확인해 보자
변수들은 private으로 설정해 두고 나머지 생성자, 게터 세터는 퍼블릭으로 해뒀다.
다른 파일들을 확인해 보자
같은 패키지임에도 name에는 접근이 안되나 게터함수를 이용해서 age에는 접근이 가능하다.
다른 패키지에서도 마찬가지로 접근이 불가능할 것이기 때문에 다음 제한자로 넘어가 보겠다.
default의 코드를 확인해 보자
변수가 의 접근제한을 안 붙이면 default 접근제한자가 알아서 붙는다.
같은 패키지의 다른 파일을 확인해 보자
같은 패키지 내부의 다른 파일임에도 문제없이 접근이 가능하다.
그럼 다른 패키지에서 접근을 확인해 보자.
다른 패키지에서는 name변수의 접근이 막힌다. 마지막으로 다른 패키지에서 상속받은 클래스는 어떨까?
상속을 받았지만 여전히 name에는 접근이 불가능하다.
이제 protected에 대해서 확인해 보자
이미 default에서 접근이 가능했던 것처럼 protected 역시 접근이 가능하다.
이제 다른 패키지는 어떨까?
역시 name에 접근이 안된다. 그러면 상속받은 것은 어떨까?
이번에는 Person으로 객체를 만든 것이 아니라 Test2의 객체로 만들고 name의 접근을 하니깐 접근이 가능했다.
만약 Test2의 객체가 아닌 Person의 객체로 만들면 name에는 접근이 불가능하다. --> 다른 패키지이기 때문이다.
마지막으로 public에 대해서 알아보자
이번에는 접근제한을 public으로 해봤다.
같은 패키지에서는 역시 접근이 가능하다. 그러면 상속관계는 어떨까?
역시 접근이 가능하다.
마지막으로 아무 연관도 없으면 어떨까?
드디어 다른 패키지임에도 접근이 가능하다.