카테고리 없음

<Spring>LMS프로젝트6. 학생 출결 로직 작성(4) 싱글톤 패턴

창조적생각 2021. 11. 8. 13:21

*본 프로젝트는 JSP 팀 프로젝트로 만들었던 Learning Management System을 Spring으로 이식하는 과정입니다.

**본 프로젝트는 김영한 선생님의 인프런 강의 스프링 핵심원리 - 기본편

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 개발자가 되어보세요! 📣 확인해주

www.inflearn.com

을 바탕으로 실습하는 과정입니다. 스프링에 대해서 배우고 싶으시다면 이 강의를 들어보시는 것도 좋을 것입니다.

 

개발 환경

IDK : intelliJ

JDK : 자바 11

의존성은 김영한 선생님의 강의 순서대로 하기 위해 아무것도 넣지 않고 시작한다.

 

이전까지는 순수한 자바만을 이용하여 코드를 작성했다.

이제 스프링 프레임워크의 기능을 사용하기 위해 스프링 프레임 워크의 빈팩토리에 등록하고 사용하는 방법에 대해서 알아본다.

 

싱글톤 패턴은 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다.

 

JSP나 자바 프로그램을 짤 때 보통 이러한 방식으로 사용하는 것을 볼 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package singleton;
 
public class Singleton {
private static Singleton firstInstance = null;
    
    private Singleton() {//생성자를 private로 지정
        
    }
    
    public static Singleton getInstance() {
        if (firstInstance == null) {
            firstInstance = new Singleton();
        }
        return firstInstance;
    }
 
}
 
cs

생성자를 private로 지정하여 getInstance로 밖에 접근할 수 없고 다른 클래스에서 새롭게 생성할 수 없게 강제하여 인스턴스가 오직 하나만이 존재할 수 있게 하는 패턴이다.

이러한 패턴에서 다른 클래스에서 새로운 생성자를 생성한다면

이런 식으로 오류가 발생합니다.

 

그래서 새로운 객체를 생성하는 것이 아니라 getInstance라는 메소드를 통해서 인스턴스를 불러와야 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package singleton;
 
public class SingletonTest {
 
    public static void main(String[] args) {
 
        
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();
 
        System.out.println("singleton1 : " + singleton1);
        System.out.println("singleton1 : " + singleton2);
    }
 
}
cs

 

이렇게 getInstance 메서드로 불러온 인스턴스들은 모두 하나의 인스턴스입니다.

스프링에서는 객체 인스턴스를 디폴트로 싱글톤으로 관리합니다.

스프링빈에 저장된 객체들을 살펴보면 기본적으로 'instance of singleton bean'으로 생성됨을 알 수 있습니다.

딱히 위의 싱글톤 패턴을 만들기 위한 생성자 형성 과정을 거치지 않아도 자동으로 싱글톤 패턴으로 객체를 만들어 줍니다.

 

 

 

728x90