inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)

12강. 코틀린에서 object 키워드를 다루는 방법

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

263

신동훈

작성한 질문수 44

0

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

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

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

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

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

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

 

kotlin java oop

답변 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 키워드를 활용해 가장 기본이 되는 형태의 싱글톤은 만들지 못하겠구나

라는 생각이 들었습니다.

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

 

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

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

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

 

수업노트

0

77

1

싱글톤과 스프링

0

88

2

get() = 3

0

63

2

강사님

0

84

1

강의 복습하면서 생긴 질문

1

108

1

Kotlin과 Java의 현업에서의 활용

0

144

2

data class와 자바의 Lombok을 이용한 DTO 클래스 차이 질문

0

85

1

코틀린에서 상속 시, 주의점에 대한 질문

1

116

3

내용 이해 질문

0

68

1

자바와 코틀린의 함수형 프로그래밍,

1

96

1

플랫폼 타입 설명 문의

2

91

2

널 아님 단언 관련 질문

0

93

1

강의 중 질문

0

89

2

범위 비교 질문

1

102

2

타입캐스팅 궁금한점 질문드립니다.

1

250

2

코틀린 val 질문

0

175

2

완강 후 Kotlin 이런저런 질문 드려봅니다!

3

428

2

확장함수 스타일 질문

0

147

2

확장 프로퍼티 질문

1

168

1

update 함수를 만든다는게 어떤 의미인지 예시가 궁금합니다!

1

290

1

java class의 NotNull 어노테이션 인식

1

272

1

[16강] 확장함수 관련 질문입니다!

1

137

2

리턴타입 사용시 any를 사용해도 괜찮은가요?

1

147

1

안녕하세요 scope function 에 receiver 가 없는 경우

1

178

1