일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코틀린
- git commit -m
- streamlit
- java
- static
- 다음 큰 숫자 풀이
- apply
- Private
- 프로필 구현
- GitHub
- 접근 제어자
- @SpringBootApplication
- springboot
- 캡슐화
- git pull
- 인터프리터
- @Configuration
- git clone
- 표준함수
- git add
- 프로그래머스 #lv0
- Git
- git push
- Public
- 싱글톤
- open ai key 발급
- JIT
- JVM
- assertThat()
- CLI
- Today
- Total
우당탕탕 개발_𝒍𝒐𝒈
singleton 패턴 본문
싱글톤 패턴이란?
하나의 클래스에 오직 하나의 인스턴스를 만들고 그것을 계속 재사용하는 패턴이다.
보통 데이터베이스 모듈에 많이 사용한다고 한다.
오늘은 강의 시간에 배운 내용 +a으로 정리하고
데이터베이스 진도를 본격적으로 나간다면 싱글톤 패턴이 어떤 식으로 적용되는지 다시 한번 알아볼 예정이다.
다시 본문으로 돌아와서..
그럼 싱글톤 패턴을 적용하기 위해 우리가 생각해야 하는 조건들에는 무엇이 있을까?
1. 재사용을 위해서는 '공유'(static)의 개념이 필요하다.
2. 다른 곳에서 함부로 new를 통해 새로운 객체를 생성할 수 없도록 제한(private)을 해야 한다.
3. 따라서 다른 곳에서 싱글톤 패턴이 적용된 객체를 호출하기 위한 메서드가 필요하다!
그럼 위 조건에 맞춰 코드를 작성해 보자!
public class Singleton {
private static Singleton singletonObject;
private Singleton(){
}
public static Singleton getSingletonObject(){
if(singletonObject==null){
singletonObject = new Singleton();
}
return singletonObject;
}
}
- 싱글톤 객체를 담을 static 변수를 생성한다.
- 다른 곳에서 함부로 new를 통해 새로운 객체를 생성할 수 없도록 private 타입의 기본 생성자를 만든다.
- 만약 singletonObject가 비어있다면 객체를 생성하고 이를 리턴하는 메서드를 선언한다.
여기서 잠깐! 아직 static을 왜 적어주었는지 모르겠는 사람은 아래 블로그글에서 static에 대해 공부하고 오자!
2024.02.13 - [대외 활동/데브코스] - static에 대해서
그럼 지금까지 싱글톤패턴을 적용하기 위한 방법에 대해 알아보았으니
마지막으로 main 메서드에서 서로 이름이 다른 싱클톤 타입의 객체 2개를 만들어 정말 하나의 인스턴스를 공유하는지 알아보자
참고로 new를 통해 객체를 생성하려고 하면 바로 빨간 줄이 그어지는 걸 확인할 수 있다!
singleton1과 singleton2 모두 하나의 참조값을 가진다는 것을 확인할 수 있다!
번외
싱글톤 패턴을 사용하여 객체를 생성하는 또 다른 방식
public class Singleton {
private static final Singleton singletonObject = new Singleton();
private Singleton() {
}
public static Singleton getSingletonObject() {
return singletonObject;
}
}
이 방식은 프로그램의 시작 지점에서 객체가 생성되는 방식이다. (이른 초기화)
만약 반드시 위 객체를 생성해야 한다면 위 방식을 통해 여러 스레드에서 동시에 객체가 생성하면서 발생하는 문제들을 예방할 수 있다.
하지만 객체가 너무 무겁고... 무조건 위 객체가 사용된다는 확신이 없을 때에는 자원의 낭비가 발생할 수 있으므로 잘 판단해서 사용하는 것을 추천한다.
'대외 활동 > 데브코스' 카테고리의 다른 글
kotlin) 표준함수 이론 정리와 고민에 대한 생각의 과정 (5) | 2024.10.16 |
---|---|
<DI 컨테이너> @ComponentScan과 @Configuration은 반드시 함께 명시해야하는 걸까? (0) | 2024.08.10 |
static에 대해서 (0) | 2024.07.20 |
JVM 실행 과정/구성 요소 (1) | 2024.07.17 |
프로세스와 스레드 (0) | 2024.07.16 |