[Design Pattern] Singleton(싱글톤)
Singleton 디자인 패턴
Singleton(싱글톤)이란 인스턴스
가 단 1개만 생성되어야 하는 패턴이다.
Java를 사용하여 싱글톤을 만드는 방법은 다음과 같다.
singleton
public class SingletonTest {
private int num;
private SingletonTest() {
num = 100;
}
private static SingletonTest instance = null;
public static SingletonTest getInstance() {
if (instance == null)
instance = new SingletonTest();
return instance;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
생성자
를 private으로 만든다.
private로 생성함으로써 다른 클래스에서 사용하지 못하도록 한다.
SingletonTest 변수 instance
를 null 값으로 초기화한다.
getInstance()
메소드를 사용하여 SingletonTest 객체를 생성할 수 있다.
해당 메소드에서는 만약 기존에 생성된 instance
, 즉 SingletonTest 객체가 없다면 SingletonTest 객체를 new 한 뒤 instance
변수에 저장하고 반환한다.
이미 SingletonTest 객체가 존재하는 경우에는 바로 instance
를 반환한다.
따라서 새로운 SingletonTest 객체를 생성하지 않고 기존에 생성되어 있는 객체를 계속해서 사용하는 것이다.
Java 예제 코드
카드 회사에서 카드를 발급하는 스토리를 예로 싱글톤 패턴을 사용해본다.
본 카드 회사는 유일한 객체
이고, 이 회사에서 카드를 발급하면 고유 번호
가 자동으로 생성된다.
카드의 고유 번호는 10001 부터 시작하며, 카드가 새로 생성될 때마다 10002, 10003으로 1씩 증가한다.
public class CardCompanyMain {
public static void main(String[] args) {
Company com = Company.getInstance();
Company company = Company.getInstance();
System.out.println((com == company) ? "동일객체" : "다른객체"); // 싱글톤 패턴인지 검사
Card myCard = company.createCard(); // 첫 번째 카드 생성, 고유번호 10001
Card yourCard = company.createCard();
System.out.println(myCard.getCardNumber()); // 10001 출력
System.out.println(yourCard.getCardNumber()); // 10002 출력
}
}
Main 에서는 Company 객체가 싱글톤 패턴인지 확인하고, 카드의 고유 번호가 조건에 맞게 출력되는지 확인한다.
싱글톤 패턴 검사 부분에서 동일객체
가 출력되면 싱글톤 패턴을 만족하는 것이다.
public class Company {
private static int cardNumber = 10001;
private Company() {
}
private static Company instance = null;
public static Company getInstance() {
if (instance == null)
instance = new Company();
return instance;
}
public Card createCard() {
Card card = new Card(cardNumber);
cardNumber++;
return card;
}
}
카드 회사 객체는 싱글톤 패턴으로 만든다.
그리고 카드를 만들 때마다 고유 번호도 함께 생성하기 위해 cardNumber
변수를 static 으로 선언 및 10001 값으로 초기화한다.
새로운 카드를 발급하고 나면 cardNum 값을 1 증가시킨다.
public class Card {
private int cardNumber;
public Card() { // 기본 생성자
}
public Card(int cardNumber) {
this.cardNumber = cardNumber;
}
public int getCardNumber() {
return cardNumber;
}
}
카드 객체에서는 카드 고유 번호를 매개변수로 입력 받아 객체를 생성한다.
또한 카드 고유 번호를 불러오기 위한 getCardNumber
메소드를 만들어주었다.
실행 결과
Author And Source
이 문제에 관하여([Design Pattern] Singleton(싱글톤)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mimah/Design-Pattern-Signleton싱글톤저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)