본문 바로가기
개발

좋은 객체 지향 설계의 5가지 원칙(SOLID)

by jeounpar 2023. 3. 5.

SRP: 단일 책임 원칙(Single Responsibility Principle)

한 클래스는 하나의 책임만 가져야 한다.

하나의 책임은 문맥과 상황에 따라 다르며 클 수 있고 작을 수 있다.

-> 변경이 있을때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것

 

OCP: 개방-폐쇄 원칙 (Open/Closed Principle)

소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.

확장을 하려면 기존 코드를 변경하는 것이 당연한데 이게 뭐지??..

다형성을 활용해보자. 인터페이스를 구현한 객체를 바꿔서 사용하면 될듯!

하지만 결국 코드의 변경은 불가피하다 -> Dependency Injection으로 해결

 

LSP: 리스코프 치환 원칙 (Liskov Substitution Principle)

프로그램의 객체는 프로그램의 정확성을 깨드리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.

다형성에서 하위 클래스(구현 클래스)는 인터페이스 규약을 다 지켜야 한다는 것

ex) 자동차 인터페이스의 엑셀은 앞으로 가라는 기능 -> 뒤로 가게 구현하면 LSP 위반, 느리더라도 앞으로 가야 함

 

ISP: 인터페이스 분리 원칙 (Interface Segregation Principle)

특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

ex) 자동차 인터페이스 -> 운전 인터페이스, 정비 인터페이스로 분리

인터페이스도 작은 단위로 나눠보자..

 

DIP: 의존관계 역전 원칙 (Dependency Inversion Principle)

프로그래머는 구체화에 의존하면 안되며 추상화에 의존해야 한다.

구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻

즉, 역할구현에서 역할(인터페이스)에 의존하게 프로그램을 설계해야 한다. 구현(구현 클래스)에 의존하게 되면 변경에 유연하지 못한다.

'개발' 카테고리의 다른 글

HashMap vs ConcurrentHashMap  (0) 2023.03.05
좋은 객체 지향 프로그래밍  (0) 2023.03.05