Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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
Tags more
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20241022 단일 표현식 함수(Single-Expression Function) 본문

Kotlin

[TIL]20241022 단일 표현식 함수(Single-Expression Function)

최밤빵 2024. 10. 22. 16:57

코틀린은 함수 작성 방식이 자바와는 다른 점이 많다. 그 중 하나가 단일 표현식 함수(Single-Expression Function)로, 단일 표현식 함수는 함수의 본문을 단 한 줄로 간결하게 작성할 수 있어 코드의 가독성을 높이고, 중복을 줄일 수 있는 코틀린의 중요한 기능이다.

 

▶단일 표현식 함수란?

단일 표현식 함수는 이름 그대로 함수의 본문이 하나의 표현식(expression)으로 구성된 함수를 말한다. 코틀린에서는 return 키워드를 생략하고 등호(=)를 사용하여 바로 반환 값을 지정할 수 있다. 이를 통해 함수의 길이가 짧아지고, 불필요한 코드를 줄일 수 있다.

 

▶단일 표현식 함수 작성법

기본적인 함수는 블록({})을 사용하여 작성되지만, 단일 표현식 함수는 다음과 같은 형태로 작성할 수 있다.

fun 함수명(매개변수: 타입): 반환타입 = 표현식

→ = 뒤에 오는 표현식이 함수의 반환 값이 된다. 여기서 반환 타입은 생략할 수도 있으며, 코틀린이 컴파일 시점에 타입을 추론할 수 있다.

 

▶단일 표현식 함수 예시

▷두 수의 합을 계산하는 단일 표현식 함수

// 일반 함수 작성 방식
fun add(a: Int, b: Int): Int {
    return a + b
}

// 단일 표현식 함수 작성 방식
fun add(a: Int, b: Int) = a + b

→ 이처럼 단일 표현식 함수를 사용하면 블록을 생략하고, 간결하게 코드를 작성할 수 있다. 반환 타입도 생략하여 컴파일러가 Int 타입으로 추론하도록 할 수 있다.

 

▷문자열 길이를 반환하는 단일 표현식 함수

fun getLength(str: String): Int = str.length

→ 위 함수는 주어진 문자열의 길이를 반환하는 함수이다. = 뒤에 str.length라는 표현식만으로 함수의 동작을 간결하게 나타내고 있다.

 

▶단일 표현식 함수의 장점

  • 가독성: 함수가 간단한 경우 코드가 짧고 명확해지기 때문에 읽기가 훨씬 쉽다.
  • 유지보수성: 불필요한 return 키워드나 블록을 제거함으로써 더 직관적인 코드를 작성할 수 있다.
  • 중복 제거: 코틀린의 단일 표현식 함수는 반복되는 코드를 줄이고, 필요한 표현식만 남겨 코드의 중복을 최소화한다.

▶단일 표현식 함수에서 타입 추론

코틀린의 강력한 기능 중 하나는 타입 추론이다. 단일 표현식 함수는 반환 타입을 명시적으로 적지 않아도 컴파일러가 함수의 반환 타입을 자동으로 추론한다. 

fun square(x: Int) = x * x

→ 위 함수는 Int 값을 받아서 제곱한 결과를 반환한다. 반환 타입을 명시적으로 작성하지 않았지만, 코틀린 컴파일러가 Int 타입으로 추론해준다.

 

▶블록과 단일 표현식 함수의 비교

함수의 동작이 단순한 경우에는 단일 표현식 함수가 유용하지만, 복잡한 로직을 처리할 때는 여전히 블록을 사용하는 것이 적절하다. 복잡한 연산이나 여러 줄의 코드를 포함하는 함수는 블록으로 작성하는 것이 코드 가독성과 유지보수에 더 좋을 수 있다.

 

▷복잡한 로직을 처리하는 함수

fun computeValue(a: Int, b: Int): Int {
    val result = a * b
    return result - a
}

→ 이 함수는 단일 표현식 함수로 변환하기에 부적합하다. 여러 줄에 걸쳐 연산이 이루어지기 때문에 블록을 사용하는 것이 가독성에 더 유리하다.

 

▶단일 표현식 함수와 람다 표현식의 차이

코틀린에서 함수형 프로그래밍을 지원하기 때문에 람다 표현식단일 표현식 함수를 혼동할 수 있다. 두 개념 모두 간결한 함수 작성에 도움을 주지만, 근본적으로 다르다.

  • 단일 표현식 함수는 일반 함수의 간결한 표현으로, 클래스의 멤버 함수나 최상위 수준에서 작성할 수 있다.
  • 람다 표현식은 함수형 프로그래밍에서 익명 함수로, 함수 자체를 값으로 취급할 수 있다.
// 단일 표현식 함수
fun add(a: Int, b: Int) = a + b

// 람다 표현식
val addLambda: (Int, Int) -> Int = { a, b -> a + b }

→ 이처럼 단일 표현식 함수는 명시적으로 함수 이름을 부여하는 반면, 람다 표현식은 이름 없이 사용할 수 있는 것이 큰 차이점이다.

 

▶실용적인 단일 표현식 함수 사용 사례

실제로 프로젝트나 애플리케이션을 개발할 때 단일 표현식 함수는 자주 사용된다. 

  • 데이터 처리에서 변환 작업: 단일 표현식 함수는 데이터를 가공하거나 변환하는 간단한 로직을 처리할 때 유용하다.
fun toUpperCase(str: String) = str.uppercase()

 

  • 조건부 반환: 조건에 따라 값을 반환하는 함수를 단일 표현식으로 작성할 수 있다.
fun max(a: Int, b: Int) = if (a > b) a else b

→ 이와 같이 조건문을 사용해 값을 반환하는 로직도 단일 표현식으로 간결하게 표현할 수 있다.

  • 유틸리티 함수: 자주 사용되는 유틸리티 함수를 단일 표현식으로 만들어 가독성과 재사용성을 높일 수 있다.
fun isEven(num: Int) = num % 2 == 0

→ 이 함수는 입력된 값이 짝수인지 판별하는 간단한 유틸리티 함수이며, 복잡하지 않은 로직에 단일 표현식을 사용함으로써 코드 가독성이 높아진다.

 

코틀린의 단일 표현식 함수는 간결함과 직관성을 추구하는 코드를 작성하는 데 중요한 도구이다. 람다 표현식과는 다르게 함수에 이름을 명시하고, 간단한 로직을 표현할 때 유용하다. 또한 데이터 처리, 조건문 반환, 유틸리티 함수 등 다양한 실용적인 경우에 널리 사용될 수 있다. 이러한 함수를 올바르게 사용하면 코드 가독성을 높이고, 개발 속도를 더욱 빠르게 할 수 있다는 점에서 유익하다. 단순한 로직에서는 불필요한 코드를 줄이고, 가독성을 높일 수 있는 장점이 있다. 다만, 함수의 로직이 복잡해지면 여전히 블록을 사용하는 것이 적합할 수 있다. 코드를 간결하게 작성하는 것은 개발자의 중요한 역량 중 하나이며, 코틀린의 단일 표현식 함수는 이를 실현하는 좋은 방법이다. 

'Kotlin' 카테고리의 다른 글

[TIL]20241021 문자열 자르기&합치기  (6) 2024.10.21
[TIL]20241020 Type Alias  (1) 2024.10.20
[TIL]20241019 비트연산자  (0) 2024.10.19
[TIL]20241018 const 와 val의 차이  (0) 2024.10.19
[TIL]20241017 const  (0) 2024.10.17