Java로 배우는 디자인 패턴

Jobmania·2023년 4월 6일
0

디자인 패턴

목록 보기
1/2
post-thumbnail

디자인 패턴에 대해서 좋은 사이트

디자인 패턴이란?

GoF(Gang Of Four) 네 명의 학자가 기존의 많은 사례와 시스템등을 분석하여 좋은 설계의 예시들을 총 23개 패턴을 제안!
🤞 기존의 여러시스템과 서비스를 기반으로 객체지향 프로그래밍에서 보다 유연하고, 확장성 있는 설계가 가능한 예시를 제시

예시)건축, 기계 설계와 비슷한 느낌?

다양한 시스템을 개발하지만 기존의 문제와 비슷한 문제를 겪는 점이 많다

객체지향 프로그래밍

캡상추다!

  • 추상화,
  • 캡슐화(데이터와 알고리즘을 하나로 묶으며 외부 접근통제),
  • 상속,
  • 다형성(하나의 코드가 여러 자료형으로 구현되어 실행되는 것을 뜻하며 이는 같은 코드에서 여러 실행 결과가 나올 수 있는 것)

객체 지향 디자인 원칙(Object Oriented Design Principle)

  1. 애플리케이션이 달라지는 부분을 찾고, 달라지지 않는 부분을 찾는다.
    달라는 부분과 달라지지 않는 부분을 분리한다. -> 새로운 요구사항이 있을 때 마다 달라지지는 부분은 분리해보자!!
  2. 구현보다는 인터페이스 맞춰서 프로그래밍한다!
  3. 상속보다는 합성을 사용하자 (Favor object composition over class inhertance)
  • 상속은 코드의 재사용성이 아니다, 일반적인 클래스에서 구체적인 클래스를 정의하고 싶을때 상속을 받는 것이다. 상속을 하면 클래스간의 종속성이 강해짐. 보다 유연한 코드의 재사용을 위해선 합성을 추천. / 유연하다는 것은 서로 독립적
  1. Abstract class(추상 클래스) vs. Concrete class(구체 클래스)
  2. Class Inheritance(상속) vs. Object composition(포함,합성)
  • 그렇다면 상속 관계를 맺을지, 포함 관계를 맺을지는 어떻게 결정하면 좋을까?

    Circle is a Point.
    Circle has a Point

원이 점이라기보다는.. 원은 점을 포함하고 있기 때문에 포함관계를 설정하는게 맞다.
6. Interface Inheritance vs. Implementation Inheritance

Implementation inheritance is a relationship where a child class inherits behaviour implementation from a base class.
Interface inheritance is when a child class only inherits the description of behaviour from the base class and provides the implementation itself.-
출처

  • 인터페이스기반 구현한 클래스들은 유연하게 가능함

SOLID 원칙

  1. 단일 책임의 원칙(Single Responsibility Principle)
  • 하나의 클래스는 하나의 기능만을 구현하도록 하자!!, 하나의 클래스가 너무 많은 기능을 포함하지 않도록 하며 여러 기능이 포함되면 유지보수의 어려움 증가!
  1. 개방 폐쇄의 원칙 (Open-Closed Principle)
  • 객체 자신의 수정에 대해서는 유연하고, 다른 클래스가 수정될 때는 영향을 받지 않는다. 구체적 클래스면 여러군데를 손봐야 됨! 인터페이스나 추상 클래스를 통해 접근하도록 구현하자!!
  1. 리스코프 치환 원칙(Liskov Substitution Principle)
  • 하위 클래스는 항상 상위 클래스로 교체 될 수 있어야 한다. 일관성
  • 상위 클래스에서 제공되는 여러 기능들은 하위 클래스가 모두 사용가능 해야한다!
  • IS-A 관계 (IS A KIND OF)
  1. 의존 역전 원칙(Dependency inversion Principle)
  • 의존 관계는 구체적인것 보단 추상적인 것에 의존한다!

    구체적인 것은 이미 구현이 되어있고, 변하기 쉬운것
    추상적인 것은 인터페이스, 추상클래스(상위클래스)

  1. 인터페이스 분리 원칙(Interface Segregation Principle)
  • 제공 하는 기능에 대해서는 인터페이스에만 종속적이어야 함!

  • 만약 하나의 객체가 여러기능을 제공해야 한다면! (단일 책임원칙에 위배) 여러 기능을 인터페이스로 분리하고, 해당 클래스를 생성하는 방식.

    디자인 패턴은 규칙이 아니다!

    결국 좋은 설계에 대한 제안이다!(언어에 종속 X, 특정 영역에 종속 X)

  • 객체 지향을 위한 디자인패턴은 소프트웨어의 중요한 요소(resuse, flexibility, extensibility, modularity)를 향상시킴!!

  • 좋은 설계는 디자인 패턴을 공부함으로써 이미 증명된 스킬과 경험을 배울 수 있음.

  • 높은 결합도를 가지거나 알고리즘 종속성, 객체의 표현이나 구현에 종속적으로 구현된 소프트웨어의 리팩토링을 가능하게 함.

    좋은 설계를 유도하여 소프트웨어의 유지보수에 들어가는 비용을 절약할 수 있음!

profile
HelloWorld에서 RealWorld로

0개의 댓글