JAVA

[JAVA] 디자인 패턴 - Singleton, Adapter

P.젤리비 2022. 8. 2.
반응형

생성 패턴

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

 

구조패턴

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

 

행위 패턴

  • 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것으로, 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 제공한다.
  • 행위 패턴은 행위 관련 패턴을 사용하여 독립적으로 일을 처리하고자 할 때 사용한다.
    • Template Method
    • Interpreter
    • Iterator
    • Observer
    • Strategy
    • Visitor
    • Chain of responsibility
    • Command
    • Mediator
    • State
    • Memento

 

Singleton Pattern

  • 어떠한 클래스(객체)가 유일하게 1개만 존재 할 때 사용
  • 서로 자원을 공유 할 때 사용
  • 예로 들면 프린터가 해당되며, 프로그래밍에서는 TCP Socket 통신에서 서버와 연결된 connect 객체에 주로 사용

SocketClient.java

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");
    }
}

AClass.java

public class AClass {
    private SocketClient socketClient;

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

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

DemoApplication.java

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args)
	{
		AClass aClass = new AClass();
		SocketClient aClient = aClass.getSocketClient();
	}
}

 

Adapter Pattern

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

Electrionic110v.java

public interface Electronic110v {
    void powerOn();
}

Electronic220v.java

public interface Electronic220v {
    void connect();
}

HairDryer.java

public class HairDryer implements Electronic110v{
    @Override
    public void powerOn(){
        System.out.println("헤어 드라이기 110v on");
    }
}

Airconditioner.java

public class Airconditioner implements Electronic220v {
    @Override
    public void connect(){
        System.out.println("에어컨 220v on");
    }
}

SocketAdapter.java

public class SocketAdapter implements Electronic110v{
    private Electronic220v electronic220v;

    public SocketAdapter(Electronic220v electronic220v)
    {
        this.electronic220v = electronic220v;
    }

    @Override
    public void powerOn(){
        electronic220v.connect();
    }
}

DemoApplication.java

import com.example.demo.adapter.*;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args)
	{
		HairDryer hairDryer = new HairDryer();
		connect(hairDryer);

		Airconditioner airconditioner = new Airconditioner();
		Electronic110v adapter = new SocketAdapter(airconditioner);
		connect(adapter);
	}

	public static void connect(Electronic110v electronic110v){
		electronic110v.powerOn();
	}
}
반응형

댓글

💲 추천 글