코틀린에서의 class의 개념에 대해 알아보려고 한다
클래스는 한글 그대로 class 키워드를 사용하여 클래스를 선언 및 정의할 수 있다.
class는 헤더와 바디로 나눠볼수가 있는데 헤더는 매개변수 , 기본 생성자를 사용할 수 있다.
class의 body는 옵션이고 사용하지 않는다면 중괄호{} 생략 가능 .
또한 코틀린의 class는 기본 생성자와 , 보조 생성자가 따로 존재한다.
기본 생성자는 1개만 가질 수있지만 보조생성자는 여러개를 가질수 있고
기본 생성자는 클래스의 이름 뒤에 작성하고 , 보조 생성자는 Java에서 쓰듯이 작성한다.
class Person (){ } fun main(args: Array<String>) { var a = Person(); }
위의 코드는 Person이라는 클래스와 매개변수를 아무것도 받지 않는 기본 생성자를 정의하여
main()에서 객체를 생성하는 방법이 다
※ Kotlin에서는 자바와 다르게 객체 생성 시 new 키워드를 사용하지 않는다.
class Person (name : String ){ var name = ""; init { this.name = name; } } fun main(args: Array<String>) { var a = Person("Yunjin"); }
class Person (name : String ){ var name = name; } fun main(args: Array<String>) { var a = Person("Yunjin"); }자바에서는 생성자 영역에서 변수를 바로 초기화할 수 있지만 기본 생성자가 클래스 옆에 붙기 때문에 초기화를 어떻게 해야 할지 몰라서 init {}이라는 영역에서 초기화를 해야 한다. (두 번째 소스처럼 init 없이 직접 하여도 된다. ) 자바에서 하듯이 this.field로 접근이 가능하다 그렇다면 한두 개짜리를 짜도 계속 init을 써야 하는 것일까? 이러한 생각에 코틀린에서는 좀 더 색다른 방법을 제공합니다.
class Person (var name : String ) fun main(args: Array<String>) { var a = Person("Yunjin"); print(a.name) }
바로 다음과 같이 매개변수의 앞에 변수 선언하듯 var or val를 이용하여 선언하는 방식이다
이러한 방법으로 하게 되면 지역변수 생성과 동시에 초기화가 되기 때문에 main에서 객체. field로 접근이 가능합니다.
기본 생성자와 보조 생성자 같이 쓰는 방법
기본 생성자와 보조 생성자를 같이 쓰기 위해서는 기본 생성자가 있다면 보조 생성자에서 기본 생성자를 상속을 받아서 사용을 해야 한다
이렇게 설명하는 것보다 코드를 보고 직접 이해하는 게 빠를 거 같아 코드로 올리겠습니다.
class Person (var name : String ){ constructor(name:String , age : Int) : this(name){ } }
다음 코드는 보조 생성자와 기본 생성자를 같이 쓴 클래스의 예제입니다.
보면 String Type의 매개변수를 전달받는 기본 생성자가 고 그다음 name과 age를 전달받는 보조 생성자가 있습니다.
위에서 말씀드렸듯이 기본 생성자와 보조 생성자를 같이 쓰려면 상속을 받아서 사용하시면 됩니다 this(name) 처럼 말이죠
주의할 사항은 기본생성자에 있는 것을 상속받으면 해당되는 매개변수가 보조 생성자에도 있어야 합니다 .
class Person { var name : String = ""; var age : Int? = null; constructor( name : String ){ this.name = name; } constructor(name:String , age : Int){ this.name = name; this.age = age; } }
기본 생성자 없이 보조 생성자만 사용한다면 다음과 같이 사용할 수 있을것 같습니다 .
단점은 보조 생성자에서는 기본 생성자처럼 매개변수애서 바로 선언 및 초기화를 할 수 없습니다 .
'Kotlin' 카테고리의 다른 글
[Kotlin] Data Classes (0) | 2019.06.19 |
---|---|
[Kotlin] 상속 (0) | 2019.06.19 |
[Kotlin] Package , Return and Jumps (0) | 2019.06.19 |
[Kotlin] 코틀린 Control Flow (0) | 2019.06.19 |
[Kotlin] 코틀린의 기본 타입 ( Java와의 비교 ) (0) | 2019.06.19 |
댓글