개요
Kotlin의 Aamed Arguments를 작성하기 편하게 도와주는 IntelliJ 플러그인을 소개한다.
본론
Kotlin은 정의한 함수를 호출할 때, 함수에 넘길 각 argument 값에 매치시킬 parameter 명을 함께 작성할 수 있다.
Kotlin에서는 이를 Named Arguments 라고 부른다.
함수에서 필요로 하는 paremeter의 개수가 많아질수록 코드를 작성하는 개발자가 값을 잘못 넘겨주는 실수할 가능성이 높아진다.
이를 해결하기 위해 모던 랭귀지는 named arguments 방식을 채택해서, 사용을 권장하도록 변화하고 있다.
참고: Named arguments는 Keyword arguments 로 불리기도 한다.
Python, Swift, Dart, Ruby, C# 등에서도 이 기능을 지원한다.
예시 - named arguments 를 적용하지 않고 함수를 호출
fun withoutNamedArguments() {
val employee = Employee()
employee.setEmployeeData("Clover", 30, 100000000)
}
(예시가 좀 빈약하긴 하지만) `Employee` 라는 클래스의 속성값을 Set 해주는 함수를 호출하는 간단한 예제이다. 예시에서 전달한 argument들은 순서대로 [이름, 나이, 연봉]이다.
위 코드는 `Employee` 클래스의 `setEmployeeData()` 함수에 전달할 argument들의 순서를 알고있지 않으면 코드를 읽고 한 번에 이해할 수 없다. 또한, 순서를 알고 있다고 하더라도 코드를 작성할 당시에 순서를 잘못 입력하는 실수에 보다 쉽게 노출된다.
개선 - named arguments 적용
fun withNamedArguments() {
val employee = Employee()
employee.setEmployeeData(name = "Clover", age = 30, salary = 100000000)
}
함수 호출 코드를 작성할 때, 위처럼 인자명도 함께 명시를 해주면서 코드의 가독성이 향상되고, 순서에 의존하지 않게 되어 버그 예방 효과와 함께 유지보수성 증가라는 이점을 얻을 수 있게 된다.
문제
함수를 호출할 때 인자명을 적어주려면, 인자명을 미리 알고 있어야 한다는 문제점이 있다.
인자명을 모르면, 결국 함수의 정의 부분을 열어보고 이름을 복사해 오거나 해야 한다.
또, 매번 일일이 적어주는 것도 여간 귀찮은 것이 아니다.
Kotlin을 사용한다면 대부분 젯브레인사의 IntelliJ 또는 Android Studio를 사용할 것이다.
아쉽게도 IDE에 내장되어 있는 편의기능은 없는 것으로 확인했다.
그래서 Plugin을 찾아보았고, 다음 글을 발견했다.
질문 글 : intellij support - how to automatically add in named-parameters?
나와 같은 불편함을 겪는 사람이 젯브레인 공식 질문 게시판에 글을 남겼고, 답변글에서 유용한 플러그인을 알게 되었다.
해결 (플러그인 설치 및 사용법)
브라우저로 URL에 직접 접속할 필요는 없고, IntelliJ에서 바로 설치하면 된다.
[ IntelliJ -> "설정" 메뉴 진입 -> "플러그인" 메뉴 -> 검색창에 "kotlin fill class" 입력 ]
설치 후, 우측 하단의 "적용" 버튼까지 눌러주면 바로 사용 가능하다.
플러그인 사용법은 다음과 같다.
1. 함수의 괄호 `( )` 안쪽에 커서를 위치시킨다.
2. (macOS 기준) `⌥ + ⮐` (opt + return) 을 입력한다.
3. 위 이미지처럼 Fill ~~ 로 시작하는 옵션이 추가된 것을 볼 수 있다. 각각 기본값을 어떻게 채워줄지에 대한 분기 옵션이므로, 편한 것을 골라서 사용하면 된다.
다음은 위 이미지의 두 번째 옵션인 "Fill function" 을 선택했을 때 완성되는 화면이다. (모든 값을 기본값으로 세팅해 줌.)
자동으로 argument의 이름을 입력할 수 있도록 완성시켜 주는 것을 볼 수 있다.
++ 추가 팁
일반적으로 argument 개수가 많아지면, 가독성 향상을 위해 한 줄에 argument 하나씩 입력하도록 개행을 해서 코드를 작성하게 된다.
이것도 일일이 엔터를 입력해주는게 여간 귀찮은 게 아니다. 그래서 자동 개행 기능도 존재한다.
1. 함수의 괄호 `( )` 안쪽 아무 곳에나 커서를 위치시킨다.
2. (macOS 기준) `⌥ + ⮐` (opt + return) 을 입력한다. (fill function과 단축키 동일.)
3. "인수를 별도의 줄에 배치"를 선택한다. (영어로는 "put arguments on separate lines")