티스토리 뷰

반응형

회사에서 개발을 하던 중에 문득 컴마(,) 가 눈에 들어왔는데 눈에 들어온 이유는 아래와 같이 사용이 되고 있어서였다.

 

class StudentService(
    private studentRepository: StudentRepository,
)

---
data class StudentDto(
    val name: String,
    val age: Int,
)

이렇게 보면 뭐가 이상하지??🤔 싶을수도 있다.

 

자세히 보면 StudentDto의 val age:Int 부분 마지막에 컴마(,) 가 붙어 있는것을 볼 수 있다.

 

가장 처음 든 생각은 이건 컴파일 에러아닌가?? 왜 인텔리제이가 오류로 잡아 내지 않을까 하는 의문이었다.

 

알고보니 코틀린 1.4 버전 이상부터는 컴마(,) 를 마지막 아규먼트, 마지막 파라미터, when 구문의 마지막 등등 여러곳에 붙일 수 있게 정식적으로 지원하고 있었다.

 

그리고 이러한 컴마(,) 를 트레일링 컴마(Trailing comma)라고 한다.

 

그러면 트레일링 컴마를 지원하고 사용하는 이유는 뭘까??

 

내가 느낀 트레일링 컴마의 장점은 2가지이다.

  1. 파라미터의 순서가 바뀌었을 때 아규먼트 또한 컴마(,) 에 상관없이 파라미터에 맞춰 순서만 바꿔주기만 하면 된다.
  2. git 코드분석 diff에서 컴마(,)가 있고 없고에 따라 수정 범위가 다르게 표시된다.

 

트레일링 컴마 사용여부에 따른 차이

그러면 컴마(,)가 존재하는것과 존재하지 않는것의 차이를 한번 보자.

 

트레일링 컴마를 적용하지 않은 Student1 클래스와 트레일킹 컴마를 적용한 Student2 클래스를 생성

data class Student1(
    val name: String,
    val age: Int
)

data class Student2(
    val name: String,
    val age: Int,
)

 

여기서 학생의 점수(score) 필드를 추가해 보자.

data class Student1(
    val name: String,
    val age: Int,
    val score: Int
)

data class Student2(
    val name: String,
    val age: Int,
    val score: Int,
)

Student1 추가 과정

  1. age 필드 마지막에 컴마(,) 를 추가
  2. val score: Int 코드 추가

 

Student2 추가 과정

  1. val score: Int 코드 추가

 

인텔리제이에서의 수정범위 차이

이렇게 점수(score)필드를 추가한 후에 인텔리제이가 인식하는 수정범위에도 차이가 발생한다.

Student1 경우

  • 25,26번째 두줄이 수정되었다고 인식

 

Student2 경우

  • 32번째 한줄만 추가된걸로 인식

 

git diff를 통한 수정범위 차이

git의 diff를 통해 보게되면 아래 그림과 같이 보인다.

실제로 코드변경의 목적은 score 필드를 추가하는 것인데

 

Student1의 경우는 기존 age 필드가 제거되고, 추가로 age, score 필드 두개가 추가 되는것으로 표현되며

Stuend2의 경우 우리가 의도한 score 필드가 추가된것만을 깔끔하게 표현해주고 있다.

 

사소한 부분일수 있지만 다른 사람이 코드리뷰를 하게 될때는 변화의 목적을 쉽고 분명하게 파악할 수 있다는 장점이 있다.

 

마지막 필드에 컴마(,)를 붙이는게 눈에 익숙하지 않아서 깔끔해 보이지 않았지만

코드리뷰를 자주 하고 있고 트레일링 컴마를 통해 리뷰어들의 시간을 조금이라도 단축시킬 수 있다면 사용을 적극적으로 고려해볼만한 부분인것 같다!!

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함