inflearn logo
강의

Course

Instructor

[2023 Free Kotlin Lecture] Android Programming A-Z, from Basics to Profit Generation

Implementing the Add To-Do Function (5)

싱글톤 패턴 구현중 코드가 강의와 일치하지 않습니다.

156

junhyunpark3058187

5 asked

0

AddTodoActivity.kt에서

Appdatebase.getInstance(this)를 쓰라고 강의에 나와있는데 Appdatabase.getInstance를 쓰면 오류가 납니다. 그래서 코파일럿을 통해 문제점을 확인해보았는데

AppDatabase.appDatabase!!.getInstance(this)로 바꿔서 쓰라는 답변을 받았습니다 이렇게 써도 문제가 없는 건가요?

AppDatabase.kt 와 AddTodoActivity.kt 파일을 보시고 제가 잘못되었다면 어느부분이 잘못되었는지 알려주시면 감사하겠습니다

이부분이 사용된 MainActivity에서도 db를 선언할때 유사하지만 다른 부분이 보여서 질문드립니다

AddTodoActivity.kt

스크린샷 2024-08-22 오후 8.37.24.png

MainActivity.kt

스크린샷 2024-08-22 오후 8.42.05.png

AppDatabase.kt

스크린샷 2024-08-22 오후 8.40.05.png

 

 

android kotlin 클론코딩

Answer 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

제공하신 정보에 따르면, AppDatabase 인스턴스를 가져오는 방법에 관해 질문하셨네요.

AppDatabase.getInstance(this) 대신 AppDatabase.appDatabase!!.getInstance(this)로 바꾸어 사용했을 때의 올바른 사용 여부에 대한 질문입니다.

AppDatabase.kt의 코드를 살펴보면, 데이터베이스 인스턴스에 접근하기 위해 companion object 내에 getInstance 함수가 정의되어 있습니다. 이는 싱글톤 패턴을 구현하는 표준 방법 중 하나로, AppDatabase 클래스에 대한 단일 인스턴스를 제공하며, 해당 인스턴스는 앱 전역에서 공유됩니다.

AppDatabase.kt에서의 싱글톤 패턴 구현 코드

따라서 AppDatabase.appDatabase!!.getInstance(this)를 사용하는 것은, 앞서 appDatabase 변수가 null인 경우 새 인스턴스를 생성하고, null이 아닌 경우 기존 인스턴스를 반환하는 로직에 기반하는 것입니다. 여기서 !! 연산자는 appDatabase가 절대 null이 아님을 단언하는 데 사용됩니다. 그러나 이 방식은 null 상황에서 NullPointerException을 발생시킬 수 있는 위험이 있어 주의가 필요합니다.

일반적으로 getInstance 메서드 안에서 null 체크를 수행하고, 필요한 경우 인스턴스를 생성하는 방식이 권장됩니다. 즉, getInstance 메서드 호출이 null 상황을 적절히 처리하므로, 외부에서 appDatabase에 대해 !! 연산자를 사용할 필요는 없습니다.

제공된 AppDatabase.kt 코드에 기반하여, AppDatabase.getInstance(this)의 사용이 적절히 설계된 싱글톤 패턴에 부합하는 방식이라 판단됩니다. 혹시 AppDatabase.getInstance(this) 호출 시 오류가 발생한다면, 오류 메시지의 내용을 통해 구체적인 문제를 파악해야 할 것입니다. 오류의 원인이 getInstance 메소드의 구현, 컨텍스트의 전달 방식, 혹은 다른 설정의 누락 등 다양한 요인에 기인할 수 있기 때문입니다.

안드로이드스튜디오 버전이 어떻게 되는지요?

0

106

1

스크래치 파일 Run 안되는 오류 발생

0

134

1

Git에서 다운받은 폴더가 안열리는 분들

0

136

1

TodoDao Interface 문의

0

78

1

kotlin 버전과 ksp 버전 꼭 맞추셔야 해요!!

0

450

1

아름다운 joyce님께.. runonuithread 문의

0

139

0

viewBinding 관련 질문입니다.

0

206

3

0:30초 질문입니다.

0

179

1

Locationmanager로 타입캐스팅 실패 문의

0

140

1

Todo리스트 dao 구성 시 todo 질문

0

140

1

룸 데이터베이스 구성 시 dao 에러 문의

0

171

1

버튼모양 질문 소스코드 첨부

0

146

1

레이아웃 구성할떄 저는 버튼모양이 원으로 나와요

0

169

1

MainActivity 파일안에 setContencView가 없습니다..

0

202

1

room database 설치 질문

0

174

1

kts로 공부하는 학생도 있는데 갑자기 설명도 없이 kt로 설명하면..

0

314

3

mutable과 var의 차이점

0

201

1

안드로이드 스튜디오 스크래치 파일

0

277

1

추가링크는 어디에 있을까요?

0

285

1

대시보드 설정 마지막 단계 Google Play에 앱 게시

0

678

2

geoCoder.getFromLocation 에러

0

554

2

apirequest.io 로딩 현상 & 사이트 이상함

0

451

1

PrimaryKey를 Nullable하게 만드는 이유

0

268

1

개인정보처리방침에 대한 질문

0

233

1