2020. 3. 3. 19:00ㆍ소프트웨어 공학/코딩 공부
본 내용은 kotlinlang.org 공식 문헌과 기타 자료들을 바탕으로 필자가 학습한 내용을 정리한 것입니다.
필자의 허락 없이 글을 상업적 목적으로 인용, 수정, 재배포할 수 없습니다. 내용의 오류 지적은 덧글로 받습니다.
독자가 객체지향 프로그래밍을 알고 있다는 가정하에 이 글을 작성하였다. 클래스와 객체의 개념 설명은 기회가 되면 따로 작성할 생각이다. 1
클래스 형태
class Main {
// Body
}
// No body
class Empty
class 키워드로 클래스를 선언한다. 몸체가 없으면 중괄호(braces)를 생략할 수 있다.
생성자
class Human constructor(name: String) { // 초기 생성자
val myName = name // 프로퍼티 (Java 멤버 변수와 유사함)
fun greet() {
println("Hello! I'm $myName.")
}
}
fun main() {
val person = Human("Lazo") // Human 인스턴스 생성
person.greet() // 출력: Hello! I'm Lazo.
}
생성자는 초기 생성자와 부수 생성자로 분류되며, constructor 키워드로 선언할 수 있다. 2
초기 생성자는 클래스 헤더에 위치하며, 어노테이션이나 접근 제어자가 없다면 키워드를 생략할 수 있다. 3
인스턴스(객체)를 생성할 때, Java처럼 new 키워드를 붙이면 안된다는 점을 상기하자.
생성자 위임
class Pet(val name: String) { // 초기 생성자
var owner: String? = null
// 부수 생성자. this(name)으로 초기 생성자를 위임
constructor(name: String, owner: String) : this(name) {
this.owner = owner
}
}
fun main() {
val pet1 = Pet("Doggy")
val pet2 = Pet("Kitty", "Lazo")
// 이름: Doggy, 주인: null
println("이름: ${pet1.name}, 주인: ${pet1.owner}")
// 이름: Kitty, 주인: Lazo
println("이름: ${pet2.name}, 주인: ${pet2.owner}")
}
부수 생성자는 반드시 초기 생성자를 위임(Delegate)해야 한다. 인스턴스 반환값을 초기 생성자로 넘긴다고 생각하면 될 것 같다. 콜론(:) 뒤에 this 키워드로 생성자를 참조하여 넘긴다.
생성자의 파라미터 앞에 val 또는 var 키워드가 붙으면, 해당 변수는 클래스의 프로퍼티(Property)가 된다.
초기화 블록
class Machine {
init {
println("Initialize")
}
constructor(x: Int) {
println("Constructor 1")
}
constructor(x: Int, y: Int) : this(x) {
println("Constructor 2")
}
}
fun main() {
Machine(1, 1)
}
/*
* 콘솔 출력결과:
* Initialize
* Constructor 1
* Constructor 2
*/
초기화 블록은 클래스가 객체를 만들 때 최초로 실행하는 코드이다. 초기 생성자보다도 먼저 실행된다.
생성자 접근제어
class MasterKey private constructor() { /* ... */ }
싱글톤 패턴이나 기타 여러가지 상황에 따라 생성자 접근을 제한시킬 필요가 있다.
생성자 키워드 앞에 접근 제어자(Access Modifier)를 붙이면 해결할 수 있다. 참고로 모든 개체들은 기본적으로 접근 제한이 public으로 풀려있는 점을 주의할 것.
'소프트웨어 공학 > 코딩 공부' 카테고리의 다른 글
3-3. Kotlin 클래스 추상화 (0) | 2020.03.04 |
---|---|
3-2. Kotlin 클래스 상속 (1) | 2020.03.03 |
3. Kotlin 클래스 (0) | 2020.03.03 |
2. Kotlin 자료형 (1) | 2020.03.02 |
1. Kotlin 언어 개요 (2) | 2020.03.02 |