Replies: 2 comments
-
|
Beta Was this translation helpful? Give feedback.
0 replies
-
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Intro
잘 설계된 컴포넌트라 함은, 클래스의 내부 데이터와 구현 정보를 외부 컴포넌트로부터
얼마나 잘 숨겼느냐!
에 달렸다.정보 은닉의 장점
시스템을 구성하는 컴포넌트들을 서로
독립시켜서
개발/테스트/최적화/수정을 개별적으로 할 수 있게 해주는 것과 연관되어 있다.접근 제어자 활용하기
(1) 패키지 외부에서 쓸 필요가 없다면 default(package-private)로 선언하는 것이 좋다.
내부 구현이 되어 언제든지 수정할 수 있으므로, 다음 릴리즈에서 클라이언트에 아무런 영향 없이 수정/교체/제거할 수 있다.
(2) 하나의 클래스에서만 사용하는 default(package-private) 클래스나 인터페이스는, 이를 사용하는 클래스 안에 private static으로 중첩시켜보자.
default(package-private)로 선언되었다면, 같은 패키지 내의 다른 클래스에서도 접근이 가능하다. 만약 해당 클래스가
하나의 특정 클래스
에서만 사용된다면, 불필요하게 다른 클래스에서도 접근이 가능해지는 단점이 있다.이러한 단점을 보완하기 위해, 아래와 같이
중첩 클래스
를 통해, 다른 패키지나 클래스에서 접근할 수 없도록 제한할 수 있다.=> 불필요한 외부 접근을 제한할 수 있으며, 클래스 간의 관계도 더 명확해지고, 관련된 코드를 한 곳에 모아서 관리할 수 있다는 장점이 있다.
상위 클래스의 메서드를 재정의할 때는 그 접근 허용 범위를 상위 클래스에서보다 좁게 설정할 수 없다.
이 제약은 리스코프 치환 원칙(상위 클래스의 인스턴스는 하위 클래스의 인스턴스로 대체해 사용할 수 있어야 한다)을 지키기 위해 필요하다. 만약 상위 클래스보다, 하위 클래스에서 접근 허용 범위를 좁게 설정하면
런타임에서 메서드 호출이 불가능
해지므로, 원칙에 위배된다.Beta Was this translation helpful? Give feedback.
All reactions