[디자인패턴] 싱글톤 패턴
🙄디자인 패턴이 뭐야?
디자인 패턴이 무엇인지 자세히 다루는 것은 나중으로 하고, 지금은 간단하게 정의 정도만 설명하겠다.
디자인 패턴이란 소프트웨어 설계에서 공통적으로 발생하는 문제에 대해서 재사용이 가능하도록 설계해둔 해결책이다. 쉽게 말해 여러분이 PPT를 만든다고 가정한다면, PPT를 쉽게 만들기 위해 미리 만들어진 템플릿을 찾을 것이다. 그리고 디자인 패턴은 그 템플릿과 비슷하다고 생각하면 된다.
🤔오호! 그럼 싱글톤 패턴은 뭔데?
결론부터 말하면 객체를 단일화시키는 패턴이다. 이제 좀 예를 들어 말하자면, 여러분들은 각자 은행 계좌를 가지고 있을 것이다. (물론 없는 사람도 있겠지만 그런 사람은 있다고 가정해보자.) 여러분이 계좌에 입금을 하거나 다른 사람에게 송금을 한다면, 그때마다 나의 계좌나 상대의 계좌에 대한 정보를 불러올 것이다. 소프트웨어에서 보면 이것은 거래 내역이 발생할 때마다 계좌 정보를 새롭게 생성하는 것이 된다. 근데 컴퓨터는 생각보다 바보라서 이 계좌가 아까 그 계좌인지 알지 못한다. 그럼 분명 내 계좌에 입금을 했는데 금액에 변화가 없는 불상사가 발생할 수 있다. 이러한 문제를 해결하기 위한 것이 싱글톤 패턴이다.
싱글톤 패턴은 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이게 만든다. 즉, 여러분이 여러 번의 입금 거래를 실행한다고 하더라도 컴퓨터는 해당 계좌가 아까 그 계좌인 것을 알게 되는 것이다. 자, 이제 예시는 중요하지 않다. 단 하나만을 기억하자.
실제로 생성되는 객체는 단 하나!
생성자를 백날 생성해도 같은 친구가 나온다는 것을 꼭 명심하자. 이러한 패턴이 왜 필요한지는 프로그래밍을 하다보면 상당히 자주 만날 수 있을 것이다.
💻싱글톤 패턴 예시
package Singleton;
public class Singleton {
private static Singleton singleton; // 해당 객체에 대해 아무도 접근할 수 없게 private으로 설정
private Singleton() {}; // 생성자 또한 private으로 지정
public static Singleton getSingleton() { // 다른 클래스에서 생성자 생성이 필요할 때, 해당 메서드를 사용
if (singleton == null) { // 만약 객체가 null. 즉, 비어있다면
singleton = new Singleton(); // 새로운 객체를 생성하고,
}
return singleton; // 그 객체를 반환한다.
}
// 이후 고유 코드를 생성하는 메서드를 작성하거나, 그 외에 유일 객체에 추가적인 정보가 필요한 내용을 캐치해서
// 메서드를 통해 덧붙이면 싱글톤 패턴을 응용한 코드를 제공하거나 하는 것이 가능하다.
}