Back-end/JAVA
[JAVA] 싱글톤 패턴(Singleton pattern) 사용법과 장단점
화누파더
2024. 7. 9. 19:12
반응형
싱글톤 패턴이란?
소프트 웨어 디자인 패턴중의 하나로 특정 클래스의 인스턴스를 하나만 생성하도록 하는 패턴이다. 이는 메모리 절약과 객체 일관성을 위해 사용된다.
싱글톤 객체 생성과 사용법
자바에서 싱글톤 객체를 생성해서 사용하는 방법을 예제 코드를 통해 알아보겠다.
Singleton.java
public class Singleton {
// 싱글톤 객체를 담을 static 변수
private static Singleton singleton;
// 생성자
private Singleton() {}
// 인스턴스 생성
public static Singleton Instance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
// 싱글톤 객체를 사용할 메서드
public void sayHello(){
System.out.println("hello");
}
}
Main.java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Singleton singleton = Singleton.Instance();
singleton1.sayHello();
}
}
// 결과 : hello
싱글톤 여부 확인해보기
위에서 싱글톤 객체를 생성했지만 저게 싱글톤인지 확인은 안된 상태이다. 이번에는 객체를 2개를 생성하고 그것의 메모리 주소가 같은지 확인을 통해 싱글톤 여부를 확인해보겠다.
java 파일만 조금 수정하면 확인이 가능하다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Singleton singleton1 = Singleton.Instance();
Singleton singleton2 = Singleton.Instance();
if (singleton1 == singleton2) {
System.out.println("싱글톤 입니다!");
}
}
}
//결과 : 싱글톤 입니다!
enum
Java 5부터 도입된 enum은 싱글톤 생성을 한층 편하게 해준다. 아래는 enum을 이용한 싱글톤 생성이다. 결과는 위와 동일하다.
Singleton.java
public enum Singleton {
INSTANCE;
// 싱글톤 객체를 사용할 메서드
public void sayHello(){
System.out.println("hello");
}
}
Main.java
public class Main {
public static void main(String[] args) {
Singleton singleton1 = Singleton.INSTANCE;
Singleton singleton2 = Singleton.INSTANCE;
if (singleton1 == singleton2) {
System.out.println("싱글톤 입니다!");
}
}
}
싱글톤의 장단점
싱글톤의 생성법은 알아보았고 마지막으로 싱글톤을 사용할 경우의 장단점을 알아보고 포스팅을 마치도록 하겠다.
장점
- 메모리 절약 : 객체가 한번만 생성해서 공유되므로 메모리가 절약된다.
- 객체 공유 : 한번에 여러곳에서 요청이 와도 하나의 객체에서 순차적으로 처리되어 일관성이 유지된다.
- 전역 접근성 : 어디서든 동일한 객체를 호출 가능하고 코드의 유지 보수성을 높일 수 있다.
단점
- 생명 주기 관리 : 싱글톤 인스턴스는 생명 주기가 길어질 경우 메모리 누수 등의 문제가 발생할 수 있어 라이프사이클을 정교하게 관리해야한다.
- 멀티스레드 처리 : 동시에 여러 스레드에서 접근할 경우 동기화 문제가 발생할 수 있어 동기화 처리가 필요하다.
반응형