
SOLID 원칙
- 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프록그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어기억술로 소개한 것.
S(SRP)
- 단일 책임 원칙 (Single Responsibility Principle)
한 클래스는 하나의 책임만 가져야 한다.
- 함수가 너무 많은 작업을 처리하지 않고 하나만 처리하도록 하는 것이 좋다.
- 너무 많은 작업을 처리할 경우 재사용이 어렵고 긴밀한 결합때문에 분리가 어렵다.
O(OCP)
- 개방-페쇄 원칙 (Open/Closed Principle)
소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
- 일단 구현 된 클래스는 추가 수정을 하지 못하게 하며 더 많은 기능이 필요한 경우 상속과 같은 확장 기능을 사용하여 추가한다.
- 하나의 변화가 다른 곳에도 연쇄적으로 변화를 일으키는 것을 방지하기 위해 만들어짐.
- 변화하는 부분을 추상화 하는것이 핵심.
L(LSP)
- 리스코프 치환 원칙 (Liskov substitution principle)
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
- 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
- 특정 메소드가 상위 타입을 인자로 사용한다고 할 때, 그 타입의 하위 타입도 문제없이 정상적으로 작동을 해야함.
I(ISP)
- 인터페이스 분리 원칙 (Interface Segregation Principle)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
- 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다.
- 큰 덩어리의 인터페이스들을 구체적이고 작은 다위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 한다.
D(DIP)
- 의존관계 역전 원칙 (Dependency inversion principle)
프로그래머는 '추상화에 의존해야지, 구체화에 의존하면 안된다.' 의존성 주입은 이 원칙을 따르는 방법 중 하나다.


- 자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않게 하는 것.