일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Cocoapods #PrivateRepo #SpecRepo
- 러브자그레브
- 러브스플리트
- Swift #Concurrency #쓰레드
- 대한항공
- 스페인여행
- 스쿠버다이빙
- 푸켓여행
- 스페인광장
- Device 등록
- swiftUI
- 그라나다
- 강릉
- Gradle
- 세비야
- 리브어보드
- 도심공항
- 아시아나
- 크로아티아
- 시밀란
- Concurrency #Swift #Combine
- 라이브러리
- SwiftUI #Skeleton #데이터갱신
- 공기먹는다이버스
- 지팍스페인
- 스플리트
- xcode
- 괌 자유여행
- 연금저축펀드
- cocoapod
- Today
- Total
JEP's Diary
3.자바와는 다른 코틀린의 특징 본문
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 |