Computer Science (CS)

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

송승현(SSH) 2022. 8. 3. 01:14

# SOLID 원칙이란?

- 로버트 C.마틴 (Robert C.Martin)이 정리한 원칙으로 소프트웨어 작업에서 프로그래머가 소스 코드를 읽기 쉽고 확장하기 쉽게 될 때까지 소스 코드를 리팩토링하여 정리하기 위한 지침이다.

- 이 원칙에는 크게 5가지 원칙이 존재한다. 
   (1) SRP : 단일 책임 원칙 (Single Responsibility Principle)
   (2) OCP : 개방 폐쇄 원칙 (Open/Closed Principle)
   (3) LSP : 리스코프 치환 원칙 (Liskov Substitution Principle)
   (4) ISP : 인터페이스 분리 원칙 (Interface Segregation Principle)
   (5) DIP : 의존관계 역전 원칙 (Dependency Inversion Principle)

 

# SRP : 단일 책임 원칙

- 하나의 클래스는 하나의 책임을 가져야 한다는 원칙.
-  하나의 책임의 변경에서 다른 책임의 변경으로의 연쇄 작용에서 자유로울 수 있다.
- 책임을 적절히 분배함으로써 코드의 가독성 향상, 유지보수 용이라는 이점을 누릴 수 있다.
- 그러나 실무 프로세스는 매우 복잡하고 다양하여 변경 또한 빈번하기 때문에 도메인에 대한 업무 이해가 필요하다.

# OCP : 개발 폐쇄의 원칙

- 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀 있어야한다는 원칙
- 변경을 위한 비용은 가능한 줄이고 확장을 위한 비용은 늘려야 한다는 의미로, 요구사하으이 변경이나 추가사항이 발생하더라도, 기존 구성 요소는 수정해서는 안되며, 기존 구성 요소를 확장하여 재사용할 수 있어야 한다는 뜻이다.
- 주로 인터페이스를 구현하고 이에 대한 새로운 클래스(Impl class)를 만들어서 새로운 기능을 구현한다.

# LSP : 리스코프 치환 원칙

- 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다는 원칙
- 즉 서브 타입은 언제나 기반 타입과 호환된다는 의미이다. (ex: 하위 클래스는 인터페이스 규약을 지켜야 한다.)
- 다형성을 지원하기 위한 원칙으로, 인터페이스를 구현한 구현체는 믿고 사용하려면 이 원칙이 필요하다.

# ISP : 인터페이스 분리 원칙

- 특정 클라이언트를 위한 인터페이스를 기능별로 여러 개를 분리하여야 한다는 원칙
- 다른 말로 말하면 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다!!
- SRP가 클래스의 단일 책임을 강조한다면, ISP는 인터페이스의 단일 책임을 강조한다.
- 인터페이스가 명확해지고, 대체 가능성이 높아진다.

# DIP : 의존관계 역전 원칙 

- 구현체에 의존하지 말고 추상화에 의존해야한다는 원칙 (역할에 의존하자!!)
- DIP를 만족한다는 것은 의존관계를 맺을 때, 구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺는다는 것을 의미한다.

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
본 포스팅은 인프런의 '스프링 핵심 원리 - 기본편 : 김영한 강사님'의 강의와 자료, 넥스트리의 자료를 참고하였습니다.
* 넥스트리
https://www.nextree.co.kr/p6960/
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

객체지향 개발 5대 원리: SOLID

현재를 살아가는 우리들은 모두 일정한 원리/원칙 아래에서 생활하고 있습니다. 여기서의 원칙 이라 함은 좁은 의미로는 개개인의 사고방식이나 신념, 가치관 정도가 될 수가 있겠고, 넓게는 한

www.nextree.co.kr