싱글톤패턴(Singleton Pattern)
by ash
참고1 : https://jeong-pro.tistory.com/86
참고2 : https://commin.tistory.com/121
- 회사 선배님들의 스프링 관련 토론(?)중, 지속적으로 싱글톤패턴에 대한 언급을 잘 못알아 들었다ㅜㅜ
- 기본적인 디자인패턴 중 하나인데, 급급하게 공부한 입장에서 취업하고 이제서야 공부를 해보기 위한 포스팅
- 싱글톤패턴에 대해 알아야 추후 스프링 빈 스코프(Singleton, prototype 등)와 관련하여 공부할 수 있다
1. 싱글톤패턴이 무엇?
- 사전적 의미로는 낱개, 단독 개체 등의 의미가 있음
- 기본적으로 인스턴스는 생성시마다 새롭게 메모리에 올라가서 생성
- 싱글톤패턴은 최초에 한번만 클래스가 메모리에 올라간 후, 이후 인스턴스가 새롭게 생성되는게 아니라 최초에 생성된 인스턴스를 계속 돌려쓰게 됨
2. 싱글톤패턴 구현 방식
- 기본생성자는 접근제어자가 public이지만, 싱글톤패턴에서는 private를 사용
- private 기본생성자는 외부(자기 클래스 이외)에서 접근할 수 없기 때문에, new를 사용하는 기본 인스턴스 생성 방식을 사용할 수 없음
- 최초 한 번을 생성하는 것은 내부에서 인스턴스를 생성해주고, getInstance()메서드를 사용하여 최초에 생성된 인스턴스를 계속 갖다 쓰는 방식
3. 코드 구현
- Singleton.java
public class Singleton {
private static Singleton singleton = new Singleton(); //최초 한 번만 인스턴스 생성
private Singleton() { //접근제어자 private를 통해 외부에서 인스턴스 생성불가
System.out.println("싱글톤 인스턴스입니다.");
}
public static Singleton getInstance() { //외부에서 인스턴스를 갖다 쓰기 위해 getInstance() 선언
return singleton;
}
}
- SingletonMain.java
public class SingletonMain {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
//주소값 비교를 위해 두개의 인스턴스를 비교한다. 싱글톤이 구현되었다면, 두 주소값이 같을 것이다.
System.out.println(singleton);
System.out.println(singleton2);
}
}
- SingletonMain.java의 실행결과
싱글톤 인스턴스입니다.
싱글톤패턴.Singleton@16f65612
싱글톤패턴.Singleton@16f65612
4. 언제 어디서 왜 사용?
1)장점
- 인스턴스를 하나만 사용하기 때문에, 메모리 낭비를 방지할 수 있음
- static으로 구현된 인스턴스이기 때문에, 다른 클래스들 간에 인스턴스들의 데이터 공유가 쉬움(DBCP 등에서 많이 사용)
- 객체 로딩 시간 감소
2)단점
- 싱글톤 패턴을 많이 사용하면, 다른 클래스들 간의 결합도가 높아져서 객체지향의 원칙인 ‘개방-폐쇄원칙’을 위배
Subscribe via RSS