[JAVA] 객체지향 설계 원칙 (SOLID)

Carrot.___.·2023년 5월 5일
0


위키백과에서 SOLID의 정의는 위와 같다. 위 말의 핵심은 SOLID원칙을 적용하면, 읽기 쉽고, 확장이 쉬워진다고 한다. 그렇다면 SOLID란 무엇일까?

SOLID 정의

  • Single responsibility principle (단일 책임 원칙) : 한 클래스는 하나의 책임만 가져야 한다.
  • Open/closed principle (개방-폐쇄 원칙) : 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
  • Liskov substitution principle (리스코프 치환 원칙) : 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  • Interface segregation principle (인터페이스 분리 원칙) : 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
  • Dependency inversion principle (의존관계 역전 원칙) : 추상화에 의존해야지, 구체화에 의존하면 안된다.

Single responsibility principle (단일 책임 원칙)

  • "어떤 클래스나 모듈은 변경하려는 단 하나 이유만을 가져야 한다"
    • 예를 들어, 형식이 있는 문서를 편집하는 작업이 있다고 가정하자.
      해당 문서는 다음과 같은 이유로 변경이 될 수 있다
      1. 문서의 내용
      2. 문서의 형식
    • 따라서, 단일 책임 원칙에 의해 변경이 되는 부분을 분리된 클래스나 모듈로 나누어야 한다. 이렇게 되면, 각각의 클래스에서는 자신이 맡고 있는 책임만 변경하면 되고, 외부에서는 어떻게 동작하는지 몰라도 되어 유연한 설계가 가능해진다!

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

  • 기존의 코드를 변경하지 않으면서, 새로운 기능을 추가할 수 있도록 설계가 되는 원칙을 의미한다. 이는 추상화와 다형성을 이용할 수 있다.
    • 다음과 같은 다이어그램의 구조를 보자.

      예를 들어, 가격을 계산을 하는 서비스가 필요하다고 할 때, 위와 같이 인터페이스의 추상화를 이용하여, Google, Naver의 계산 서비스를 적용할 수 있고, 만약 다른 제3자의 계산 서비스가 필요하다면,CalculateService를 구현하기만 하면 된다. 이는 기존의 코드를 변경하지 않으면서, 새로운 기능을 추가할 수 있게된다!

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

  • 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다는 것을 의미한다.
    이는 단순히 컴파일에 성공하는 것이 목적이 아니라, 해당 기능의 목적에 맞는 기능으로 설계해야하는 것을 의미한다.

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

  • 인터페이스를 잘게 분리함으로써, 클라이언트의 목적과 용도에 적합한 인터페이스 만을 제공하는 것을 말한다.
  • 컴퓨터에는 마우스, 키보드, 모니터 등이 있다. 위와 같이 각각의 역할을 담당하는 인터페이스를 만들어 제공하면, 마우스 인터페이스가 변해도 다른 인터페이스에는 영향을 주지 않게 된다. 이를 통해 더 명확하고, 대체가 쉬워진다.

DIP 의존관계 역전 원칙

  • 이는 역할에 의존해야지, 구체적인 구현체에 의존하면 안된다는 의미이다.
    따라서, 클래스에서 인터페이스에 의존해야 유연하게 변경이 대처가 가능하다. 구현체에 의존하게 되면, 변경이 어려워진다!

0개의 댓글

관련 채용 정보