심심한잉여의 잡동사니

[Spring]좋은 객체 지향의 설계 5가지 SOLID 본문

코딩일기/Spring&SpringBoot

[Spring]좋은 객체 지향의 설계 5가지 SOLID

심심한잉여 2022. 3. 10. 15:24
반응형

면접 대비 CS공부 중 좋은 객체지향의 설계 5가지를 알게 되었다.
이를 프로젝트를 진행하기 전에 알았더라면 더 좋았을텐데... 좀 아쉬운 부분이였다.
다음에는 이를 숙지하여 보다 좋은 객체지향프로젝트를 만들고자 한다.
객체 지향이란 무엇인지 이를 극대화 하는 방법으로 이렇게 하는게 좋다 라는걸 깨닫게 되었다.

 

좋은 객체 지향의 설계 5가지

S, O, L, I, D 솔리드

S : SRP 단일 책임의 원칙 (Single responsibility principle)

-  하나의 클래스는 하나의 책임(기능)만 가져야한다.

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

예를 들어 하나의 코드를 변경하는데 SQL 코드부터 시작해서 애플리케이션 전체를 바꾸면 잘 따르지 못한 것

 

O : OCP 개방- 폐쇄 원칙(Open/closed principle)

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

즉, 기능을 확장할 때 기존의 코드를 수정할 필요 없이 확장이 가능해야 한다.
(코드를 변경하지 않고도 기능 확장이 가능하다)

확장을 위해 기존의 코드가 수정이 필요하다면 이를 위반하게 된 것이다.

 

 L : LSP 리스코프 치환 원칙(Liskov substitution principle)

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

 A라는 부모객체를 B라는 자식객체로도 사용이 가능해야한다.

A라는 자동차객체를 만들었는데  이를 물려받은 B라는 전기차객체가 만일 뒤로 운전되도록 되어있다면 A라는 자동차 객체는 앞으로 가지않고 뒤로 가질테니 이를 위반하게 된 것이다.

 

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

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

 

D : DIP 의존 관계 역전 원칙

-      프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다.

하위 개념을 사용하지말고 추상된 상위 개념에 의존하여 객체를 생성하는 것이 좋다.

즉, 로미오와 줄리엣이라는 프로그램에서 로미오라는 객체가 있는데 로미오에 원빈이 들어가든 강동원이 들어가든 상관이 없어야 한다 하물며 둘 다 연극에 못나온다해도 무명 배우가 나와도 문제가 없게끔 해주는 것이 의존성을 느슨하게 한 것이기 때문에 DIP에 잘 부합된다고 볼 수 있다.

 

반응형