본문 바로가기

카테고리 없음

[SOLID] 객체지향설계

안녕하세요

 

남갯입니다

 

기존에 SOLID 원칙에 대해서 알고있었고 이전에 정리해둔 포스팅도 있지만

이번 오브젝트 책을 다시 읽고 정리하는 과제를 진행하게 되서 정리해보려고 합니다.

 

이전글

namget.tistory.com/entry/SOLID-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%84%A4%EA%B3%84

 

[SOLID] 객체지향설계

안녕하세요 남갯입니다. 오늘은 객체지향설계 원칙인 SOLID에 대해서 포스팅해보려고합니다. 이번스터디에서 공부했던 내용을 정리해보고 스터디의 과제인 SOLID를 소개하는 유튜브를 보고 SOLID

namget.tistory.com

 

실제 위키백과에서는

 

로버트 마틴이 2000년대 초반 명명한 객체지향 프로그래밍 및 설계의 다섯가지 기본원칙을 마이클 페더스가 두문자어 기억술로 소개한것이라고 소개되어 있습니다.

 

 

 

SOLID

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

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

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

I : 인터페이스 분리 원칙(Interface segregation principle)

D: 의존관계 역전의 원칙(Dependeny inversion principle)



단일책임의 원칙

오브젝트 책에서는 역할 책임 협력 이 셋의 중요성을 강조하고 있습니다.

SRP에서 말하는 단일책임이란 하나의 책임을 가져야한다고 합니다.  

책임이란 Movie에서의 가격을 계산하는 책임 과 같이 하나의 책임을 가져야한다고 합니다. 

역할이 많아질수록 다른 클래스와 불필요한 협력이거나 인터페이스가 아닌 메서드 호출을 하게되는데

이는 결합도가 높아지도 응집도가 낮아져 유지보수가 어려운 코드가 될것이라 생각합니다.

 

 

개방 폐쇄원칙

기존코드를 수정하지 말고 추가하거나 수정할 수 있도록 설계해야한다고 합니다. 

즉 확장에는 열려있고 수정에는 닫혀있다라는 의미인데,

자바에서의 인터페이스를 통해 비슷한 책임을 가진것들에 대한 역할을 만든다면

기존 코드를 수정하지 않고 확장하거나 기존 코드를 수정하지 않아도 되게 만들수 있습니다.

 

 

리스코프 치환의 원칙

가장 많이 헷갈려하는 내용이기는 한데 리스코프란 사람이 설계 제안한 원칙이라고 합니다.

이 법칙을 설명할때 가장 많이 나오는 내용중 하나는 정사각형과 직사각형을 예를 드는데

정사각형을 상속받아 직사각형을 받았다고 치면, 정사각형은 x축과 y축의 값이 동일한 값으로 설정되게 되는데

직사각형은 x와 y값이 달라서 넓이를 구하게 되었을때 정사각형을 대체하게 되면 원하지 않은 값이 나오게 된다.

 

인터페이스 분리의 원칙

성격이 같은 인터페이스끼리 묶으라는 내용이다. 즉 역할에 맞는 인터페이스끼리 묶어두라는 내용이다.

 

의존성 역전의 원칙

실제 특정 클래스에 구체화된 클래스를 넘기게 되면 의존관계가 생기게된다. 사용하는 클래스쪽에서 의존이 생겨버리므로 구현체가 아닌 추상체를 통해 의존성을 역전시켜야 한다는 내용입니다.