[Java] Design Pattern 디자인패턴 정리

유희옥·2023년 3월 17일
0

JAVA

목록 보기
3/3
post-thumbnail

1. 싱글톤 패턴 (Singleton Pattern)


어플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다.

-> 전역변수를 사용하지 않고 객체를 하나만 생성하며, 생성한 객체를 어디에서든지 참조할수있도록 하는 패턴


주로 서버와 Socket Connection, DB JDBC Connetion, 스프링의 Bean 등에 사용한다.


장점

  • 고정된 메모리 영역을 얻어 한번의new로 인스턴스를 사용하기 때문에 메모리 낭비 방지
  • 싱글톤으로 만들어진 클래스의 인스턴스는 전역이기때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉬움
  • 인스턴스가 절대적으로 한 개만 존재하는 것을 보증하고 싶을 경우 사용
  • 두번째 이용시 부터는 객체 로딩 시간이 줄어 성능이 좋아진다.

단점

  • 싱글톤 인스턴스가 너무 많은 일을 하거나 데이터를 공유 시킬 경우에 다른 클래스의 인스턴스들 간에 결합도가 높아져 "개방-폐쇠원칙"을 위배하게 된다.
  • 멀티 쓰레드 환경에서 동기화 처리를 안하면 인스턴스가 2개 생성될 수 있는 가능성이 생기게 된다.


예제

세븐틴 (Seventeen) 이라는 객체가 있다.

	public class Seventeen{}

이 클래스를 Carat에서 한 번만 호출될 수 있도록 생성자를 외부에서 호출 할 수 없게 Seventeen 클래스의 생성자를 private로 선언한다.

	public class Seventeen{
	
		private Seventeen(){}
        public void performance(){
       
        }
    }

생성자가 private면 객체를 생성 할 수 없으므로, 외부에 제공할 자기자신의 인스턴스를 생성한다.

자기자신을 선언해서 메모리에 올려놓는다(static)

	public class Seventeen{

		private static Seventeen svt = new Seventeen();

		private Seventeen(){}
        public void performance(){
       
        }
    }

* static 메서드

: 클래스의 인스턴스를 사용하지 않고서 메서드를 실행할수 있고, 변수를 참조할 수 있다.


선언된 인스턴스 외부에 제공하는 메서드 추가

	public class Seventeen{

		private static Seventeen svt = new Seventeen();

		private Seventeen(){}
       
        public static Seventeen getInstance(){
        	return svt;
        }
        //퍼포먼스
        public void performance(){
       
        }
    }

  • getInstance 메서드 외에는 Seventeen 객체를 생성 및 사용할 수 없다
  • private static Seventeen svt= new Seventeen(); 을 통해 최초 한번만 객체 생성
  • 생성 이후에 해당 객체를 getInstance를 활용해 return 값으로 받아서 사용한다.


2. 퍼사드 패턴 (facade Pattern)


여러개의 객체와 사용하는 서브 객체사이에 복잡한 의존관계가 있을때, 서브 객체를 중간에 facade 인터페이스로 감싸서 사용하기 쉽게 만든것이다.

-> 서로다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나, 객체를 묶어서 새로운 기능을 제공 할 수 있다.

profile
기록자

0개의 댓글