티스토리 뷰

개요

SOILD는 Robert C. Martin이 정한 객체지향 디자인(OOP)의 5가지 원칙의 약어입니다. 프로젝트가 성정함에 따라 유지 관리 및 확장성을 고려하여 소프트웨어를 개발할 수 있게 도와줍니다.

 

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

O - OCP(개방폐쇄의 원칙 : Open Close Principle)

L - LSP(리스코브 치환의 원칙 : The Liskov Substitution Principle)

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

D - DIP(의존성 역전의 원칙 : Dependency Inversion Principle)

 

하나하나 알아보도록 하겠습니다.

 

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

클래스나 함수 등의 소프트웨어의 구성품은 하나의 책임만을 가져야 합니다. 여기서 책임은 기능을 의미한다고 보면 될것같습니다. 하나의 클래스가 여러가지 기능을 담당할 경우 SRP의 원칙을 따르면 여러 클래스로 분할하여 변화를 유연하게 시도할수 있고 사이드이펙트가 발생할 여지가 줄어드는 장점이 있습니다.

 

O - OCP(개방폐쇄의 원칙 : Open Close Principle)

클래스는 기능확장을 위해서는 열려있어야 하지만(Open) 수정을 위해서는 닫혀 있어야 합니다.(Close) 

수정이 일어난다고 하더라도 기존의 구성요서에는 수정이 일어나지 않아야 하며, 기존코드의 수정 없이 쉽게 확장이 가능해야 함을 말합니다. 

 

L - LSP(리스코브 치환의 원칙 : The Liskov Substitution Principle)

하위객체가 부모객체가 들어갈곳에 치환되어도 문제가 없어야 한다는 법칙입니다. 개인적으로 5가지 원칙중 가장 이해하는데 난해한 원칙으로 예제를 봐도 잘 와닿지가 않았습니다. 서브 클래스는 부모타입이 약속한 모든 규약을 지켜야 합니다. 

 

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

클라이언트는 사용하지 않는 인터페이스를 구현하도록 강요해서는 안되며 클라이언트가 사용하지 않는 메서드에 의존하도록 강요해서는 안된다는 규칙입니다. 예제에서 2차원 도형과 3차원 도형을 도형 interface를 implements 받아 구현했을때 부피를 구하는 메소드가 있다면 2차원 도형에서는 필요하지 않습니다. 이경우 ISP의 원칙을 위반한것입니다.

 

 

D - DIP(의존성 역전의 원칙 : Dependency Inversion Principle)

  1. 상위 객체는 하위의 객체에 의존해서는 안됩니다. 둘 다 추상화에 의존해야 합니다.
  2. 추상화는 세부사항에 의존해서는 안됩니다. 세부사항은 추상화에 따라 달라집니다.

DIP원칙을 위반할경우 OCP를 지키기 어려워집니다. 의존관계를 맺을 때 변화하기 쉬운것, 자주 변화하는것 보다는 거의 변화가 없는것에 의존을 해야합니다. 구체적으로 변화하기 쉬운것은 클래스를 말하며 변하기 어려운건 abstract나 interface를 말합니다.

 

reference

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
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
글 보관함