[아이템3]싱글턴을 만들거면 확실히 만들자!
이펙티브 자바 책을 읽으면서 새로 알게된 내용이나 느낀점을 정리한 글입니다.
싱글턴(Singleton)
싱글턴 만드는 방법을 이야기하기 전에 싱글턴이 무엇인지부터 알아보자.
- 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. (Application내에서 단 1개의 인스턴스만 생성할 수 있는 클래스)
- 한번의 객체 생성으로 재사용이 가능하기 때문에 메모리 낭비를 방지할 수 있다.
- 싱글톤으로 생성된 객체는 전역성을 띄기에 다른 객체와 공유가 용이하다.
정말 쉽게 말하면 프로그램상에 딱 한개만 존재하는 인스턴스를 싱글턴이라고 한다.
그러면 어떻게 싱글턴을 만들까?
크게 두가지 방법이 있다.
필드 방식의 싱글턴
기본 생성자를 외부에서 호출 못하게 막아버리는 방법이다.
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() {}
}
public class Main {
public static void main(String[] args) {
Elvis item3 = Elvis.INSTANCE;
}
}
정적 팩터리 메서드 방식의 싱글턴
마찬가지로 기본 생성자를 막아버리고 외부에서 객체를 생성하지 않아도 호출 가능한 static 으로 인스턴스를 얻는 메서드를 공개하는 방법이다.
(이를 정적팩터리 메서드라고 한다)
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
public static Elvis getInstance() {
return INSTANCE;
}
private Elvis() {}
}
public class Main {
public static void main(String[] args) {
Elvis elvis = Elvis.getInstance();
}
}
하지만 우리가 의도하든 하지못했던 간에
자칫 잘못하면 하나만 만들라고 해둔 싱클턴 클래스를
여러개 생성해놓는 등의 실수를 범할 때가 있다.
따라서 만약 이미 인스턴스가 있는데 또 생성하는 로직을 호출되거나 했을 때 Exception 을 내거나 하는 방식으로 코딩하면 더 안전하게 싱글톤을 생성할 수 있을 것이다.
'독서 > Effective Java' 카테고리의 다른 글
[아이템2]생성자에 매개변수가 많을 때는? 빌더 패턴을 쓰자! (0) | 2021.11.02 |
---|---|
[아이템1]생성자보다 정적 팩터리 메서드를 써야하는 이유 (0) | 2021.11.01 |