• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

싱글톤 관련하여 질문 드립니다.

22.07.05 11:37 작성 조회수 144

0

안녕하세요. 강의 항상 잘 보고 있습니다.

코틀린에서 object로 싱글톤을 만든 코드를 자바 코드로 변환해보니 자바 코드의 예시로 보여주셨던 정적 블럭을 통한 초기화를 사용하여 싱글톤을 구현하였습니다.

제가 이전에 공부한 바로는 Bill Pugh가 고안한 방식의 inner static class를 사용한 방식이 가장 널리 쓰인다고들 하였습니다.

혹시 코틀린에서  Bill Pugh가 고안한 방식이 아닌 기본적인 정적 블럭을 통한 초기화를 사용한 싱글톤 구현을 채택한 이유에 대해 짐작되는 부분이 있으신지 궁금하여 질문드립니다.

너무 많은 질문을 드리는 것 같아 죄송합니다 ㅠㅠ 돈이라도 더 내고 강의를 사야 했을거 같은데...

정말 좋은 강의 감사드립니다. 많은 도움이 되고있습니다!

 

답변 1

답변을 작성해보세요.

0

안녕하세요 동훈님!!! 아이고~ 아닙니다 ㅎㅎㅎ 동훈님께서 날카로운 질문들을 해주시는 덕분에 저도 많이 배우고 있습니다!!

좋게 봐주셔서 감사할 따름입니다 ㅎㅎㅎ

 

크~ 맞습니다! 제가 알기로도 싱글톤을 '더 좋게' 구현하려면 inner static class 방식이 좋다고 알고 있습니다!

(질문 주신 내용과 관련해서 https://yaboong.github.io/design-pattern/2018/09/28/thread-safe-singleton-patterns/ 도 참고해보았습니다)

 

또한 그렇다면 왜 코틀린은 inner static class 방식을 사용하지 않았는가에 대해서도 찾아보았는데, 명쾌한 답변은 안타깝게 없더라고요 ㅠㅠ

 

그렇지만 답변을 드려보자면!! (여기서부터는 제 개인적인 생각입니다!!!!)

결국 코틀린에서 기본적으로 제공하는 싱글톤 방식과 inner static class 방식의 차이는

"싱글톤 인스턴스가 사용 여부와 무관하게 항상 초기화 되는가 (= 지연 초기화 여부의 차이)"

라고 생각했습니다.

 

이 관점으로 놓고 보았을 때

- 코틀린 싱글톤이 가장 기초적인 방식으로 decompile 되었을 때 지연 초기화 기능을 넣고 싶다면 추가 방법을 쓰면 되지만

- 코틀린이 애당초 지연 초기화 방식으로 decompile 된다면, object 키워드를 활용해 가장 기본이 되는 형태의 싱글톤은 만들지 못하겠구나

라는 생각이 들었습니다.

즉, 프로그래밍 언어에서 가장 기본이 되는 체계를 더 작은 영역으로 설계한 것이죠

 

꿈보다 해몽일 수도 있을 것 같지만 동훈님의 질문 덕에 재미난 생각을 해 답변 드려 보았습니다!

작은 도움이라도 될 수 있으면 좋겠네요, 감사합니다!!!

또 질문있으시다면 언제든 환영입니다 ㅎㅎㅎㅎ