반응형
함수 선언 (Function declaration)
코틀린은 함수를 자바보다 더 짧고 간단하게 생성할 수 있습니다.
기본적으로 fun 함수명 (파라미터): 리턴타입 의 형식을 따릅니다.
fun add(a: Int, b: Int, c: Int): Int {
return a + b + c
}
리턴을 생략하고 표기 할 수 있습니다.
fun add(a: Int, b: Int, c: Int): Int = a + b + c
타입추론으로 리턴타입 또한 생략 가능합니다.
fun add(a: Int, b: Int, c: Int) = a + b + c
클래스 선언 (Class declaration)
코틀린은 class 앞에 public 키워드의 생략이 가능합니다.
자바와 다르게 생성자에 들어가는 파라미터의 기본 값을 지정할 수 있습니다.
init은 초기화 블럭이며, constructor는 오버로딩을 사용하기 위해 사용하는 보조생성자입니다.
fun main() {
var a = Person("이태민", 1993)
var b = Person("최민호")
var c = Person("김기범")
}
// 클래스 속성 선언과 동시에 생성자 생성
// var/val 표기하지 않을 시 dafault로 val로 선언
class Person(var name: String, val birthYear: Int) {
// init: 파라미터나 반환값이 없는 기본생성자 함수
// 초기화 시 코드를 추가하여 유효성 검사 등 기능을 추가
init {
println("안녕하세요, ${birthYear}년에 태어난 ${name}입니다.")
}
// constructor: 인스턴트 생성시 추가적인 구문을 수행하는 보조생성자
// 반드시 기본생성자를 통해 속성을 초기화를 해야함
// 기본 생성자 생성 후 보조생성자가 생성됨
constructor(name: String) : this(name, 1991) {
println("보조생성자가 사용되었습니다.")
}
}
// 클래스 생성자에 초기값을 이런식으로 지정도 가능
class Person2(var name: String = "이름없음", var age: Int) {
}
클래스 상속 (Inheritance)
코틀린은 상속 금지가 기본이기 때문에 class 키워드 앞에 open을 사용해 상속가능으로 변경합니다.
null을 사용하기 위해서는 타입 뒤에 ?(물음표)를 넣어 nullable type으로 선언합니다.
fun main() {
var a = Animal("콩떡", 5, "개")
var b = Dog("초코", 9)
a.introduce()
b.introduce()
b.bark()
var c = Cat("루이", 1)
c.meow()
}
// 코틀린은 상속 금지가 기본
// open 키워드를 사용하여 클래스를 상속가능으로 변경
open class Animal(var name: String = "", var age: Int, var type: String) {
fun introduce() {
println("저는 $type $name 이고, ${age}살 입니다.")
}
}
// 서브 클래스가 생성될 때 슈퍼클래스 생성자가 함께 호출 되어야함
// var, val을 붙이면 속성으로 선언되므로 파라미터로 넘기기 위해 선언 키워드를 붙이지않음
class Dog(name: String, age: Int) : Animal(name, age, "개") {
fun bark() {
println("멍멍")
}
}
class Cat(name: String, age: Int) : Animal(name, age, "고양이") {
fun meow() {
println("야옹")
}
}
오버라이딩 (overriding)
코틀린에서는 상속을 받고 슈퍼 클래스에 open으로 정의되어있는 함수를 재정의하는 오버라이딩을 지원합니다.
서브 클래스에서 상속 후 override 키워드를 사용하여 재정의합니다.
fun main() {
var t = Tiger()
t.eat()
}
open class Animal2 {
// open: 서브 클래스에서 오버라이딩 허용
open fun eat() {
println("음식을 먹습니다.")
}
}
class Tiger : Animal2() {
override fun eat() {
println("고기를 먹습니다")
}
}
스터디 코드는 GitHub 프로젝트에서 확인하실 수 있습니다.
반응형
'Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 기초 #1 (0) | 2022.02.01 |
---|