Android App Track⛺-028

MunkiJeon·2024년 7월 14일

TIL

목록 보기
45/59

TIL (Today I Learned)

오늘 공부한거!

  • 싱글톤
    • object 키워드를 이용한 싱글톤 패턴
      싱글톤으로 구현되어야 하는 클래스를 object 키워드를 사용함으로써 싱글톤으로 구현할 수 있다.
      object SingletonClass {
        val sampleString = "Sample String"
        }
        fun main() {
            if (SingletonObject.sampleString == SingletonObject.sampleString)
                println("동등성 비교 true")
            if (SingletonObject.sampleString === SingletonObject.sampleString)
                println("동일성 비교 ture")
        }
        //출력
        동등성 비교 true
        동일성 비교 true
      object를 사용할 때의 문제점
      object를 사용하면 해당 객체의 초기화가 object 객체에 처음 접근될 때 이루어진다. 그 말은 내부의 모든 변수들이 초기화 된다는 뜻이다.

예를 들어 아래 SingletonClass는 firstValue에 접근하면 SingletonClass가 초기화 되기 때문에 secondValue도 초기화된다.

  object SingletonClass {
      val firstValue = "first"
      val secondValue = "second"
  }

해결책: 내부 변수들의 초기화 시점 조정
object 자체가 접근 시 메모리에 곧바로 올라가는 것은 막지 못하지만, 내부 변수들을 by lazy를 이용해 생성함으로써 호출될 때 초기화를 지연 될 수 있게 만들 수 있다.

아래와 같이 object 내부의 변수값을 by lazy를 통해 지연 생성(호출될 때 메모리 상에 올라가도록 하는 방법)을 하도록 만들면 된다.

object SingletonClass {
    val firstValue = "first"
    val lazyValue by lazy { "lazy" }
}

그렇게 한다면 lazyValue는 호출될 때 처음 메모리 상에 올라가도록 할 수 있다.

이 방법을 통해 SingletonClass 내부에 많은 변수가 있을 때 메모리를 많이 잡아먹는 변수들을 지연생성을 하도록 함으로써 메모리를 최적화할 수 있다...

Today Review

profile
공장자동화와 웹 개발을 핥아 먹다 앱 개발로 전향한 개발자의 키보드의 낡은 키캡⛑️

0개의 댓글