아이템 15. 클래스와 멤버의 접근 권한을 최소화하라 #86
Unanswered
peeljunKim
asked this question in
과제
Replies: 2 comments 2 replies
-
|
public 클래스에서 필드를 만들 때, public 필드도 위험하고, static 필드는 더 위험한데 static을 쓰지 않는 것이 더 좋은 설계가 맞지 않나요? |
Beta Was this translation helpful? Give feedback.
1 reply
-
|
공개 API로 만들면 왜 영구적으로 하위 호환으로 관리해야 하는 이유는 무엇인가요? |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
✅ 클래스와 멤버의 접근 권한을 최소화하라
잘 설계된 컴포넌트는 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼는지에 따라 평가됩니다. 이를 통해 구현과 API를 깔끔하게 분리할 수 있습니다.
캡슐화의 장점
톱레벨 클래스와 인터페이스의 접근 수준
package-private접근 수준을 갖게 된 톱레벨 클래스나 인터페이스 이를 사용하는 클래스 내부에private static으로 중첩시키는 것이 좋습니다. 이렇게 하면 불필요하게 외부에 노출되는 것을 막고, 코드를 더 간결하고 안전하게 유지할 수 있습니다.톱레벨 클래스: 파일 이름과 같은 이름으로 정의된
public클래스중첩 클래스: 톱레벨 클래스 외에 다른 클래스가 정의된 경우
보완 전:
package-private톱레벨 클래스인 경우EmailSender는package-private이라com.example.service패키지 내에서는 어디서든 접근 가능합니다.하지만
OrderService에서만 사용되므로, 다른 클래스가 불필요하게 이 클래스에 접근할 가능성이 남아있습니다.보완 후
EmailSender가OrderService내부에 완전히 종속되어 외부에서 접근할 수 없습니다. 이처럼private static중첩 클래스를 사용하면 캡슐화를 강화할 수 있습니다.멤버(필드, 메서드 등)에 부여하는 접근 정리
결론
public클래스의 인스턴스 필드는 상수가 아니라면public으로 선언하지 않는 것이 좋습니다.public static final배열 필드를 두거나, 이를 반환하는 접근자 메서드를 제공해서는 안 됩니다. 배열의 내용이 외부에서 수정될 수 있기 때문입니다.protected멤버는 되도록 적게 만드는 것이 좋습니다.Beta Was this translation helpful? Give feedback.
All reactions