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

woonie·2022년 2월 5일
0

TIL

목록 보기
23/64
post-thumbnail
post-custom-banner

1. 객체지향 설계 5원칙(SOLID)

좋은 소프트웨어 설계를 위해서는 결합도는 낮추고 응집도는 높여야 한다.

  • 결합도 : 클래스간의 상호 의존 정도를 나타내는 지표로써 결합도가 낮으면 클래스간의 상호 의존성이 줄어들어서 객체의 재사용 및 유지보수가 유리하다.

    B라는 클래스가 A의 클래스에 의존을 하고 있고, C라는 클래스는 B클래스에 의존하고 있다.
    그런데 A라는 클래스에서 수정이 되면 B,C에도 모두 영향이 가기때문에 B,C도 모두 수정해줘야 한다.
    꼬리에 꼬리를 물어 유지보수에 어려움이 있다.

  • 응집도 : 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성으로 응집도가 높은 클래스는 하나의 책임에 집중하고 독립성이 높아져 재사용 및 유지보수가 용이하다.

1-1. 단일 책임 원칙

  • 어떠한 클래스를 변경해야 하는 이유는 단 한가지 이유여야 한다.

1-2. OCP(Open Closed Principle) 개방 폐쇄 원칙

  • 자신의 확장에는 열려있고,주변의 변화에 대해서는 닫혀 있어야한다.
  • 상위 클래스 또는 인터페이스를 중간에 둠으로써 자신은 변화에 대해서는 폐쇄적이지만 인터페이스 외부의 변화에 대해서 확장을 개방해 줄 수 있다.

1-3. LSP(Liskov Substitution Principle) 리스코프 치환 원칙

  • 서브 타입은 언제나 자신의 기반(상위) 타입으로 교체 할 수 있어야한다.

1-4. ISP(Interface Segregation Principle) 인터페이스 분리 원칙

  • 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다.
    프로젝트 요구 사항과 설계에 따라서 SRP(단일책임원칙) / ISP(인터페이스분리원칙) 를 선택 한다.

1-5. DIP(Dependency Inversion principle) 의존 역전 원칙

  • 자신보다 변하기 쉬운 것에 의존하지 말아야한다.

2. POJO JAVA

POJO(Plain Old Java Object)

  • 순수환 자바 오브젝트를 뜻한다.
  • POJO의 특징
    • 특정 규약에 종속 되지 않는다.
      (특정 Library, Module에서 정의된 클래스를 상속 받아서 구현하지 않아도 된다.POJO가 되기 위해서는 외부의 의존성을 두지 않고, 순수한 JAVA로 구성이 가능해야 한다.)
  • 특정 환경에 종속되지 않는다.

3. 디자인패턴

  • 자주 사용하는 설계 패턴을 정형화 하여 이를 유형별로 가장 최적의 방법으로 개발을 할 수 있도록 정해둔 설계

디자인 패턴의 장점

  • 개발자(설계자)간의 원활한 소통
  • 소프트웨어 구조 파악 용이
  • 재사용을 통한 개발 시간 단축
  • 설계 변경 요청에 대한 유연한 대처

디자인 패턴의 단점

  • 객체지향 설계 / 구현 (객체지향을 명확하게 이해하지 못하면 어려움이 있다.)
  • 초기 투자 비용 부담

여러가지 디자인 패턴이 있지만 현재 모든 디자인 패턴을 공부하기에 시간적 여유가 없어 몇가지만 해보려고 한다.

3-1. 생성 패턴

  • 객체를 생성하는 것과 관련된 패턴으로, 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화 하고 코드의 유연성을 높여준다.
  1. Singleton 패턴

3-2. 구조 패턴

  • 프로그램내의 자료구조나 인터페이스 구조 등 프로그램 구조를 설계하는데 활용 될 수 있는 패턴
    클래스, 객체들의 구성을 통해서 더 큰 구조를 만들 수 있게 해준다.
    많은 클래스들이 서로 의존성을 가지게 되는데 이런 복잡한 구조를 개발하기 쉽게 만들어주고, 유지보수 하기 쉽게 만들어준다.
  1. Adapter 패턴
  2. Decorator 패턴
  3. Facade패턴
  4. Proxy패턴

3-3. 행위 패턴

  • 반복적으로 사용되는 객체들의 상호작용을 파턴화한 것으로 클래스나 캑체들이 상호작용하는 방법과 책임을 분산하는 방법을 제공한다.
  1. Observer 패턴
  2. Stategy 패턴
profile
동료들과 함께하는 개발의 중요성에 관심이 많습니다. 언제나 호기심을 갖고 꾸준히 노력하는 개발자로서 성장하고 있습니다.
post-custom-banner

0개의 댓글