2022/02/27 디자인패턴

김석진·2022년 2월 27일
0

스프링입문

목록 보기
1/5

디자인패턴이란?

디자인패턴

자주 사용하는 설계 패턴을 정형화 해서 이를 유형별로 가장 최적의 방법으로 개발 할 수 있도록 정해둔 설계
명확하게 정답이 있는 형태는 아니며, 프로젝트의 상황에 맞추어 적용이 가능하다

Gof 디자인 패턴

소프트웨어를 설계 할 때는 기존에 경험이 매우중요, but 모든 사람들이 다양한 경험을 가지고 있을 수는 없다
이러한 지식을 공유하기 위해서 나온것이 GOF(Gang of Four)의 디자인 패턴이다. 객체지향 개념에 따른 설계 중 재사용할 경유 유용한 설계를 디자인 패턴으로 정리 해둔것

Gof의 디자인패턴은 총 23개이며, 스프링에서 가장많이 사용한것들을 잘 이해하고 활용한다면, 경험이 부족하더라도 좋은 소프트웨어 설계가 가능하다

디자인 패턴의 장점

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

디자인 패턴의 단점

  • 객체지향 설계/구현
  • 초기 투자 비용 부담

생성 패턴

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

패턴종류

  • Factory Method
  • Singleton
  • Prototype
  • Builder
  • Abstract Factory
  • Chaining

구조패턴

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

패턴종류

  • Adapter
  • Composite
  • Brdige
  • Decorator
  • Facade
  • Flyweight
  • Proxy

행위 패턴

반복적으로 사용되는 객체들의 상호작용을 패턴화한것으로 ,클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 제공한다. 행위 패턴은 행위 관련 패턴을 사용하여 독립적으로 일을 처리하고 할 때 사용

패턴종류

  • Template Method
  • Interpreter
  • Iterator
  • Observer
  • Strategy (디자인 패턴의 꽃?)
  • Visitor
  • Chain of responsibility
  • Command
  • Mediaator
  • State
  • Memento

싱글톤 패턴

Singleton Pattern

Singleton 패턴은 어떠한 클래스(객체)가 유일하게 1개만 존재 할 때 사용한다
이를 주로 사용하는 곳은 서로 자원을 공유 할 때 사용하는데, 실물 세계에서는 프린터가 해당되며, 실제 프로그래밍에서는 TCP Socket 통신에서 서버와 연결된 connect 객체에 주로 사용한다

싱글톤은 기본생성자를 private로 막는다
static 메서드를 통해서 getInstance메서드를 제공해야함
자신의 객체가 null인경우 신규로 생성해주고 아닌경우 자신을 return

예제

public class SocketClient {
    private static SocketClient socketClient = null;

    private SocketClient() {

    }

    public static SocketClient getInstance() {

        if (socketClient == null) {
            socketClient = new SocketClient();
        }
        return socketClient;
    }

    public void connect(){
        System.out.println("connect");
    }

}
public class AClazz {

    private SocketClient socketClient;

    public AClazz(){
        this.socketClient=SocketClient.getInstance();
    }

    public SocketClient getSocketClient() {
        return this.socketClient;
    }
}
public class BClazz {

    private SocketClient socketClient;

    public BClazz(){
        this.socketClient=SocketClient.getInstance();
    }

    public SocketClient getSocketClient() {
        return this.socketClient;
    }
}
       AClazz aClazz = new AClazz();
        BClazz bClazz = new BClazz();

        SocketClient aClient= aClazz.getSocketClient();
        SocketClient bClient= bClazz.getSocketClient();

        System.out.println("두개의 객체가 동일한가?");
        System.out.println(aClient.equals(bClient));

실행결과

어댑터 패턴

어댑터 패턴(Adapter Pattern)

Adapter는 실생활에서는 100v를 220v로 변경해주거나, 그 반대로 해주는 흔히 돼지코 라고 불리는 변환기를 예를 들 수 있다.
호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용 할 수 있도록 한다
SOLID중 개방폐쇄 원칙(OCP)를 따른다

프록시 패턴

프록시 패턴(Proxy Pattern)

Proxy는 대리인 이라는 뜻으로써 ,뭔가를 대신해서 처리하는것
Proxy Class 를 통해서 대신 전달 하는 형태로 설계되며, 실제 Client는 Proxy로 부터 결과를 받는다
Cache의 기능으로도 활용이 가능하다
SOLID중 개방폐쇄원칙(OCP)과 의존역전원칙(DIP)를 따른다

데코레이터 패턴

데코레이터 패턴(Decorator Pattern)

데코레이터 패턴은 기존 뼈대(클래스)는 유지하되, 이후 필요한 형태로 꾸밀 때 사용한다. 확장이 필요한 경우 상속의 대안으로도 활용 한다. SOLID 중에서 개방폐쇄 원칙(OCP)와 의존 역전 원칙(DIP)를 따른다

옵저버 패턴

옵저버 패턴(Observer pattern)

관찰자 패턴은 변화가 일어 났을때, 미리 등록된 다른 클래스에 통보해주는 패턴을 구현한 것이다. 많이 보이는 곳은 event listener에서 해당 패턴을 사용하고 있다

파사드 패턴

파사드 패턴(Facade pattern)

여러 개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존관계가 있을 때, 중간에 facade라는 객체를 두고, 여기서 제공하는 interface만을 활용하여 기능을 사용하는 방식이다. Facade는 자신이 가지고 있는 각 클래스의 기능을 명확히 알아야 한다

전략 패턴

Stategy Pattern

전략 패턴으로 불리며 객체지향의 꽃이다.
유사한 행위들을 캡슐화 하여, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경 하여, 유연하게 확장하는 패턴 SOLID중 개방폐쇄 원칙(OCP)과 의존 역전원칙(DIP)를 따른다

전략 메서드를 가진 전략객체(Normal Strategy, Base64 Strategy)
전략 객체를 사용하는 컨텍스트(Encoder)
전략객체를 생성해 컨텍스트에 주입하는 클라이언트
전략에 따라 결과가 달라짐

profile
주니어 개발자 되고싶어요

0개의 댓글