공상하는 개발자

[안드로이드/kotlin] 싱글톤 패턴 사용해보기 본문

개발/안드로이드

[안드로이드/kotlin] 싱글톤 패턴 사용해보기

공상과학소설 2019. 11. 15. 21:58
반응형

싱글톤 패턴이란?

  • 어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 디자인 패턴이다.
  • 애플리케이션의 시작부터 종료까지 한 번의 생성으로 고정된 메모리 영역을 가지기 때문에 메모리를 효율적으로 사용 할 수 있다.
  • 싱글턴의 인스턴스는 전역적으로 사용되기 때문에 다른 클래스의 인스턴스들이 데이터를 공유 변경 가능하다는 장점이 있다.
  • 쉽게 말하면 한 번의 선언으로 모든 클래스에서 전역으로 사용 가능한 필드나 메서드를 만드는 것. (아무데서나 접근 가능한 필드나 메소드) ex) 유저 로그인 아이디

 


♬ 자바코틀린의 싱글턴 패턴

  • 자바에서는 인스턴스 변수를 선언하고 생성자 및 정적 메서드를 추가하는 작업을 추가한다. 
  • 코틀린에서는 단 한 줄로 처리된다.

 

◈ 자바 코드

public final class SingleTon {
  private static Singleton instance = null;
  
  private Singleton() { }
  
  public static synchronized Singleton
    getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}

 

◈ 코틀린 코드(한 줄이면 된다.)

object Singleton

 

 

여기서 잠깐! 정적 메서드란??

  1. static으로 선언한다.
  2. 클래스의 인스턴스 없이 호출이 가능하며, 인스턴스에서는 호출이 불가능하다. 
  3. 유틸리티 함수를 만드는데 유용하게 사용된다.

object를 쓴 예

object GithubServicelmpl {
    private const val BASE_URL = "https://api.github.com"

    private val retrofit:Retrofit = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build()

    val service:GithubService = retrofit.create(GithubService::class.java)
}

 


Companion object VS object

 

 

자바와 동일한 방식으로 사용하는 방법 : Companion object

class BBQ {
  companion object {
    const val chicken = "delicious"
    
    fun wing() {
      // Do something
    }
  }
}

 

 

companion object 내에 선언된 속성과 함수는 (클래스 이름).(필드/함수 이름) 형태로 바로 호출이 가능하다. 

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // ... Something ...

// BBQ.chicken() 함수 호출
    BBQ.chicken()
}

 

 

결국 companion object는 클래스 내부에서 선언되고, object 클래스 외부에서 선언된다. 

 

 

 

 

참고 출처 : https://takhyeongmin.github.io/2019/06/24/CompanionObjectVsObject/

 

[Kotlin] Companion Object VS Object | 탁형탁의 개발파티

static을 코틀린에서 사용하는 법 코틀린에는 정적(static) 변수 혹은 메소드가 없고, 대신 패키지 내에 함수를 선언하여 사용할 수 있다. 예를 들면 [Foo.java] 12345678910package foo.bar;class Foo { public static final String BAR = "bar"; public static void baz() { }} 위 코드를 코틀린에서는 이렇게 바꿀 수 있다. [Foo.kt] 1234567packag

takhyeongmin.github.io

https://takhyeongmin.github.io/2019/06/24/WhyUseSingleton/

 

[디자인패턴] 왜 싱글톤(Singleton)을 사용하는가? | 탁형탁의 개발파티

싱글톤(Singleton Pattern) 싱글톤 패턴은 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다. 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나고 최초 생성 이후에 호출된 생성자는 최초에 생성한 객체를 반환한다. (자바에선 생성자를 private 로 선언해서 생성 불가하게하고 getInstance() 로 받아쓰기도 함) 싱글톤 패턴은 단 하나의

takhyeongmin.github.io

 

반응형
Comments