티스토리 뷰
1. 인터페이스에는 불필요한 메소드가 있어서는 안된다.
2. 필요한 기능에 맞는 인터페이스를 여러 개 생성하는 것이 모든 메소드를 다 가지는 인터페이스보다 낫다.
3. 아래는 지난 Open Close 원리에서 붙였던 도면을 여기에도 가져다 쓰고 있다.
3-1 아래의 도식 역시 Interface segregation의 원칙이 반영되어 있다.
3-2 FlyBehavior, QuackBehavior라는 두개의 별도의 기능을 가지는 인터페이스를 사용하고 있기 때문이다.
4. 하지만 아래의 예제의 경우, Duck 클래스는 두 개의 인터페이스를 구현한 객체를 소유하는 형식으로 구현한다.
4-1 즉 Duck 클래스가 가지는 기능의 형태를 다양한 방식으로 확장하고 있는 것이지
4-2 Duck 자체의 기능을 추가하는 방식은 아니다.
5. 인터페이스 분리의 원칙을 더 명확하게 보이는 예제는 아래의 그림이 더 적절해 보인다.
5-1 고속도로와 주차장에서 has하고 있는 Vehicle은 다른 기능을 요구하고 있고 적절한 경우로 구현할 수 있다.
6. 아래의 그림도 Pet이라는 인터페이스를 확장하여 PetDogs, PetCats라는 인터페이스를 생성하고 있다.
6-1 개와 고양이는 Pet 뿐 아니라 PetDogs, PetCats를 확장해야 한다.
6-2 이 방식은 수직적인 구조를 가지고 있어서 부모 인터페이스의 기능을 모두 구현해야 한다.
6-3 수평적인 구조로도 인터페이스를 만들 수 있는데 이는 7번 항목을 참고한다.
7. 수평적 구조로 여러 개 인터페이스를 조합하여 새로운 용도의 인터페이스를 만들 수 있다.
7-1 스프링 프레임워크 라이브러리 구현에 상당히 많이 사용되고 있다.
7-2 동물 인터페이스와 애완동물 인터페이스를 상속하여 dog인터페이스를 만들 수 있다.
'Spring > Spring Basic' 카테고리의 다른 글
Spring Basic : Spring MVC Formatter 사용하기 (0) | 2020.08.07 |
---|---|
Spring Basic : 외부 설정 파일에서 읽어오기 (정리) (0) | 2020.07.24 |
Spring Basic : Open Close 원칙 (0) | 2020.07.21 |
Spring Basic : Spring Bean LifeCycle (0) | 2020.07.21 |
Spring Basic : Dependency Injection @Primary, @Qualifier (0) | 2020.07.21 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib