Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

To Dare Is To Do!

객체 지향 설계의 5가지 원칙(SOLID) 본문

Spring

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

Nick_Choi 2023. 12. 23. 15:14

SOLID란?

좋은 객체 지향 설계를 위해 지켜야 할 5가지 원칙을 의미한다.

 

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

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

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

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

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

 

SRP - 단일 책임 원칙

클래스(객체)는 하나의 책임(기능)만을 가져야 하는 것을 의미한다.

하나의 책임이라는 것에 대한 기준은 책임의 크기 혹은 문맥과 상황에 따라 다르기 때문에 모호할 수 있다.

따라서 변경을 기준으로 단일 책임 원칙이 잘 지켜지는지 판단하는 것이 좋다.

코드의 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른다고 볼 수 있다.

이러한 단일 책임 원칙을 지켰을 때 최종적으로 프로그램에 대한 높은 유지보수성을 기대할 수 있다.

 

OCP - 개방 / 폐쇄 원칙

소프트웨어 요소는 확장(기능 추가)에는 열려 있으나 변경(코드 수정)에는 닫혀 있어야 하는 것을 의미한다.

확장에 열려 있다는 것은 새로운 변경 사항이 발생했을 때 코드를 추가함으로써 애플리케이션의 기능을 확장할 수 있다는 것을 의미한다.

변경에 닫혀 있다는 것은 새로운 변경 사항이 발생했을 때 객체를 직접적으로 수정할 수 없다는 것을 의미한다.

 

OCP 원칙은 추상화 사용을 통해 관계를 구축하도록 권장되며 다형성과 확장을 가능케 하는 객체 지향의 장점을 극대화하는 기본적인 설계 원칙이다.

 

하지만 다형성을 사용하여 설계하여도 클라이언트 코드에 대한 수정이 필요할 수 도 있다. 

이때 활용할 수 있는 것은 스프링 컨테이너 등이 있으며 이는 추후에 살펴보기로 한다.

 

LSP - 리스코프 치환 원칙

프로그램의 객체는 프로그램의 정확성을 유지하면서 하위 타입의 인스턴스로 바꿀 수 있어야 함을 의미한다.

즉 자식 타입은 언제든 부모 타입으로 교체할 수 있어야 한다는 것이다.

이는 다형성 원리를 이용하기 위한 전제 조건으로 작용된다.

 

따라서 부모 메서드의 오버라이딩을 할 때 부모 클래스와 동일한 수준의 선행 조건을 기대하고 사용하는 프로그램을 고려하여 예상하지 못한 문제가 일어나지 않도록 주의해야 한다.

 

ISP - 인터페이스 분리 원칙

SRP가 클래스의 단일 책임을 강조한다면 ISP는 인터페이스의 단일 책임 강조로 이해할 수 있다.

즉 인터페이스를 각각의 사용에 맞도록 분리해야 한다는 것이다.

ex)

자동차 인터페이스운전 인터페이스정비 인터페이스분리

사용자 클라이언트운전자 클라이언트정비사 클라이언트분리

이후 정비 인터페이스에 변경이 발생하여도 운전자 클라이언트에는 영향을 주지 않는다.

 

-> 인터페이스의 목적과 용도가 분명해지고 대체 가능성이 높아진다.

 

DIP - 의존 역전 원칙

구체화에 의존하는 것이 아닌 추상화에 의존하는 것을 의미한다.

즉 구현 클래스에 의존하는 것이 아닌 인터페이스나 추상 클래스 등 구현체의 상위 요소를 참조하는 것을 강조하는 것이다.

 

 

ex)

운전자가 K3에 대한 작동법만 알고 있을 때 소나타나 제네시스을 운전할 수 없으다고 가정한다면 K3, 소나타, 제네시스의 상위 요소인 자동차에 대해 의존하여 어느 구현체라도 운전할 수 있는 상황을 만들어야 한다.

 

 

 

 

 

 


김영한의 스프링 핵심원리- 기본편 강의를 보며 정리한 글입니다!

참고

https://inpa.tistory.com/entry/OOP-%F0%9F%92%A0-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%EC%84%A4%EA%B3%84%EC%9D%98-5%EA%B0%80%EC%A7%80-%EC%9B%90%EC%B9%99-SOLID

 

💠 객체 지향 설계의 5가지 원칙 - S.O.L.I.D

객체 지향 설계의 5원칙 S.O.L.I.D 모든 코드에서 LSP를 지키기에는 어려움. 리스코프 치환 원칙에 따르면 자식 클래스의 인스턴스가 부모 클래스의 인스턴스를 대신하더라도 의도에 맞게 작동되어

inpa.tistory.com

 

'Spring' 카테고리의 다른 글

DTO와 Entity의 변환  (0) 2023.11.16
DTO vs VO vs Entity  (0) 2023.11.07
HTTP Method  (1) 2023.11.06
Spring 3계층 속 DI  (0) 2023.11.05
직접 만들고 뜯어본 Controller  (1) 2023.11.03