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

박준현님의 프로필 이미지
박준현

작성한 질문수

[2023 코틀린 강의 무료제공] 기초에서 수익 창출까지, 안드로이드 프로그래밍 A-Z

할 일 추가하기 기능 구현 (5)

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

작성

·

33

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

 

 

답변 1

0

안녕하세요, 인프런 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 메소드의 구현, 컨텍스트의 전달 방식, 혹은 다른 설정의 누락 등 다양한 요인에 기인할 수 있기 때문입니다.

박준현님의 프로필 이미지
박준현

작성한 질문수

질문하기