JEP's Diary

3.자바와는 다른 코틀린의 특징 본문

Development/Kotlin

3.자바와는 다른 코틀린의 특징

지으니88 2019. 1. 1. 18:09

3.자바와는 다른 코틀린의 특징


클래스

: 자바와 달리 코틀린에서만 제공하는 클래스에 대한 기능을 살펴본다.


- 데이터 클래스

: 자료를 구성하는 프로퍼티만 선언하면 컴파일러가 equals(), hashCode(), toString()함수를 자동으로 생성해준다.

data class Person(val lastName: String, val firstName: String)

: 객체.toString()을 하면 다음과 같은 출력결과가 나온다.

val me = Person("John", "Park")
println("Me = $me" )
Me = Person(lastName=John, firstName=Park)


- 한정클래스(sealed class)

: enum 클래스를 확장한 개념으로, 각 종류별로 하나의 인스턴스만 생성되어 있는 enum클래스와 달리 인스턴스를 여러개 생성 할 수 있다.

: 한정클래스를 상속하는 클래스는 일반적으로 클래스 내에 중첩하여 선언한다.

: 한정클래스는, 한정클래스로 정의된 클래스의 종류에 따라 다른 작업을 처리해야 할때 유용하다.

sealed class MobileApp(val os: String) {
class Android(os:String, val packageName: String) : MobileApp(os)
class iOS(os:String, val bundleId: String) : MobileApp(os)
}


- 프로퍼티의 사용자 지정 Getter/Setter

: 프로퍼티에는 내부에 저장된 필드 값을 가져오거나 설정 할 수 있도록 Getter 및 Setter를 내부적으로 구현하고 있으며, 이는 단순히 필드의 값을 반환하거나 설정하도록 구현되어있다.

: 사용자 지정 Getter/Setter를 사용하면 프로퍼티에서 Getter, Setter의 구현을 원하는 대로 변경 할 수 있다

: 특정 객체의 값에 따른 다양한 정보를 속성 형태로 제공할 때 유용하다

class Person2(val age:Int, val name: String) {
val adult: Boolean
get() = age >= 19

var address: String = ""
set(value) {
// 인자로 들어온 문자열에서 0~9범위의 값만 address에 저장
field = value.substring(0..9)
}
}



함수

- 명명된 인자 

: 명명된 인자를 사용하면 함수를 호출할 때 매개변수의 순서와 상관없이 인자를 전달 할 수 있고, 각 인자에 어떤값이 전달되는지 쉽게 구분이 된다.

// 명명된 인자
fun drawCircle(x: Int, y: Int, radius: Int) {

}
drawCircle(0,0,0)
drawCircle(x = 0, y = 0, radius = 0)
drawCircle(0,0, radius = 0)

: drawCircle 함수에 대해서 위와같이 호출이 가능하다.


- 기본 매개변수

: 함수의 매개변수에 기본 값을 지정할 수 있으며, 이를 기본 매개변수라 한다.

// radius : 기본매개변수
fun drawCircle2(x: Int, y: Int, radius: Int = 25) {

}
drawCircle2(0,0)


- 단일 표현식 표기 

: Unit 타입을 제외한 타입을 반환하는 함수라면 함수의 내용을 단일 표현식으로 사용하여 정의할 수 있다.

// 일반함수 표기
fun returnIntTest() : Int {
return 21 * 2
}
// 단일 표현식 표기
fun returnIntTest2() : Int = 21 * 2
fun returnIntTest3() = 21 * 2


- 확장함수

: 확장함수를 사용하여 상속없이 기존 클래스에 새로운 함수를 추가할 수 있다.

: 확장함수를 추가할 대상 클래스는 리시버타입이라 부르며, 리시버타입 뒤에 점(.)을 찍고 그 뒤에 원하는 함수의 형태를 적는 방식으로 정의한다.

: 확장함수 구현부에서는 this를 사용하여 클래스의 인스턴스에 접근 할 수 있고, 이를 리시버객체라고 부른다.

// String에 withPostfix 함수를 추가
private fun String.withPostfix(postFix: String) = "$this$postFix"
fun String.withBar() = this.withPostfix("Bar")
val result = "test"
Assert.assertEquals("testBar", result.withBar())



참고: 차세대 안드로이드 개발자를 위한 커니의 코틀린


'Development > Kotlin' 카테고리의 다른 글

Sealed Class  (0) 2022.02.25
코틀린 헷갈리는 함수 정리. let, apply, run, with  (0) 2019.02.02
2. 자바와 비교해 보는 코틀린 2  (0) 2018.11.11
2. 자바와 비교해 보는 코틀린 1  (0) 2018.08.31
1.코틀린이란?  (0) 2018.08.25