인스턴스를 하나만 만들어 사용하기 위한 패턴
커넥션 풀, 스레드 풀, 디바디으 설정 객체 등과 같은 경우 인스턴스를 여러개 만들면 불필요한 자원을 사용하게 되고, 또 프로그램이 예상치 못한 결과를 낳을 수 있습니다.
싱글톤 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용하는 패턴입니다.
싱글톤 패턴 조건
- new를 실행할 수 없도록생성자에 private 접근 제어자를지정
- 유일한 단일 객체를 반환할 수 있는 정적 메서드 필요
- 유일한 단일 객체를 참조할 정적 참조 변수 필요
코드를 보면서 이해하겠습니다.
public class Singleton {
static Singleton singletonObject; //정적 참조 변수
private Singleton() {}; //private 생성자
//객체 반환 정적 메서드
public static Singleton getInstance(){
if(singletonObject == null){
singletonObject = new Singleton();
}
return singletonObject;
}
}
getInstance를 했을때 이미 객체가 생성되었다면, 생성된 객체를 반환하고
생성이 되지 않았다면 if문에 걸려 new를 통해 객체를 한번만 생성합니다.
테스트 해보겠습니다.
public class Client {
public static void main(String[] args){
//private 생성자이므로 new를 통해 인스턴스 생성 불가
//Singleton s = new Singleton();
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
Singleton s3 = Singleton.getInstance();
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
모두 같은 객체의 주소가 나오는 것을 확인할 수 있습니다.


s1,s2,s3은 모두 하나의 주소를 바라보고 있습니다.
싱글톤 객체는 단일 객체이기 때문에 속성을 갖지 않는것이 정석입니다.
단일 객체가 속성을갖게 되면 하나의 참조 변수가 변경한 단일객체의 속성이 다른 참조 변수에 영향을 미치기 때문입니다.
Static 변수를 생각하면 됩니다.
즉, 전역/공유 변수를 사용하지 말라는 지침과 같습니다.
다만 읽기 전용 속성을갖는 것은 문제가 되지 않습니다.
또한 다른 단일객체에 대한참조를 속성으로 가진 것도 문제가 되지는 않습니다.
싱글턴 패턴의 특징
- private 생성자를 갖는다.
- 단일객체 참조 변수를 정적 속성으로 갖는다.
- 단일객체 참조 변수가 참조하는 객체를 반환하는 getInstance() 정적 메서드를 갖는다.
- 단일 객체는 쓰기 가능한 속성을 갖지 않는것이 정석이다.
'Spring' 카테고리의 다른 글
[스프링의 삼각형] AOP - 횡단괌심 (0) | 2023.10.11 |
---|---|
IoC 와 DI 그리고 Bean (1) | 2023.10.11 |
디자인 패턴 (1) | 2023.09.22 |
객체지향 설계 원칙 - SOLID (0) | 2023.09.20 |
객체지향의 4가지 특징 (0) | 2023.09.19 |
인스턴스를 하나만 만들어 사용하기 위한 패턴
커넥션 풀, 스레드 풀, 디바디으 설정 객체 등과 같은 경우 인스턴스를 여러개 만들면 불필요한 자원을 사용하게 되고, 또 프로그램이 예상치 못한 결과를 낳을 수 있습니다.
싱글톤 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용하는 패턴입니다.
싱글톤 패턴 조건
- new를 실행할 수 없도록생성자에 private 접근 제어자를지정
- 유일한 단일 객체를 반환할 수 있는 정적 메서드 필요
- 유일한 단일 객체를 참조할 정적 참조 변수 필요
코드를 보면서 이해하겠습니다.
public class Singleton {
static Singleton singletonObject; //정적 참조 변수
private Singleton() {}; //private 생성자
//객체 반환 정적 메서드
public static Singleton getInstance(){
if(singletonObject == null){
singletonObject = new Singleton();
}
return singletonObject;
}
}
getInstance를 했을때 이미 객체가 생성되었다면, 생성된 객체를 반환하고
생성이 되지 않았다면 if문에 걸려 new를 통해 객체를 한번만 생성합니다.
테스트 해보겠습니다.
public class Client {
public static void main(String[] args){
//private 생성자이므로 new를 통해 인스턴스 생성 불가
//Singleton s = new Singleton();
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
Singleton s3 = Singleton.getInstance();
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
모두 같은 객체의 주소가 나오는 것을 확인할 수 있습니다.


s1,s2,s3은 모두 하나의 주소를 바라보고 있습니다.
싱글톤 객체는 단일 객체이기 때문에 속성을 갖지 않는것이 정석입니다.
단일 객체가 속성을갖게 되면 하나의 참조 변수가 변경한 단일객체의 속성이 다른 참조 변수에 영향을 미치기 때문입니다.
Static 변수를 생각하면 됩니다.
즉, 전역/공유 변수를 사용하지 말라는 지침과 같습니다.
다만 읽기 전용 속성을갖는 것은 문제가 되지 않습니다.
또한 다른 단일객체에 대한참조를 속성으로 가진 것도 문제가 되지는 않습니다.
싱글턴 패턴의 특징
- private 생성자를 갖는다.
- 단일객체 참조 변수를 정적 속성으로 갖는다.
- 단일객체 참조 변수가 참조하는 객체를 반환하는 getInstance() 정적 메서드를 갖는다.
- 단일 객체는 쓰기 가능한 속성을 갖지 않는것이 정석이다.
'Spring' 카테고리의 다른 글
[스프링의 삼각형] AOP - 횡단괌심 (0) | 2023.10.11 |
---|---|
IoC 와 DI 그리고 Bean (1) | 2023.10.11 |
디자인 패턴 (1) | 2023.09.22 |
객체지향 설계 원칙 - SOLID (0) | 2023.09.20 |
객체지향의 4가지 특징 (0) | 2023.09.19 |