클래스
기본형태
- class 클래스이름(변수)
- class를 이용하여 객체(인스턴스)를 생성한다.
- 객체들이 자주 사용하는 공통적인 기능은 클래스 내에 함수로 넣어준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Person(var name: String, val birthYear: Int){
fun introduce(){
println("안녕하세요, ${birthYear}년생 ${name}입니다. ")
}
}
fun main(args: Array<String>) {
var a = Person("Smart", 2000)
var b = Person("Note", 1997)
println("안녕하세요, ${a.birthYear}년생 ${a.name}입니다.")
b.introduce()
}
|
참고사항
중괄호 {}
- 처음 kotlin 출력함수를 배웠을 때 println 안에 $a 이런 식으로 출력했는데, 여기서는 {}를 사용하였다. 이는 println이 문자로 오인하지 않도록 방지하는 역할을 한다.
- 출력함수 내에서 바로 계산한 값을 출력하거나, 특수문자 출력 시에도 사용된다.
1
2
3
4
5
6
| var a = 1
var b = 2
println("$a + $b = ${a+b}")
println("${'"'}Hello${'"'}")
println(""\Hello\"")
|
생성자
정의
- 새로운 인스턴스를 만들귀 위해 호출하는 특수한 함수
- 위의 var a = Person(“Smart”, 2000)와 같이 클래스의 인스턴스를 만들어 반환받을 수 있다.
기능
- 인스턴스의 속성 초기화
- 인스턴스 생성시 구문 수행 (위의 class Person으로는 이 기능을 수행할 수 없다.)
init 함수
- parameter나 반환형이 없는 특수한 함수로, 생성자를 통해 인스턴스가 만들어 질 때 호출되는 함수이다.
기본형태
1
2
3
4
5
6
7
8
9
10
| class Person(var name: String, val birthYear: Int){
init{
println("${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
}
fun introduce(){
println("안녕하세요, ${birthYear}년생 ${name}입니다. ")
}
}
|
참고사항
this
- 인스턴스 자신의 속성이나 함수를 호출하기 위해 클래스 내부에서 사용되는 키워드
생성자 종류
- 기본 생성자 + 보조 생성자
- 기본 생성자: 클래스를 만들 때 기본으로 선언
- 보조 생성자: 필요에 따라 추가적으로 선언, 인스턴스 생성시 편의 제공하거나 추가적인 구문을 수행하는 기능 (상속과 유사)
보조 생성자 형태
- constructor(속성): this(속성초기화){}
- 반드시 기본 생성자를 통해 속성을 초기화해야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| class Person(var name: String, val birthYear: Int){
init{
println("${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
}
constructor(name: String): this(name, 1999){
//this(기본 생성자가 필요로 하는 parameter 초기화)
println("보조 생성자가 사용되었습니다. ")
}
fun introduce(){
println("안녕하세요, ${birthYear}년생 ${name}입니다. ")
}
fun main(args: Array<String>) {
var a = Person("Smart", 2000)
var b = Person("Note", 1997)
println("안녕하세요, ${a.birthYear}년생 ${a.name}입니다.")
b.introduce()
var d = Person("Developer")
var e = Person("Engineer")
d.introduce()
}
|
위 코드와 같이 1999년생인 사람을 아주 많이 생성할 때 기본 생성자를 이용해서 항상 모든 속성을 수동으로 초기화하는 것은 비효율적이다. 이 때 constructor, 즉 보조 생성자를 이용하여 효율적으로 코드를 작성할 수 있다.