컴퓨터 언어/코틀린

[Kotlin] 코틀린 클래스 1

훈츠 2020. 2. 13. 15:08
반응형

안녕하세요. 훈츠 입니다. 이번 시간에는 객체 지향에서 이야기 하는 클래스에 대해 이야기 해보려고 합니다. 사실 코틀린은 객체 지향 언어 + 함수형 언어의 장점을 흡수한 언어 입니다. 그럼 코틀린에서는 어떤 부분이 다른지 한번 들어가 보시죠. 

클래스 구성 

  • 속성 : 고유의 값 
  • 함수 : 기능 구현 
클래스란 값과 함수의 묶음 입니다. 

코틀린 클래스 종류 

  • class : 아무 것도 붙이지 않으면 일반 class
  • data class : 앞에 data 를 선언하면 data class가 됩니다. 
    • 데이터 클래스의 생성자는 1개 이상의 속성 값을 가져야 합니다. 
    • 데이터 클래스의 속성을 선언 할때는 var 또는 val으로 선언 해야합니다. 
    • 데이터 클래스는 abstract, open, sealed, inner 를 붙일수 없습니다. 
    • 데이터 클래스는 상속 받을수 없습니다. 
//class
class Person(name:String, age:String)

//data class
data class Person(name:String, age:String)
data 클래스는 데이터 보관 목적으로 만든 클래스 입니다. 자바에서는 선언 해주어야 했던 toString(), hashCode(), equals(), copy() 메소드를 자동으로 만들어 줍니다. 

인스턴스 

클래스로 인스턴스를 만들어 냅니다. 예시로 클래스를 붕어빵만드는 기계라고 생각 하고, 붕어빵을 인스턴스라고 보시면 적절할것 같습니다. 

fun main() {

    var jon = Person("jon", "38")
    jon.introduce()
    //실행 결과 "안녕하세요. 저는 jon 이고, 38 살 입니다."

}

class Person(var name:String, var age:String){

    fun introduce(){
        println("안녕하세요. 저는 ${name} 이고, ${age} 살 입니다.")
    }
}

초기화 함수 init

생성자가 호출 될때, init 함수는 입력 이나 반환형이 없으며, 한번만 실행 됩니다. 

fun main() {

    var jon = Person("jon", "38")
    jon.introduce()
    jon.introduce()
    //실행 결과 "안녕하세요. 저는 jon 이고, 38 살 입니다."

}

class Person(var name:String, var age:String){
    init {
        print("안녕하세요 ")
    }
    fun introduce(){
        println("저는 ${name} 이고, ${age} 살 입니다.")
    }
}

 안녕하세요 저는 jon 이고, 38 살 입니다. 저는 jon 이고, 38 살 입니다. <- 결과값 보시면 "안녕하세요" 한번만 실행 된걸 확인하실수 있습니다. 

보조 생성자 c onstructor 

생성자를 호출하면, 클래스의 인스턴스를 만들어 반환 받을수 있습니다. 생성자의 기능은 인스턴스의 속성을 초기화 하고, 인스턴스 생성시 필요한 구문을 수행 합니다. 보조생성자는 필요에 따라 추가적으로 선언 합니다.

fun main() {

    var jon = Person("jon", "38")
    jon.introduce()
    var sam = Person("sam")
    sam.introduce()

}

class Person(var name:String, var age:String){
    init {
        println("안녕하세요. ")
    }

    constructor(name:String):this(name,"40")

    fun introduce(){
        println("저는 ${name} 이고, ${age} 살 입니다.")
    }
}
 보조 생성자는 이렇게 기본값을 셋팅할때 이용하면 좋습니다. 
반응형