객체지향 설계 5가지 설계 원칙

·2023년 11월 22일
0
post-thumbnail

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

SOLID 원칙이란 객체지향 설계에서 지켜줘야 할 5개의 소프트웨어 개발원칙을 말한다.

  • SRP (Single Responsibility Principle) : 단일 책임 원칙
  • OCP (Open Closed Priciple) : 개방 폐쇄 원칙
  • LSP (Listov Substitution Principle) : 리스코프 치환 원칙
  • ISP (Interface Segregation Principle) : 인터페이스 분리 원칙
  • DIP (Dependency Inversion Principle) : 의존 역전 원칙

좋은설계란 시스템에 새로운 요구사항이나 변경사항이 있을 때, 영향을 받는 범위가 적은 구조를 말한다. 그래서 시스템에 예상하지 못한 변경사항이 발생하더라도, 유연하게 대처하고 이후에 확장성이 있는 시스템 구조를 만들 수 있다.
즉, SOLID 객체 지향 원칙을 적용하면 코드를 확장하고 유지 보수 관리하기가 더 쉬워지며, 불필요한 복잡성을 제거해 리팩토링에 소요되는 시간을 줄임으로써 프로젝트 개발의 생산성을 높일 수 있다.

SRP - 단일 책임 원칙

  • 단일 책임 원칙은 "클래스는 단 하나의 책임만 가져야 한다"는 원칙이다.
  • "책임"이라는 의미는 하나의 "기능 당담"으로 보면된다. 즉, 하나의 클래스는 하나의 기능 당담하여 하나의 책임을 수행하는데 집중되도록 클래스를 따로따로 여러개 설계하는 원칙이다.
  • SRP 원칙을 따름으로써 한 책임의 변경으로부터 다른 책임의 변경으로의 연쇄작용을 극복할 수 있는 큰 장점이 생긴다.
  • 최종적으로 프로그램의 유지보수 성을 높이기 위한 설계 기법이다.

OCP - 개방 폐쇄 원칙

  • OCP 원칙은 클래스는 "확장에 열려있어야하며, 수정에는 닫혀있어야한다" 를 뜻한다.
  • 기능 추가 요청이 오면 클래스를 확장하여 손쉽게 구현하면서, 확장에 따른 클래스 수정은 최소화 하도록 프로그램을 작성해야 하는 설계 기법이다.
  • OCP 원칙은 추상화 사용을 통한 관계 구축을 권장을 의미하는 것이다.
  • 다형성과 확장을 가능케 하는 객체지향의 장점을 극대화하는 기본적인 설계 원칙이다.

LSP - 리스코프 치환 원칙

  • LSP 원칙은 서브 타입은 언제나 기반(부모) 타입으로 교체할 수 있어야 한다는 원칙이다.
    쉽게 말하면 LSP는 다형성 원리를 이용하기 위한 원칙 개념으로 보면 된다.

  • 다형성 특징을 이용하기 위해 상위 클래스 타입으로 객체를 선언하여 하위 클래스의 인스턴스를 받으면, 업캐스팅된 상태에서 부모의 메서드를 사용하더라도 동작이 의도대로 흘러가야 하는 것을 의미하는 것이다.

    자바에선 대표적으로 Collection 인터페이스를 LSP의 예로 들수있다.
    Collection 타입의 객체에서 자료형을 LinkedList에서 전혀 다른 자료형 HashSet으로 바꿔도 add() 메서드를 실행하는데 있어 원래 의도대로 작동되기 때문이다.
    한마디로 다형성 이용을 위해 부모 타입으로 메서드를 실행해도 의도대로 실행되도록 구성을 해줘야 하는 원칙이다

ISP - 인터페이스 분리 원칙

  • ISP 원칙은 인터페이스를 각각 사용에 맞게 끔 잘게 분리해야한다는 원칙이다.
  • SRP 원칙이 클래스의 단일 책임을 강조한다면, ISP는 인터페이스의 단일 책임을 강조하는 것으로 보면 된다.
  • ISP 원칙은 인터페이스를 사용하는 클라이언트를 기준으로 분리함으로써, 클라이언트의 목적과 용도에 적합한 인터페이스 만을 제공하는 것이 목표이다.
  • ISP 원칙의 주의해야 할점은 한번 인터페이스를 분리하여 구성해놓고 나중에 무언가 수정 사항이 생겨서 또 인터페이스들을 분리하는 행위를 가하지 말아야 한다.

    인터페이스는 제약 없이 자유롭게 다중 상속(구현)이 가능하기 때문에, 분리할 수 있으면 분리하여 각 클래스 용도에 맞게 implements 하라는 설계 원칙이라고 이해하면 된다.

DIP - 의존 역전 원칙

  • DIP 원칙은 어떤 Class를 참조해서 사용해야하는 상황이 생긴다면, 그 Class를 직접 참조하는 것이 아니라 그 대상의 상위 요소(추상 클래스 or 인터페이스)로 참조 하라는 원칙
  • 구현 클래스에 의존하지 말고, 인터페이스에 의존하는 것이다.
  • 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는, 변화하기 어려운 것 거의 변화가 없는 것에 의존하라는 것이다.

    의존 역전 원칙의 지향점은 각 클래스간의 결합도를 낮추는 것이다.

S.O.L.I.D의 용어의 개념 이론들은 모두 우리가 자바의 클래스 객체 지향를 배울때 익혔던 추상화, 상속, 인터페이스, 다형성 ..등 개념들을 재정립한 것으로 보면 된다.그리고 이 5가지 원칙들은 서로 독립된 개별적인 개념이 아니라 서로 개념적으로 연관 되어 있다. 원칙 끼리 서로가 서로를 이용하기도 하고 포함하기도 한다.

0개의 댓글