본문 바로가기
언어/JAVA

싱글톤 패턴

by step 1 2021. 4. 16.
반응형

프로그램에서 인스턴스가 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴

static 변수, 메서드를 활용하여 구현 할 수 있음

 

싱글톤 패턴으로 회사 객체 구현하기

생성자는 private로 선언

private Company() {}

클래스 내부에 유일한 private 인스턴스 생성

private static Company instance = new Company();

외부에서 유일한 인스턴스를 참조할 수 있는 public 메서드 제공

 

package ch17;

public class Company {

	private static Company instance = new Company();
	
	private Company() {
		
	}
	
	public static Company getInstance() {
		if ( instance == null) {
			instance = new Company();
		}
		return instance;
	}
}
package ch17;

public class CompanyTest {

	public static void main(String[] args) {
		
		Company company1 = Company.getInstance();
		Company company2 = Company.getInstance();
		
		System.out.println(company1);
		System.out.println(company2);
	}
}

결과

 

싱글톤 패턴은 어떠한 클래스(객체)가 유일하게 1개만 존재 할 때 사용한다.

이를 주로 사용하는 곳은 서로 자원을 공유 할 때 사용하는데, 실물 세계에서는 프린터가 해당되며, 실제 프로그래밍에서는 TCP Socket 통신에서 서버와 연결된 connect 객체에 주로 사용한다.

package com.company.design.singleton;

public class SocketClient {

    private static SocketClient socketClient = null;

//    기본 생성자 생성 public, private
    private SocketClient() {

    }

    public static SocketClient getInstance(){

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

    public void connect(){
        System.out.println("connect");
    }
}
package com.company.design.singleton;

public class Aclazz {

    private SocketClient socketClient;

    public Aclazz(){
        this.socketClient = SocketClient.getInstance();
//        this.socketClient = new SocketClient();
    }

    public SocketClient getSocketClient() {
        return this.socketClient;
    }
}
package com.company.design.singleton;

public class Bclazz {

    private SocketClient socketClient;

//    SocketClient 초기화
    public Bclazz(){
        this.socketClient = SocketClient.getInstance();
//        this.socketClient = new SocketClient();
    }

    public SocketClient getSocketClient() {
        return this.socketClient;
    }
}
package com.company.design;

import com.company.design.adapter.*;
import com.company.design.singleton.Aclazz;
import com.company.design.singleton.Bclazz;
import com.company.design.singleton.SocketClient;

public class Main {


    public static void main(String[] args) {

        //    싱글톤 패턴 예제
        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));

    }

}

 

반응형

'언어 > JAVA' 카테고리의 다른 글

객체 배열  (0) 2021.04.16
배열(array)  (0) 2021.04.16
static 메서드  (0) 2021.04.16
static 변수  (0) 2021.04.16
객체 간의 협력 (collabration)  (0) 2021.04.14