반응형
SOLID
Single Responsibility Principle(SRP)
가장 핵심이며, 가장 지키기 어렵다.
⇒ 클래스는 단 한가지의 변화만 가진다. 즉, 단 하나의 책임만 가진다.
행동(책임) 하나에 연관된 속성들을 엮어 클래스로 만든다.
별개의 행동은 별개의 클래스로 분리한다.
책임을 제대로 만든다는 것은 행동 단위의 명세를 만드는 것과 비슷하다
⇒ interface를 잘 설계하는 것
여기서 중요한 것은 하나의 책임 뿐만 아니라, 분리된 두 클래스간의 관계 복잡도 역시 줄이도록 설계하는 것이다.
Open-Closed Principle(OCP)
소프트웨어는 변경에는 닫혀있되, 확장에는 열려있어야 한다.
추상화를 얼마나 잘하냐에 따라서 갈리게된다. → 추상클래스를 통해 구현
OCP를 위한 조언
- 모든 멤버 변수는 private을 사용한다.
- 전역변수를 사용하지 않는다.
- RTTI (런타임에 타입이 확정됨)는 위험하다.
Liskov Substitution Principle (LSP)
부모 객체를 호출하는 동작에서 자식객체가 부모 객체를 완전히 대체할 수 있어야 한다.(정상적으로 동작해야한다.)
서브타입은 부모타입의 기능을 모두 가지고 있으므로, 부모타입대신에 들어가서 역할을 수행할 수 있다는 의미이다.
상속은 다형성을 통한 확장성 획득을 목표로한다. 따라서 서브타입은 구체화여야지, 변경시켜서는 안된다.
Interface Segregation Principle (ISP)
특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
하나의 행동을 가진 인터페이스들로 나누고, 인터페이스를 쓰고싶은 것만 상속하라.
Dependency inversion principle (DIP)
상위 모듈은 하위 모듈에 의존해서는 안된다.
추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상황 의존해야한다.
반응형