Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[Java] 접근 수준(access level) Computer & Program

오늘 포스팅하는 건...
오래전 Effective Java를 보다가 내가 지금까지 잘못 알고 있었던 내용...
맨날 포스팅한다... 한다... 하다가 여지껏 못 한거 오늘에서야...=_=;;;;;;


접근 수준(access level)

자바 프로그래밍 언어는 정보은폐를 지원하기 위한 많은 기능을 가지고 있다. 그 중 하나가 클래스, 인터페이스, 메소드, 멤버의 접근성(accessibility)을 결정하는 접근 제어(access control)매커니즘이다. 접근 제어 메커니즘은 이 엔티티들이 어디 선언되었고, 어떤 접근 수정자(modifier, private, protected, public 같은 것)가 붙어 있느냐에 따라 다른 접근성을 제공한다.
(물론 다른 객체지향 언어에도 이런 접근 수정자가 있긴 하지만, 자바와는 약간 다를 수 있다.)

private : 해당 멤버를 선언한 클래스 내부에서만 접근할 수 있다.
package-private (default) : 해당 멤버를 선언한 클래스와 이 클래스와 같은 패키지에 있는 모든 클래스에서 접근할 수 있다. 접근 수정자를 붙이지 않으면 정해지는 접근 수준이므로 기본 접근이라고도 한다.
protected : 해당 멤버를 선언한 클래스, 이 클래스의 하위 클래스(몇 가지 제약이 있기는 하다[JLS, 6.6.2]), 이 클래스와 같은 패키지에 있는 모든 클래스에서 접근할 수 있다.
public : 모든 클래스에서 접근할 수 있다.



내가 여태 잘못 알고 있었던 것은 접근 수정자를 붙이지 않은
package-private와 protected를 동일한 것으로 알고 있었다는 점...
이 둘은 전혀 다른 놈들인데 말씨...
처음 공부할 때는 다들 똑같은 놈이라고 할지도 모르겠지만
(솔직히 같은 놈이라고 설명한 책도 많다... 속았다...=_=;;;;;)
객체를 처음 배울 때 맨날 말로만 죽어라고 하는
정보은폐(information hiding)나 캡슐화(encapsulation)의 개념을
몸으로 느끼면 이 둘은 서로 다른 놈이라는 것을 알 것이다.

클래스의 정보는 최대한 은폐해야 한다.
하위 클래스에 공개할 것이 아니라면 protected가 아닌 package-private 접근 수정자를 사용하여야 한다. 정보는 최대한 은폐하여야 하니까... 가능하다면 접근 수정자private로 해주는 것이 좋다. Effective Java에 멤버는 거의 무조건 private로 하고, 메소드도 일단은 private로 해 놓은 다음 package-private, protected, public으로 서서히 정보를 공개해나가는 방식으로 하라고 되어 있다. 맞는 말인 것 같다. 일단 은폐한다고 이득이 되면 됐지 불이득이 되지는 않으니...ㅋㅋ

핑백

  • Sigel's house made of ice 。。。 : [Refactoring] 가시성(Visibility) 2009-09-09 22:39:15 #

    ... 가시성(Visibility) 접근 수정자 protected와 package-private의 차이점을 얼마전까지 난 몰랐다. 이 둘의 차이점은 protected는 package-private보다 상속받는 놈에게 더 가시성(Visibility)이 크다는 점이다. 일단 의식하고든 무의식 중이든 packag ... more

덧글

댓글 입력 영역

Google AdSense (text/image)