👩🏻💻 Programming/Java
Static과 싱글톤 패턴 (Singleton Pattern)
한국의 메타몽
2021. 6. 9. 15:21
싱글톤 패턴이란?
- 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴
(ex : 서울-도쿄시 타임존, 회사.. 등등 단 1개만 존재할 수 있는 경우) - 주로 서로 자원을 공유할 때 사용되는데, TCP Socket 통신에서 서버와 연결된 connect 객체에 주로 사용
- Static 변수와 getInstance()를 구현하여 싱글톤 패턴 제작 가능
디자인 패턴이란?
자주 사용하는 설계 패턴을 정형화해서 이를 유형별로 분리한 설계
GOF(Gang of four)의 디자인 패턴에서 소개되었으며,
생성 / 구조 / 행위 3가지 항목으로 나누어진 총 23개의 디자인 패턴이 존재한다.
싱글톤 패턴으로 객체 구현하기
- 객체는 private static으로 선언해서 오로지 한 번만 생성하도록 구현 (private static Company instance = new Company())
- 생성자는 private로 선언 (private Compnay())
- 객체를 생성해서 결과를 테스트
- 결론적으로 어떤 클래스에서 사용하더라도 getInstance()을 했을 때 동일한 객체를 얻는다.
싱글톤 패턴의 또다른 예제
Car, CarFactory. 2개의 클래스를 활용하여 아래와 같이 구현한다.
CarFactory는 유일한 객체이고, 이 공장에서 생산되는 자동차는 제작될때마다 고유한 번호가 부여된다.
자동차번호는 10000부터 시작되어 자동차가 생산될때마다 +1씩 번호가 더해진다.
이렇게 번호가 부여되도록 CarFactory 클래스, Car 클래스, CarFactoryTest.java 클래스를 구현하라.
[ Car.java ]
package ch19;
public class Car {
private static int serialNumber = 10000;
private int carNumber;
public Car(){
serialNumber++;
carNumber = serialNumber;
}
public int getCarNum(){
return carNumber;
}
}
[ CarFactory.java ]
package ch19;
public class CarFactory {
private static CarFactory carFactory = new CarFactory();
private CarFactory(){};
public static CarFactory getInstance(){
if(carFactory==null) carFactory = new CarFactory();
return carFactory;
}
public Car createCar(){
Car car = new Car();
return car;
}
}
[ CarFatoryTest.java ]
package ch19;
public class CarFactoryTest {
public static void main(String[] args){
CarFactory factory = CarFactory.getInstance();
Car mySonata = factory.createCar();
Car yourSonata = factory.createCar();
System.out.println(mySonata.getCarNum());
System.out.println(mySonata.getCarNum());
System.out.println(yourSonata.getCarNum());
}
}
[ Result ]
10001
10001
10002