MemberRepository 싱글톤 객체 생성 질문 있습니다.
655
작성한 질문수 60
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
이전 강의를 들었는데도 이해가 잘 안돼 질문을 남깁니다
위의 코드에서 싱글톤을 구현했다는 부분이 잘 이해가 되지 않습니다.
저는
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()를 호출하면 싱글톤 객체를 사용할 수 있게 됩니다.
이렇게 싱글톤 패턴을 구현함으로써, 여러 곳에서 동시에 객체를 생성하거나 여러 개의 인스턴스를 사용하는 일을 방지할 수 있습니다.
더 자세한 내용이나 싱글톤 패턴의 장단점에 대해서는 인터넷에서 찾아보시면 더 많은 정보를 얻을 수 있을 거예요.
요청하신 답변이 도움이 되었는지 확인 부탁드리겠습니다. 더 궁금한 점이 있다면 언제든지 물어보세요. 좋은 하루 되세요!
servlet과 container에 대한 질문입니다
0
29
1
api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?
0
66
1
jsp 의존성 수정 요청
0
82
2
요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?
0
145
1
save() 메서드 문의
0
67
1
절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상
0
102
1
request-body-json
0
84
2
MVC 패턴의 적용 단위
0
97
1
RequestMapping을 이용한 핸들러, 어댑터
0
120
2
save 후 결과화면
0
91
2
jsp를 이용한 view
0
98
1
application.properties에 debug 추가해도 결과가 똑같습니다.
0
181
1
수업 코드 제공 관련 문의
0
98
2
RequestMappingHandlerAdapter의 Controller 호출 과정
0
102
3
파일 오픈 시
0
70
1
스프링 배치 관련
0
78
1
@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부
0
114
1
postman으로 /request-body-json-v1 호출시 500 error
0
96
1
프론트엔드와 백엔드의 mvc, rest api에 대한 질문
0
82
1
모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문
0
113
1
console log 출력 관련 질문입니다.
0
75
1
애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ
0
140
1
html 변경하는 부분 적용 문제
0
103
1
한글 깨짐
0
77
2





