내가 이해한 내용을 바탕으로 해석하여 정리한 글
- 객체지향 프로그래밍의 설계원칙이며 원칙들의 앞글자를 모아 SOLID원칙이라고 한다.
S - Single-responsiblity Principle (단일책임의 원칙)
O - Open-closed Principle (개방-폐쇄의 원칙)
L - Liskov Substitution Principle (리스코프 치환 원칙)
I - Interface Segregation Principle (인터페이스 분리의 원칙)
D - Dependency Inversion Principle (의존 역전의 원칙)
SRP : 하나의 클래스는 하나의 책임만 가져야 함.
- 클래스가 하나의 책임만 지게된다면, 응집도는 높게 결합도는 낮게 설계되기 때문
- A라는 작업을 위해 설계된 클래스가 있다면 해당 클래스는 A라는 작업만 해야하며 다른작업은 할 수 없도록 해야함
- 이 원칙을 지키게되면 유지보수 작업시 작업해야 할 범위가 명확해지며 낮은 결합도로 작업난이도도 매우 낮아지게됨
OCP : 확장(기능추가 등)에는 용이하고 변경(코드변경)에 대해서는 폐쇄적이어야 함.
- 보통 이런경우는 추상화된 클래스( ex: 동물, 전자기기, 도형 등)를 정의해놓고 추상화된 개념안에 내용들이 추가될때 용이하도록 설계한다.
인터페이스를 정의해놓고 사용하게 된다면 개발한 기능의 문제,버그만 없다면 새로운 기능이 추가될때에는 추상화된 클래스를 상속받아
개발할 수 있게된다.
- 만약 기존의 개발한 코드가 변경이 되어야한다면 다른 클래스들에 영향도는 매우 적을것이다.
LSP : 자식클래스는 상위클래스의 기능을 동작할 수 있어야함.
- 자식클래스에서 상위클래스의 기능을 수행한다는 의미는 자식클래스는 상위클래스의 의미를 일관되게 유지한다는 의미
- 앞서말한 OCP와 유사하게 확장의 개념이 포함된다고 볼 수 있음
ISP : 인터페이스는 서로 분리되어야함.
- SRP는 클래스 자체에 하나의 책임이었다면 ISP는 인터페이스의 개념 자체도 포괄적으로 여러 기능을 포함한것이 아닌 하나의
개념만 포함하여 작성되어야 한다는 의미
DIP : 클래스, 객체간 의존성이 생긴다면 인터페이스와 의존성이 생겨야 함
- 필연적으로 객체끼리는 의존성이 생기기 마련이다. 그러한 의존성을 객체,클래스간에 생기는것이 아닌 추상화된 클래스, 인터페이스와 생기도록 설계하는것을 지향하는 것
- 추상화된 인터페이스의 함수를 호출하여 하위클래스를 직접호출하는것이 아닌 상위 추상화 클래스의 함수를 호출하는것이 바람직한것을 의미함
추후 SOLID 개념을 포함한 소스코드를 작성하여 올리도록하자!