반응형
프로그램에서 인스턴스가 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴
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 |