밤빵's 개발일지
[TIL]20241102 백틱(`) 활용 본문
코틀린을 공부하면서 자바와는 다른 기능 중 하나로 백틱(`)을 활용한 함수와 변수 이름 정의 방식을 알게 되었다. 자바를 공부할 때는 함수나 변수 이름을 지을 때 특정 문법 규칙을 엄격하게 따랐어야 했다. 하지만 코틀린에서는 백틱을 활용하여 일반적으로 허용되지 않는 예약어를 함수나 변수 이름으로 사용할 수 있고, 심지어 공백이 포함된 테스트 이름도 정의할 수 있다. 이러한 기능은 코드의 가독성을 높이고 테스트 코드 작성 시 의도를 더욱 명확히 전달할 수 있게 해준다.
▶백틱(`)을 활용한 함수와 변수 정의
코틀린에서는 일반적으로 사용할 수 없는 이름이나 예약어를 백틱(`)으로 감싸면 함수나 변수 이름으로 사용할 수 있다. 예를 들어, when, class, in` 같은 코틀린의 예약어는 보통 이름으로 사용할 수 없지만, 백틱을 사용하면 이러한 예약어를 변수나 함수 이름으로 정의할 수 있다. 이를 통해 코드를 작성할 때 더 자연스럽고 의미 있는 이름을 사용할 수 있게 된다.
fun `class`(): String {
return "This is a function named 'class'"
}
fun main() {
println(`class`()) // 출력: This is a function named 'class'
}
→ 위 코드에서 class는 코틀린의 예약어이지만, 백틱으로 감싸면 함수 이름으로 사용할 수 있다. 자바에서는 예약어를 함수나 변수로 사용할 수 없기 때문에 코틀린의 이러한 기능은 유연성과 표현력을 높여준다.
▷백틱을 사용해야 하는 상황
백틱을 사용한 이름은 코드의 가독성을 높이고 표현력을 높여줄 수 있지만, 무분별하게 사용하는 것은 오히려 혼란을 줄 수 있다. 예약어와 충돌하지 않도록 이름을 지정해야 하거나, 특정한 상황에서 코드의 의미를 더 분명히 전달할 필요가 있을 때 유용하게 사용할 수 있다.
▶백틱을 활용한 특수 문자가 포함된 함수와 변수
코틀린에서는 함수나 변수 이름에 일반적으로 허용되지 않는 공백이나 특수 문자를 백틱으로 감싸서 사용할 수 있다. 주로 테스트 코드에서 많이 사용되며, 테스트 함수 이름을 더 명확하게 작성할 수 있다. 예를 들어, 함수 이름을 "should return true when input is valid"처럼 특정 조건을 설명하는 방식으로 작성하면 테스트 의도가 더 분명하게 드러난다.
fun `should return true when input is valid`() {
val result = true // 예시 결과
assert(result)
}
→ 이러한 방식은 테스트 코드에서 함수 이름을 읽기 쉽게 만들어주며, 테스트의 목적과 의도를 명확하게 전달할 수 있어 유용하다. 자바에서는 함수 이름에 공백을 사용할 수 없기 때문에, 테스트 이름을 길게 작성할 때 가독성이 떨어지는 경우가 있었다. 하지만 코틀린의 백틱 기능을 활용하면 이러한 제약 없이 읽기 좋은 테스트 코드를 작성할 수 있다.
▶테스트 코드에서 백틱 활용
테스트 코드를 작성할 때 백틱을 활용하면, 테스트의 목적을 자연어처럼 표현할 수 있다. 이를 통해 코드 리뷰어나 개발자 동료들이 테스트의 의도를 쉽게 파악할 수 있다. 특히, BDD(Behavior-Driven Development) 스타일의 테스트 작성에 유용하다. 예를 들어, 다음과 같은 코드에서 테스트 이름을 백틱으로 감싸 "사용자가 로그인할 때"와 같은 자연스러운 표현을 사용하여 테스트의 목적을 명확하게 전달할 수 있다.
import org.junit.Test
import kotlin.test.assertTrue
class LoginTest {
@Test
fun `should return true when user logs in successfully`() {
val isLoggedIn = true // 예시 결과
assertTrue(isLoggedIn)
}
}
→ 위 코드에서 should return true when user logs in successfully라는 함수 이름은 테스트가 성공할 조건을 명확히 표현하며, 테스트 의도를 더욱 직관적으로 전달할 수 있다. 자바의 JUnit에서는 메서드 이름에 공백을 사용할 수 없기 때문에 메서드 이름을 CamelCase로 작성하거나 밑줄로 구분해야 했다. 코틀린에서는 백틱을 사용해 자연어 형태의 이름을 그대로 함수 이름으로 쓸 수 있어 테스트 코드가 더 명확해진다.
▶자바와 코틀린의 차이점: 백틱을 사용한 이름 정의
자바에서는 변수나 메서드 이름에 공백이나 특수 문자를 사용할 수 없으며, 예약어 역시 이름으로 사용할 수 없다. 따라서 자바에서는 CamelCase 스타일로 이름을 작성하는 것이 일반적이며, 예를 들어 isUserLoggedIn처럼 단어를 이어 붙여 이름을 정하는 방식이 흔하다. 또한, 자바에서는 class, for, if 같은 예약어를 변수나 함수 이름으로 사용할 수 없다. 이로 인해 자바에서는 코드의 표현력에 제약이 있다. 반면, 코틀린에서는 백틱(`)을 사용해 공백이나 특수 문자가 포함된 함수나 변수 이름을 작성할 수 있다. 이를 통해 예약어를 이름으로 사용할 수도 있고, 테스트 함수의 이름을 자연어처럼 표현해 코드의 가독성을 높일 수 있다. 특히, 테스트 코드 작성 시 이러한 기능이 유용하며, 코드 리뷰 과정에서 테스트의 목적을 명확히 파악하는 데 도움을 준다. 코틀린의 백틱 기능 덕분에 더 유연하고 직관적인 코드 작성이 가능하다.
fun `this is a function with spaces in its name`() {
println("Hello, Kotlin!")
}
fun `class`() {
println("Using a reserved keyword as a function name")
}
→ 위와 같은 방식은 테스트 코드에서 특히 유용한데, 테스트 이름을 좀 더 자연어에 가깝게 작성함으로써 코드의 가독성을 높일 수 있다. 예를 들어, should return true when user logs in successfully 같은 이름을 백틱을 사용해 그대로 함수 이름으로 작성할 수 있어, 테스트의 의도를 명확하게 전달하는 데 큰 도움이 된다.
▶요약 비교
특징 | 자바(Java) | 코틀린(Kotlin) |
백틱(`) 사용 | 불가능 | 가능 |
예약어 사용 가능 여부 | 불가능 | 백틱으로 감싸면 사용 가능 |
함수/변수 이름에 공백 포함 | 불가능 | 백틱으로 감싸면 사용 가능 |
주로 사용되는 이름 스타일 | CamelCase | CamelCase 또는 백틱(`)을 사용한 자연어 스타일 |
코틀린의 백틱 기능은 테스트 코드 작성 시 특히 유용하며, 코드 가독성과 의도 전달력을 높여주는 중요한 차별점으로 작용한다. 자바에서는 이러한 기능이 제공되지 않기 때문에, 코틀린의 백틱 사용이 코드 표현력 측면에서 더 유연하다고 할 수 있다.
▶백틱 사용 시 주의사항
백틱을 사용하면 코드가 더욱 직관적이고 읽기 쉬워지지만, 잘못 사용하면 오히려 혼란을 줄 수 있다. 예를 들어, 지나치게 긴 함수 이름이나 변수 이름에 백틱을 남용하면 가독성이 떨어질 수 있다. 또한, 너무 많은 특수 문자를 포함하는 이름은 오히려 코드의 의도를 파악하기 어렵게 만들 수 있다. 따라서 백틱은 꼭 필요한 상황에서만 신중하게 사용하는 것이 좋다.
코틀린의 백틱(`)을 활용한 함수 및 변수 정의 방식은 자바와 비교해 유연하고 표현력 있는 코드를 작성할 수 있게 해준다. 특히, 테스트 코드에서 백틱을 사용하여 자연어처럼 테스트 이름을 작성하면 테스트의 의도가 더 명확히 드러나고 코드 가독성이 높아진다. 자바에서는 불가능했던 이러한 표현 방식은 코틀린의 장점 중 하나이며, 더욱 읽기 쉬운 코드를 작성하는 데 유용하다. 코드를 작성할 때 백틱을 적절히 활용해 함수와 변수 이름을 직관적으로 정의하는 것은 코틀린을 사용하는 개발자에게 매우 유익한 기술이 될 것이다.
'Kotlin' 카테고리의 다른 글
[TIL]20241104 Named Argument (1) | 2024.11.04 |
---|---|
[TIL]20241103 Immutable Collection & Mutable Collection (6) | 2024.11.03 |
[TIL]20241101 타입 시스템 (0) | 2024.11.01 |
[TIL]20241031 Operator Overloading (4) | 2024.10.31 |
[TIL]20241030 try-with-resources & use (4) | 2024.10.30 |