함수
1) 함수의 body 가 block
// 반환 타입 없음
fun start(){
println("Hello World!")
}
// 반환 타입 있음
fun validString(string: String?): Boolean {
return !string.isNullOrBlank()
}
2) 함수 body가 식 (Single expression)
fun double(x: Int): Int = x * 2
// 반환 타입 생략 가능
fun double(x: Int) = x * 2
3) top-level 함수
- 클래스 안에 함수를 넣지 않아도 됨
- main 함수
4) 클래스 멤버 함수
- 클래스 내부에 정의
fun main(args: Array<String>){
val home = Home()
home.start()
}
class Home{
val store = Store()
fun start(){...}
}
함수 Overriding
- 슈퍼 클래스의 함수 재정의
- 키워드 open + override 사용
open class Shape {
open fun draw(){...}
fun fill(){...}
}
class Circle() : Shape(){
override fun draw(){...}
}
Circle의 하위 클래스 에서 draw() 함수를 재정의 하지 못하게 하기 위해서는
final 키워드 사용
class Circle() : Shape() {
final override fun draw(){...}
}
Superclass, Subclass 호출 순서
open class Shape(vertexCount: Int){
init{
println("Superclass 초기화, vertexCount=$vertexCount")
}
open fun draw() {
println("Drawing a shape")
}
}
class Rectangle(vertexCount: Int) : Shape(vertexCount){
init{
println("subclass 초기화, vertexCount=$vertexCount")
}
override fun draw() {
super.draw()
println("Drawing a rectagle")
}
}
- init 블럭은 클래스의 인스턴스가 생성될 때 호출 됨
fun main(args: Array<String>){
val rectangle = Rectangle(4)
rectangle.draw()
}
- 메인에서 다음과 같이 호출 시 실행 순서는
프로퍼티 Overriding
- superclass의 프로퍼티 재정의
- 키워드 open + override
open class Shape {
open val vertexCount: Int = 0
}
class Rectangle : Shape() {
override val vertexCount = 4
}
open class Shape {
open var vertexCount: Int = 0 // mutalbe property
}
class Rectangle : Shape() {
override val vertexCount = 4 // immutalbe property 변경 -> Error
}
open class Shape {
open val vertexCount: Int = 0 // immutalbe property
}
class Rectangle : Shape() {
override var vertexCount = 4 // mutalbe property 변경 가능
}
728x90
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] Package, 가시성 변경자(public,private,internal,protected) (0) | 2022.09.11 |
---|---|
[Kotlin] 클래스 toString/equals/hashCode, data class (0) | 2022.09.10 |
[Kotlin] 클래스 상속, 추상화, 인터페이스 (0) | 2022.09.09 |
[Kotlin] Operator, conditions & loop (0) | 2022.09.06 |
[Kotlin] Variables & Types (0) | 2022.09.06 |