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

ghwjd9269님의 프로필 이미지
ghwjd9269

작성한 질문수

스프링 핵심 원리 - 기본편

싱글톤 방식의 주의점

userA와 userB에 대해

작성

·

314

1

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

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

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

[질문 내용]
강의 내용 중 userA의 주문 금액은 10000원, userB의 주문 금액은 20000원인데 코드 실행 결과 20000원이 나오는 경우는 스프링 컨테이너에서 자동으로 싱글톤 패턴이 적용되어 객체 인스턴스가 하만 생성되기 때문인가요? 그래서 객체 인스턴스가 공유되서 그런가요?

답변 2

1

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

질문에 답변드리겠습니다.
1. userA와 userB의 주문 금액이 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

질문 내용에 의하면, userA와 userB의 주문금액이 다르지만 코드 실행 결과가 동일한지 궁금하신 것 같습니다. 이 경우 스프링 컨테이너에서 자동으로 싱글톤 패턴이 적용되어 객체 인스턴스가 하나만 생성되는 것이 원인이 될 수 있습니다. 스프링에서는 기본적으로 빈(Bean)을 싱글톤(Singleton)으로 관리하기 때문에 해당 객체는 컨테이너 내에서 한 번만 생성되고, 이를 사용하는 모든 곳에서 동일한 인스턴스를 참조합니다.

따라서, userA와 userB가 동일한 객체 인스턴스를 참조하게 되면 주문 금액이 공유될 수 있습니다. 따라서 주문 금액을 공유하고 싶지 않다면, 객체의 범위(scope)를 수정하여 매번 새로운 객체 인스턴스를 생성하도록 할 수 있습니다.

하지만 실제로 해당 코드와 스프링 컨테이너의 적용 상황에 따라 주문 금액이 공유되는지 여부는 정확히 파악하기 어렵습니다. 따라서 코드와 스프링 설정에 대한 자세한 내용을 알아야 더 정확한 답변을 드릴 수 있습니다.

더 자세한 정보를 제공해주시면 더욱 정확하고 도움이 되는 답변을 드릴 수 있을 것 같아요. 감사합니다.

0

안녕하세요. ghwjd9269님, 공식 서포터즈 David입니다.

상태를 가지는 객체가 하나만 생성(statefulService1, 2 모두 동일한 빈을 참조하고 있습니다)되었고, 그걸 컨테이너로부터 가져와서 상태를 변경했습니다. 그러므로 마지막에 상태를 변경한 값(20000)이 남아서 20000이 출력된 것입니다.

감사합니다.

ghwjd9269님의 프로필 이미지
ghwjd9269

작성한 질문수

질문하기