회사에서 객체지향 및 SOLID 원칙에 대해서 설명하는 세미나를 진행하였다.
객체지향 5원칙 (SOLID) 원칙
SRP (Single Responsiblity Principle) - 단일 책임 원칙
- 하나의 클래스는 하나의 책임만 가져야 한다.
- 어떤 변화 (요구 사항등의 변화)에 의해서 클래스를 변경해야하는 이유는 오직 하나여야 한다.
- 나머지 4원칙의 기초가 되는 원칙으로 SRP만 잘 지키면 다른 책임의 변경으로 인한 연쇄 작용을 방지할 수 있다.
OCP (Open-Closed Principle) - 개방, 폐쇄 원칙
- SW의 구성 요소 (모듈, 컴포넌트, 클래스, 메서드)는 확장에는 열려있고 변경에는 닫쳐있어야 한다.
- 변경을 위한 비용은 가능한 줄이고, 확장을 위한 비용은 극대화 한다.
- OCP를 가능하게 하는 중요 매커니즘은 추상화와 다형성이다.
- 새로운 기능이 추가되는 경우, 기존에 제공하던 클래스 (또는 메서드)를 수정하는 것이 아니라 새로운 클래스 (또는 메서드)를 추가해서 기능을 확장한다.
LSP (The Liskov Subsitution Principle) - 리스코프 치환 원칙
- 서브 클래스는 언제나 슈퍼 클래스를 대체할 수 있어야 한다.
- 슈퍼 클래스가 들어갈 자리에 서브 클래스를 넣어도, 원래대로 잘 작동해야 한다.
- 상속의 오용을 방지하게 하는 원칙
- 슈퍼 클래스와 서브 클래스의 동작이 일관성 있게 동작해야함.
ISP (Interface Segregation Principle) - 인터페이스 분리 원칙
-
한 클래스는 자신이 사용하지 않는 인터페이스의 메서드에 의존하지 않아야 한다.
- 하나의 일반적인 인터페이스 보다는, 여러 개의 구체적인 인터페이스가 낫다.
-
SRP가 클래스의 단일 책임을 강조한다면, ISP는 인터페이스의 단일 책임을 강조함.
-
UserService
,BoardService
(X) -
UserCreateService
,BoardCreateService
(O)
DIP (Dependency Inversion Principle) - 의존성 역전의 원칙
-
변화하기 쉬운 것, 자주 변화하는 것 보다 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라.
-
고차원 모듈은 주로 변화하지 않음, 저 차원 모듈에 주로 자주 변화함
-
구체적인 구현 클래스 보다 추상화된 인터페이스에 의존하라, 구체적이며 변동성이 크다면 절대로 이름을 언급하지 마라.