프로그래밍 언어/코틀린 기본

[코틀린 기초] 생성자 없이 객체를 직접 만드는 Object

Per ardua ad astra ! 2021. 2. 27. 01:27
lesson 16 생성자 없이 객체를 직접 만드는 Object

 

여러개의 인스턴스 객체가 필요 없다면 ? 
굳이 class를 쓸 필요 없이 Object를 사용하자 !

Singleton Pattern: 클래스의 인스턴스를 '단 하나'만 만들어 사용하도록 하는 코딩 아키택쳐 패턴

Object는 인스턴스를 생성하지 않고 그 자체로 객체이기 때문에 생성자를 따로 만들지 않는다. 

 

 

코드 예제

fun main(){
  
  println(Counter.count)

  Counter.countUp()
  Counter.countUp()
  println(Counter.count)

  Counter.clear()
  println(Counter.count)

}

object Counter{
  var count = 0
  fun countUp(){
    count++
  }
  fun clear(){
    count = 0
  }
}

object 키워드로 선언. { } 중괄호를 통해서 속성과 함수 만들 수 있다.

Object로 선언된 객체는 '최초 사용시' 자동으로 생성되며 이후에는 코드 전체에서 공용으로 사용된다.

 

실행 결과

 


companion object


그런데 class 안에도 Object를 만들수 있다 => companion object

class가 instance 여러개를 만들 수 있는데, 이 여러 인스턴스가 공유할 공용 속성 및 함수를 compnion object를 이용해서 만들 수 있는 것이다. java의 static 키워드와 비슷하다.

 

static: 클래스 냄부에서 별도의 영역에 고정적으로 존재하여 인스턴스를 생성하지 않아도 공용으로 사용가능한 속성이나 함수. 의 개념과 비슷하다. 

 

코드예제

fun main(){

  var a = FoodPoll("짜장")
  var b = FoodPoll("짬뽕")

  a.vote()
  a.vote()
  a.vote()
  
  b.vote()
  b.vote()

  println("${a.name} : ${a.count}")
  println("${b.name} : ${b.count}")
  println("총계 : ${FoodPoll.total}")
  
}

class FoodPoll(val name: String){
  companion object{
    var total = 0
  }
  var count = 0

  fun vote(){
    total++
    count++
  }
}

 

출력결과


짜장 : 3
짬뽕 : 2
총계 : 5

 

companion object로 만들어진 속성 total은 5가 나온 모습

 

 

학습 출처

테크과학! DiMo-디모의 Kotlin 강좌 (lesson 16)

(www.youtube.com/playlist?list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN)

구독과 좋아요 !

 

+추가 공부

 

object 표현식 

위에서 배운 object 선언과 달리 object 표현식도 있다. object 표현식은 이름이 없고, 싱글톤도 아니다. obejct표현식이 사용될 때마다 새로운 인스턴스가 생성된다. 즉 우리가 배운 java의 익명 내부 클래스와 비슷한 형태로 사용할 수 있는 것이다.  

 

object