인프런 커뮤니티 질문&답변

blackhole124님의 프로필 이미지
blackhole124

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

회원 관리 웹 애플리케이션 요구사항

MemberRepository 싱글톤 객체 생성 질문 있습니다.

작성

·

581

1

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.스크린샷 2023-08-18 오후 11.02.52.png이전 강의를 들었는데도 이해가 잘 안돼 질문을 남깁니다

위의 코드에서 싱글톤을 구현했다는 부분이 잘 이해가 되지 않습니다.

저는

MemberRepository 클래스 안에

private static final MemberRepository instance = new MemberRepository();

라고 선언을 한 뒤에

다른 클래스에서

MemberRepository memberRepository = MemberRepository.getInstance();

라고 사용을 한다면

memberRepository 변수와

instance 변수는 "같은 객체를 참조"하기 때문에 싱글톤이 된다.

라고 이해했습니다.

이때, 이해가 안되는 부분이

public class MemberRepository {

    private static Map<Long,Member> store = new HashMap<>();
    private static Long sequence=0L;

    //싱글톤 구현을 위해 instance를 사용
    private static final MemberRepository instance = new MemberRepository();

    //getInstance는 MemberRepository를 조회하는 함수.
    //
    public static MemberRepository getInstance(){
        return instance;
    }

    //싱글톤으로 만들 땐, 아무나 생성하지 못하도록 생성자를 private로 설정해서 막아줘야 한다.
    private MemberRepository(){

    }

라고 작성한 부분이 어떤 원리로 싱글톤을 보장하게 되는건가요?

설명 부탁드립니다

항상 친절한 답변 감사합니다.

 

답변 2

1

안녕하세요. blackhole1234님, 공식 서포터즈 코즈위버입니다. AI 답변에 더하여 답변 드립니다.

생성자의 접근제어자가 private 이기에 이 객체는 외부에서 생성할 수 없습니다. (new 연산자로 인스턴스를 얻을 수 없음)

이용할 수 있는 건 static 으로 선언한 그리고 접근제어자가 public 인 getInstance() 메서드밖에 없지요. 가령 MemberRepository.getInstance(); 와 같은 방법으로 밖에 사용할 수 없습니다. 그래서 싱글톤을 보장한다고 하는 것입니다 :)

감사합니다.

0

안녕하세요, 인프런 AI 인턴이에요.

MemberRepository 클래스에서 private static final MemberRepository instance = new MemberRepository();라고 선언하고, getInstance() 메소드를 통해 싱글톤 객체를 사용한다는 부분에 대한 질문이시군요.

이 코드는 전형적인 싱글톤 패턴의 구현 방식 중 하나입니다. 싱글톤 패턴은 어떤 클래스의 인스턴스가 오직 하나만 생성되어 사용되도록 하는 디자인 패턴입니다.

MemberRepository 클래스의 instance 변수는 private static final로 선언되어 있습니다. 이는 해당 변수가 클래스 내부에서만 접근 가능하고, 클래스 수준에서 한 번만 할당되어 다른 곳에서 변경할 수 없음을 의미합니다. 또한, static으로 선언되어 클래스가 로드될 때 한 번만 초기화되며, final로 선언되어 변경할 수 없습니다.

getInstance() 메소드는 외부에서 MemberRepository 객체를 얻을 수 있는 정적 메소드입니다. 이 메소드에서는 instance 변수에 접근하여 객체를 얻는데, 객체가 이미 생성되어 있다면 그대로 반환하고, 생성되어 있지 않다면 새로운 객체를 생성하여 반환합니다.

따라서 코드에서 MemberRepository.getInstance()를 호출하면 싱글톤 객체를 사용할 수 있게 됩니다.

이렇게 싱글톤 패턴을 구현함으로써, 여러 곳에서 동시에 객체를 생성하거나 여러 개의 인스턴스를 사용하는 일을 방지할 수 있습니다.

더 자세한 내용이나 싱글톤 패턴의 장단점에 대해서는 인터넷에서 찾아보시면 더 많은 정보를 얻을 수 있을 거예요.
요청하신 답변이 도움이 되었는지 확인 부탁드리겠습니다. 더 궁금한 점이 있다면 언제든지 물어보세요. 좋은 하루 되세요!

blackhole124님의 프로필 이미지
blackhole124

작성한 질문수

질문하기