SOLID principles
Single Responsibility
Open-Closed
Liskov Substitution
Interface Segregation
Dependency Inversion
Single Responsibility Principle(SRP)(단일 책임 원칙)
: 단일 책임 원칙이란 모든 클래스는 하나의 책임만 가져야함.
- 클래스 구현할 때 한가지 기능에만 중점을 두기.
두가지 이상의 기능이 필요할 때에는 클래스 나누기
- 장점 : 특정기능 수정할 때 관련 클래스 외에는 건드릴 필요 없음.
- 한 개의 클래스에 여러 기능이 있었다면(SRP 지키지 않았다면)?
관련된 모든 클래스 수정해야하는 상황 발생 가능
- add 함수는 덧셈만 함
- numPrint 함수는 숫자 출력만 함
- addPrint는 SRP 안지킴
Open-close Principle(OCP, 개방-폐쇄 원칙)
: 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해 열려있어야하고, 수정에 대해서는 닫혀 있어야 한다.
기능이 추가 되어도 수정이 필요하지 않은 코드가 OCP를 만족!
Dependency Inversion Principle(의존관계 역전 원칙)
- 소프트웨어 모듈들을 분리하는 특정 형식을 지칭
- 이 원칙을 지키면 상위 계층이 하위 계층에 의존하는 전통적인 의존관계를 역전 시킴으로써
상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있음.
동물원 : high level
고양이, 강아지, 양, 소 : low level
Zoo 클래스는 Cat, Dog 클래스들에 의존관계가 있음.
동물 늘어나면 Zoo 클래스 계속 수정해야함
수정한다면?
의존 관계가 Animal 추상클래스에 의해 역전되었고,
Zoo 클래스는 각 Cat, Dog 클래스로부터 독립됨.
Liskov Substitution principle
: 컴퓨터 프로그램에서 자료형 S가 자료형 T의 하위형이라면 필요한 프로그램의 속성(정확성, 수행하는 업무)의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 교체(치환)할 수 있어야 한다는 원칙
->Fish 관련된 클래스는 따로 설계해야 함(처음 설계할 때부터 고려했어야)
Interface Segregation(인터페이스 분리 원칙)
: 클라이언트가 자신이 이용하지 않는 메소드에 의존하지 않아야 한다
큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리 -> 클라이언트들이 꼭 필요한 메소드만 이용하도록