Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- bean
- entity graph
- git
- JPA
- kafka
- Streams
- QueryDSL
- Kotlin
- mirror maker2
- CodePipeline
- consumer
- spring kafka
- mysql
- PAGING
- topic생성
- offsetdatetime
- CI
- transactionaleventlistener
- producer
- centos7
- Spring JPA
- ECS
- K8s
- Kubernetes
- spring
- API
- Entity
- AWS
- Spring Data JPA
- cd
Archives
- Today
- Total
Yebali
Kotlin의 클래스 본문
코틀린에서 클래스를 다루는 방법을 알아보자
속성 값만 있는 클래스
class Person (var name: String, val birthYear: Int)
fun main() {
var a = Person("예바리", 2004)
}
내부에 매서드 없이 속성 값만 가지는 클래스는 위에서 처럼 선언될 수 있다.
하지만 대부분의 클래스는 매서드를 함께 가지고 있다.
멤버 함수를 갖는 클래스
class Person (var name: String, val birthYear: Int) {
fun introduce() {
println("안녕하세요. ${birthYear}년생 ${name}입니다")
}
}
fun main() {
var a = Person("예바리", 2004)
a.introduce()
}
멤버 함수는 클래스의 {} 내부에 위치하고, 함수를 선언해주는 형식과 동일하다.
클래스의 생성자
기본 생성자
위의 예시 class Person (var name: String, val birthYear: Int) 부분에서
(var name: String, val birthYear: Int) 부분이 기본 생성자를 정의하는 부분이다.
클래스의 속성을 선언함과 동시에 기본 생성자를 선언하는 방법이다.
보조 생성자
기본 생성자외의 보조 생성자는 아래와 같이 만들 수 있다.
중요한 점은 보조 생성자를 만들 때에는 반드시 기본 생성자를 호출하여 속성들을 초기화해주어야 한다.
방법은 보조 생성자 뒤에 ': this(속성 1, 속성 2,...)'을 사용하면 된다.
class Person (var name: String, val birthYear: Int) {
// 보조 생성자
constructor(name:String) : this(name, 1997) {
println("보조 생성자가 사용되었습니다.")
}
fun introduce() {
println("안녕 날 소개하지.")
}
}
fun main() {
var a = Person("예바리") // 보조 생성자를 사용해서 인스턴스 생성
a.introduce()
}
Init 매서드
Kotlin에서는 'init'이라는 특수한 함수를 클래스 내부에 정의하여 생성자를 통해 인스턴스가 만들어질 때 특정 동작을 할 수 있도록 지원한다.
class Person (var name: String, val birthYear: Int) {
init {
println("안녕하세요. ${this.birthYear}년생 ${this.name}입니다")
}
fun introduce() {
println("안녕 날 소개하지.")
}
}
fun main() {
var a = Person("예바리", 2004)
a.introduce()
}
클래스의 상속
Kotlin은 기본적으로 클래스의 상속이 막혀있다.
클래스를 상속하기 위해서는 'open' 키워드를 사용해야한다
// 상속을 위해 'open' 키워드 사용
open class Animal(var type:String, var name:String, var age:Int) {
fun introduce() {
println("타입:${type}, 이름:${name}, 나이:${age}")
}
}
class Dog (name:String, age:Int) : Animal ("dog", name, age) {
fun bark() {
println("멍멍")
}
}
class Cat (name:String, age:Int) : Animal ("cat", name, age) {
fun meow() {
println("야옹")
}
}
fun main() {
var a = Dog("별이", 5)
var b = Cat("냥이", 7)
a.introduce()
a.bark()
b.introduce()
b.meow()
}
슈퍼 클래스의 속성을 서브 클래스에서 다시 선언할 수 없기 때문에 Cat에는 'name'과 'age' 앞에 'var/val' 키워드를 사용하지 못한다.
서브 클래스로 인스턴스를 생성할 때에는 아래와 같이 반드시 슈퍼 클래스의 생성자를 호출해주어야 한다.
class Cat (name:String, age:Int) : Animal ("cat", name, age)
'Kotlin' 카테고리의 다른 글
Kotlin의 제너릭 (0) | 2021.09.22 |
---|---|
Kotlin의 Static Method와 Function (0) | 2021.09.22 |
Kotlin의 스코프 함수 (0) | 2021.09.22 |
Kotlin의 고차함수와 람다함수 (0) | 2021.09.22 |
Kotlin의 추상화와 인터페이스 (0) | 2021.09.22 |