코틀린을 공부하다 보니 클래스와 함수 부분에서 자바와의 차이점이 생각보다 많았다.
헷갈리지 않게 정리해보려고 한다.
1. 클래스(Class) / 프로퍼티(Property)
public class Animal(
private String name;
//setter
public void setName(String name) {
this.name = name;
}
//getter
public String getName() {
return name;
}
)
흔히 자바에서 사용하던 코드이다. 자바에서는 클래스와 함께 getter/setter를 사용할 경우 변수가 많아질수록 코드가 길어지고 복잡해질 수 있다. 하지만, 코틀린에서는 간단하게 표현이 가능하다.
class Animal(val name: String)
자바에서는 필드와 접근자(getter/setter))를 묶어 프로퍼티라고 부르고, 코틀린은 프로퍼티를 언어 기본 기능으로 제공한다.
코틀린 프로퍼티는 자바의 필드와 접근자 메소드를 완전히 대신한다. 예를 들어 위의 코드에서 getName과 setName이라는 접근자를 제공하는 자바 클래스를 코틀린에서 사용할 때 name이라는 프로퍼티를 사용할 수 있다는 것이다.
2. 람다 함수(Lamda Expression)
람다 함수는 이름이 없어도 함수 역할을 하는 익명 함수 형태이다.
특징
- 코트의 간결함을 목적으로 자주 이용
- 화살표 표기법 사용(->)
- 고차 함수에서 인자로 넘기거나 결괏값으로 변환 가능
규칙
- 람다 함수는 항상 {}으로 감싸서 표현
- {} 안에 -> 표시가 있고 -> 왼쪽은 매개변수, 오른쪽은 함수 내용
- 매개변수 타입을 선언해야 하며 추론할 수 있을 때는 생략 가능
- 함수의 반환값은 함수 내용의 마지막 표현식
//일반 함수 예시
fun sum(x1 : Int, x2 : Int) : Int {
return x1+x2
}
//람다 함수 예시
val sum1 = {x1:Int, x2:Int -> x1+x2}
fun main(args: Array<String>) {
val result1 = sum(10,20)
}
위의 예시처럼 일반 함수와 비교했을 때 코드가 간결해지는 것을 알 수 있다.
또한, run() 함수를 사용하면 람다 함수를 정의하자마자 바로 실행할 수 있다.
만약, 매개변수가 없는 함수를 정의할 때는 ->의 왼쪽을 생략할 수 있다.
val sum2 = {-> 10 + 20}
//위와 같은 경우는 아예 ->를 생략할 수 있다.
val sum2 = {10+20}
함수 내용이 여러 문장일 때 반환값은 마지막 중의 결괏값이다.
3. 고차 함수(High-Order Function)
고차 함수는 매개변수로 함수를 전달받거나 함수를 반환하는 함수이다.
//Int 타입 매개변수 하나와 반환값이 Int 타입인 함수
for hoFun(x1:Int, argFun:(Int) -> Int) {
val result = argFun(10)
println("x1 : $x1, someFun1 : $result")
}
//함수 대입
hoFun(10, {x->x*x})
위 함수는 고차 함수 내에서 매개변수로 함수 타입을 선언하고 고차 함수를 호출하는 곳에서 람다 함수를 전달하는 구조이다. 위처럼 매개변수로 함수를 전달받거나 함수를 반환하면 해당 함수를 고차 함수라고 한다.
고차 함수를 사용하면 코드를 더 간결하게 다듬고, 중복을 없애고 더 나은 추상화를 구축할 수 있다.
4. 인라인 함수(Inline Function)
인라인 함수는 함수 선언 앞에 inline 예약어를 추가한 함수로 컴파일 단계에서 정적으로 포함되므로 실행 때 함수 호출이 발생하지 않는다.
inline fun hoFunTest(argFun : (x1:Int, x2:Int) -> Int) {
argFun(10, 20)
}
fun main(args: Array<String>) {
hoFunTest {x1,x2 -> x1+x2}
}
inline을 추가하여 함수를 정의하는 것과 그렇지 않은 것은 실행결과는 같지만, 런타임 때 함수 호출이 줄고 성능에 도움이 된다.
5. 참고
코틀린 (프로그래밍 언어) - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 코틀린패러다임다중 패러다임 (객체 지향, 함수형, 명령형, 선언형, 범용, 블록, 반영, 병행)설계자젯브레인즈개발자젯브레인즈발표일2011년 7월 22일(11년 전)(201
ko.wikipedia.org
Kotlin Programming Language
kotlinlang.org
Kotlin과 Android | Android 개발자 | Android Developers
Kotlin으로 Android 앱을 작성할 수 있습니다. Kotlin은 표현력이 뛰어나고 간결하며 강력합니다. 가장 좋은 점은 자바 프로그래밍 언어 및 기존 Android 런타임과 상호 운용이 가능하다는 점입니다.
developer.android.com
- 서적 - 깡샘의 코틀린 프로그래밍