강의

멘토링

로드맵

Inflearn brand logo image

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

전수민_개인계정님의 프로필 이미지
전수민_개인계정

작성한 질문수

CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조

DEEP DIVE : 싱글톤 패턴을 구현하는 7가지 방법 #1 ★★☆

큰돌 선생님 질문이 있습니다.

해결된 질문

작성

·

42

0

다름이 아니라, JAVA로 싱글톤 패턴 구현방법 7가지 중 첫 번째 강의 예시 관련 의문점이 생겨서 질문 남깁니다.

1. 윤하라는 변수가 오르트구름에서 달라졌는지 아닌지 보는 예시를 보니, 객체는 하나인 상태이고, 객체 내부 함수에 대해, 두 Thread가 번갈아 쓰는 경쟁 상태를 보여주는 예시 아닌가요?

이건 싱글톤은 제대로 나왔는데, 함수를 번갈아 사용하면서, 내부 static 변수의 값이 덮어써지는 현상에 대한 문제를 syncronized 로 해결한 예시 같은데,
객체가 2개 생겨버린 상황에 대한 예시로 말씀 주신 걸 제가 잘못 이해한 것인지 궁금합니다.

2. 싱글톤으로 객체를 구현했다고 하더라도, 객체 내부 함수 사용에 대한 Thread 간의 경쟁상태는 여전히 개발자가 신경써서 처리해줘야 하나요? 아니면 싱글톤으로 구현되면 해당 부분은 신경 쓸 필요가 없나요?

큰 돌 선생님, 항상 좋은 강의 감사합니다.

답변 2

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 수민님ㅎㅎ

오랜만이네요

 

객체는 하나인 상태이고, 객체 내부 함수에 대해, 두 Thread가 번갈아 쓰는 경쟁 상태를 보여주는 예시 아닌가요?

-> 네 맞습니다. 다만, 해당 부분은 자바의 멀티스레드를 설명한 부분(05:00 부터) 이며 또한 저 윤하클래스는 싱글톤이 아닙니다.

 

싱글톤으로 객체를 구현했다고 하더라도, 객체 내부 함수 사용에 대한 Thread 간의 경쟁상태는 여전히 개발자가 신경써서 처리해줘야 하나요? 아니면 싱글톤으로 구현되면 해당 부분은 신경 쓸 필요가 없나요?
-> 네 맞습니다. 신경써서 처리해주어야 합니다. 싱글톤은 "인스턴스가 1개만 생성됨을 보장"할 뿐이지, 그 인스턴스의 메서드나 필드가 쓰레드에 안전(Thread-safe)하다는 보장을 절대 하지 않습니다

 

 


 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

0

안녕하세요, 인프런 AI 인턴입니다. 전수민_개인계정님.

싱글톤 패턴과 관련하여 두 가지 궁금증을 공유해 주셨네요. 현대 소프트웨어 개발에서 싱글톤 패턴은 자주 사용되지만 그 정확한 작동을 이해하는 것이 중요합니다.

  1. 싱글톤 패턴과 경쟁 상태:

    • 본문의 설명에 의하면, 싱글톤 패턴 자체는 “단일 인스턴스”의 생성만을 보장합니다. 주로 특정 리소스를 관리하거나 설정 데이터를 공유할 때 유용하죠.
    • 그러나 분명히 이해하신 대로, 싱글톤 인스턴스가 가진 메서드를 여러 스레드가 사용하는 경우, 메서드 내에서 사용되는 데이터에 대한 경합이 일어날 수 있습니다. synchronized 키워드는 이러한 문제가 발생하지 않도록 메서드나 블록 단위로 스레드-safe한 동기화를 제공합니다.
    • 따라서, 두 개의 스레드가 동일한 싱글톤 객체의 메서드를 동시에 호출할 경우 메서드 내부의 상태가 예기치 않게 변경되는 것을 방지하고자 synchronized를 사용합니다.
  2. 경쟁 상태와 싱글톤:

    • 싱글톤 패턴으로 객체를 생성한다고 하더라도, 특정 메서드나 리소스 접근에 대한 스레드 간의 경쟁 상태는 무조건 해결되지 않습니다.
    • 싱글톤 패턴과 별개로, 멀티 스레드 환경에서는 공유 리소스에 대한 접근 제어가 필요합니다. 이는 개발자가 명시적으로 처리해야 하는 부분이며, synchronized 키워드를 활용하여 해결할 수밖에 없습니다. 따라서 싱글톤 패턴과 synchronized는 다른 문제이며 동시에 고려되어야 합니다.

관련된 내용과 설명은 기존 질문에 대해 잘 정리된 싱글톤 패턴 동시성 문제에서 확인하실 수 있습니다. 이 답변은 싱글톤 패턴의 멀티스레드 환경에서의 처리를 다루고 있어 많은 도움이 되실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

전수민_개인계정님의 프로필 이미지
전수민_개인계정

작성한 질문수

질문하기