반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

꿈꾸는 사람.

[Java][Visibility] 가시성의 개념. 본문

IT/Language_Design Patterns

[Java][Visibility] 가시성의 개념.

현무랑 니니 2016. 3. 11. 17:35
반응형

이번 글은 객체 지향 언어인 자바의 가시성(Visibility)에 대한 글이다.

가시성이란 클래스와 클래스 멤버인 멤버필드와 메소드의 사용범위를 결정하는 것이다.

즉, 한 클래스의 멤버필드와 메소드에 대한 다른 클래스의 접근 여부를 접근제어자로 제어하는 것이다.


접근 제어자

다른 클래스에서 특정 클래스, 멤버필드, 메소드의 접근을 허용할지 경정하는 것이다.


 접근제어자의 종류

 내용

 public

 클래스와 패키지에 관계 없이어느 곳에서나 접근이 가능하다.

 즉, 접근에 제한이 없는 접근제어자다.

 protected

 같은 패키지에서는 접근 제한이 없다.

 다른 패키지의 경우 상속 관계인 경우만 접근이 가능하다.

 default

 접근제어자를 사용하지 않을 때의 기본 설정 값이다.

 같은 패키지에서만 접근이 가능하다.

 private

 같은 클래스에서만 접근이 가능하다.


예 1) 같은 클래스 A에 있는 메소드 A.

클래스 A의 메소드 A는 자신의 클래스에 있는 모든 접근 제어자(public, protected, default, private)의 멤버필드와 메소드에 접근할 수 있다. 

가시성 예 1)


예 2) 같은 패키지에 있는 클래스 A와 클래스 B

클래스 B에서 public, protected, default 접근제어자를 갖는 클래스 A의 멤버필드와 메소드에만 접근할 수 있다.

즉, private 접근제어자를 가지면 접근할 수 없다.

가시성 예 2)


예 3) 패키지 A에 있는 클래스 A와 다른 패키지에 있는 클래스 B

패키지 A에 있는 클래스 A를 상속한  패키지 B에 있는 클래스 B의 경우다.

클래스 B는 public, protected 접근제어자를 갖는 클래스 A의 멤버필드와 메소드에만 접근할 수 있다.

반면에, 아무 관계가 없는 클래스 C는 public 접근제어자를 가지는 클래스 A의 멤버필드와 메소드에만 접근할 수 있다.

가시성 예 3)


클래스를 정의할 때 권장되는 접근제어자

클래스는 객체를 어디서든지 생성할 수 있어야 하고, 메소드도 동일하다.

하지만 멤버필드는 중요 정보가 저장되므로 접근을 최소화하므로 getter()와 setter() 함수로만 액세스 하게 한다.

 클래스

 public 접근제어자 

 메소드

 public 접근제어자 

 멤버필드

 private 접근제어자 





반응형
Comments