- 개방폐쇄 원칙 (open closed)
0 확장에는 열려 있어야 하고
변경에는 닫혀 있어야 한다.
= 기능을 변경, 확장 가능하지만 그 기능을 사용하는 코드는 수정하지 x 예) Memory byte 를 읽는 기능추가 = 기능은 추가되고 코드 변경 x
(코드는 interface 에 추가됨)
0 확장되는 부분이 추상화됐므로 가능
2.1 위 원칙이 깨질때 주요증상
-
다운캐스팅을 한다.
instance of 의 사용 - 비슷한 if_else 블록이 존재
2.2 개방 폐쇄 원칙은 유연함 기능확장을 위해 기존코드 수정 = 확장에 닫히고 변경에 열림
- 리스코프 치환 원칙
0 상위타입이 아닌 하위 타입을 사용해도 기능이 정상적으로 수행
3.1 위반시 문제점
o 직사각형 정사각형 문제
o 서로 다른 리턴범위
3.2 이 원칙은 계약과 확장에 대한 것 0 명세된 계약대로
o instance of 의 사용은 이 원칙의 위반을 보여준 다.
- 인터페이스 분리원칙
- 인터페이스는 그 인터페이스를 사용하는
클라이언트를 기준으로 분리해야 한다.
용도에 맞게 인터페이스를 분리
4.3 인터페이스 분리 원칙은 클라이언트에 대한 것.
- 의존의 양면성
- 의존역전원칙
- 고수준모듈은 저수준모듈의 구현에
의존해서는 안된다. 저수준모듈이 고수준 모듈에서 정의상 추상타입에 의존해야 한다
-
고수준 모듈: 바이트 데이터를 읽고 암호화하고
결과 바이트 데이트를 쓴다
. 저수준모듈: 1. 바이트를 읽는다.
- 암호화 한다
- 데이터를 쓴다
- I 문제점
- 가격 계산 모듈이 쿠폰에 의존하게
되면 새로운 쿠폰추가시 가격 계산 모듈이 변경되는 상황 초래
- 저수준이 변경되도 고수준에 영향을
안 끼치는게 이 원칙의 목적.
5.2 의존 역전원칙을 통한 변경의 유연함 확보
- 저수준 모듈이 고수준에 의지.
- 추상화
- file Data Reader 가 Bk Source 에 의존
- Byte Source 는 flow Control 의 입장에서
만들어 짐
= 의존이 역전됨.
- 소스코드 상에서 역전됨
5.4 의존 역전과 패키지
- flow control 과 Byte source 가
하나의 패케이로 묶을 수 있음
- 정리.
- 변화에 유연하게 대처하는 것
- 단일책임원칙, 인터페이스 분리원칙 = 객체의 크기 조절 (기능, 책임)
-
리스코프, 의존 역전원칙
= 추상화, 다형성, 기능확장