Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 디자인 패턴
- 프런트엔드
- 프론트엔드
- 알고리즘
- MySQL
- 자바스크립트
- 스프링
- 쿼리
- 미니정리
- node.js
- spring
- 백엔드
- Next.js
- java
- 프로그래머스
- 데이터베이스
- 코드 테스트
- 서버
- web
- jpa
- SQL
- oracle
- jsp
- 스프링부트
- 코드테스트
- BACK-END
- JavaScript
- 정리
- 오라클
- 자바
Archives
- Today
- Total
참치코더의 꿈 메모장
디자인 패턴 / 싱글톤 디자인 패턴 정리 본문
728x90

싱글톤 디자인 패턴
- 클래스의 인스턴스를 오직 하나만 생성하고, 어디서든 동일한 인스턴스를 공유하도록 보장하는 패턴
- 전역에서 하나의 객체만 사용해야 할 때 유용
(데이터베이스 연결 객체, 설정(config) 객체, 로깅(logging) 객체 등)
싱글톤 패턴 특징
- 인스턴스 단일 (프로그램 전체에서 하나의 인스턴스만 생성)
- 전역 접근 (어디서든 동일한 객체에 접근 가능)
- 생성 제한 (외부에서 new 키워드로 객체를 직접 생성하지 못하도록 제한)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
// 싱글톤 예제
public class Singleton{
// 자기 자신 타입의 private static 변수 선언
private static Singleton instance;
// 생성자를 private으로 선언하여 외부에서 new 금지
private Singleton(){
System.out.println("Singleton 객체 생성!");
}
// 외부에서 접근할 수 있는 public 메서드 제공
public static Singleton getInstance(){
if(instance == null) {
instance = new Singleton(); // 최초 요청 시에만 생성
}
return instance;
}
public void doSomething(){
System.out.println("싱글톤 메서드 실행!");
}
}
public class Main{
public static void main(String[] args){
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2); // 같은 객체
s1.doSomething();
}
}
|
cs |
싱글톤 패턴 장단점
장점
1. 전역에서 동일 객체를 공유 가능
2. 객체 생성 비용 절약
3. 상태 관리가 용이
단점
1. 멀티스레드 환경에서 안전하지 않으면 동기화 문제 발생
2. 테스트 어렵고 의존성 주입과 충돌
3. 남용하면 전역 변수 남용과 비슷한 문제 발생
그럼 어디에서 싱글톤 패턴을 사용하나..............
스프링의 싱글톤
- 스프링에서는 기본적으로 모든 Bean이 싱글톤이다.
- 개발자가 특별히 설정하지 않아도 스프링컨테이너에 하나의 Bean 인스턴스만 생성된다. (@Bean)
- 컨테이너 레벨에서 관리하기 때문에 애플리케이션 전역에서 동일 인스턴스를 공유한다.
- 따라서 클래스 내부에서 싱글톤을 구현하지 않고 @Bean(메서드 빈) 또는 @Component(클래스 빈) 등
어노테이션을 사용하면 된다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
// 싱글톤 예제
@Component
public class MyService {
public void hello(){
System.out.println("Hello!");
}
}
// 컴포넌트 스캔 대상 패키지에 포함되면, 자동으로 컨테이너에 등록한다
// 별도의 @Bean 없이도, 스프링 싱글톤 관리한다.
@Configuration
public class AppConfig {
@Bean
public MyService myService(){
return new MyService();
}
}
// 메서드 리턴 객체를 빈으로 등록한다
// 메서드 이름이 빈 이름이 되고, 컨테이너가 싱글톤으로 관리한다.
|
cs |
728x90
'디자인 패턴' 카테고리의 다른 글
| 디자인 패턴 / 어댑터 패턴 정리 (0) | 2025.10.03 |
|---|---|
| 디자인 패턴 / 커맨드 패턴 정리 (0) | 2025.09.28 |
| 디자인 패턴 / 팩토리 패턴(Factory Pattren) (0) | 2025.09.19 |
| 디자인 패턴 / 데코레이터 패턴 (포장지 패턴) (0) | 2025.09.07 |
| 디자인 패턴 / 옵저버 패턴 정리 (0) | 2025.08.28 |
Comments