Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • grafana
  • 코딩테스트
  • 파이썬
  • Wil
  • webflux
  • Docker
  • kotlin
  • 백준
  • 프로그래머스
  • 프리코스
  • SQL
  • 코틀린 인 액션
  • 에라토스테네스의 체
  • Android
  • 안드로이드
  • ec2
  • 문자열
  • 코틀린
  • rsocket
  • til
  • java
  • 다이나믹 프로그래밍
  • kibana
  • 레포지토리
  • elasticsearch
  • MariaDB
  • enum
  • 내림차순
  • 우아한테크코스
  • spring

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

Android/Kotlin

[Kotlin] 함수, Superclass, Subclass

2022. 9. 10. 00:57

함수

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
    'Android/Kotlin' 카테고리의 다른 글
    • [Kotlin] Package, 가시성 변경자(public,private,internal,protected)
    • [Kotlin] 클래스 toString/equals/hashCode, data class
    • [Kotlin] 클래스 상속, 추상화, 인터페이스
    • [Kotlin] Operator, conditions & loop
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바