함수 파라미터의 final 키워드

주노·2023년 2월 16일
5

기술부채 알쓸신잡

목록 보기
6/16
post-thumbnail

서론

우테코 5기 강의를 듣다가 코치님의 코드에서 한가지 낯선 방식을 발견했다.

public String Something(final int a, final int b) {
    ...
}

함수의 파라미터에 final 키워드가 들어가는 것을 처음봐서 왜 이렇게 선언하고 어떠한 이점이 있는지 궁금하니 한번 알아보자.

생각해보기

final 키워드는 변경 불가능하다 라는 말에 핵심을 두고있다.
매개변수가 변경 불가능 하면 어떤 특징이 있을까?

장점

파라미터로 받아오는 인자에 대한 값 재할당을 금지하는 이점이 있다.

매개변수를 final로 선언함으로써 인자로 들어온 값에 대한 데이터의 정합성을 유지 할 수 있다.

단점

파라미터가 많아질수록 가독성을 해칠 수도 있다는 단점을 생각해볼 수도 있다.

public String method(final int x, final int y, final int point...) {

    ...
    
    return result;
}

IntelliJ 설정

IntelliJ에서 메소드 추출 및 기타 코드 자동 생성 기능 사용 시 자동으로 final 키워드를 붙여줄 수 있도록 설정할 수 있다.

메소드 추출 단축키 : CMD + Option + M

고찰

성능에 대한 고찰

극히 일부지만 final로 선언되면 아주 보이지 않을정도의 미미한 성능 개선 정도는 이룰 수 있지 않을까? 라고 생각한다.

이팩티브 자바의 final 키워드를 설명하는 내용 중 새로 생성된 인스턴스를 동기화 없이 다른 스레드로 건네도 문제없이 동작하게끔 보장하는 데 필요하다. 라는 문구가 있다.

그렇다면 final로 생성된 인스턴스는 위 문구에서 말하는 동기화라는 과정을 반드시 생략하기 때문에 성능상 이점을 가질 수 있다고 말할 수 있는것인지? 궁금하다 🤔

해당 내용은 아직 jvm의 동작 방식 및 GC의 효율성과 같은 깊은 부분에서 정답을 찾을 수 있을것 같은데 아직 학습하지 못해 자세한 내용은 기술부채로 남겨 둘 것 같다.

혹시나 어째서 성능 개선이 일어나는지 알고 계시는분은 설명 부탁드립니다...


final 파라미터에 대한 나의 생각

현재 클린코드 및 코드 컨벤션을 보며 느끼는 바는 하나의 메소드에 파라미터가 3개 이상을 넘기지 않도록 구성하는 일 밖에 없었다.

아직 3개 혹은 4개 이상의 파라미터를 가진 메소드를 작성해볼일이 없어서(?) 파라미터가 길어진다는 단점을 부각시키기에는 애매한 부분이 있는 것 같다.

만약 정말로 실무에서의 파라미터를 분리하기 어려운 상황이 겪어본다면 final을 붙이지 않는것을 더욱 선호할 지도 모르지만, 아직은 파라미터에 final을 붙였을 때 오는 데이터의 정합성 유지라는 장점에 더욱 초점을 맞춰서 보게 되는 것 같다.

Reference

https://hudi.blog/intellij-final-keyword/

profile
안녕하세요 😆

9개의 댓글

comment-user-thumbnail
2023년 2월 16일

좋은 글이네요🔥
Q. final이 변경 불가능하다는 것은 불변하다는 의미로 작성해주신건가요?

2개의 답글
comment-user-thumbnail
2023년 2월 17일

주노 글 엄청 잘 쓰네요~
final에 대해 더 배우고 갑니다👍

1개의 답글
comment-user-thumbnail
2023년 2월 19일

엄청난 열정맨 주노주노! 멋져요~

답글 달기
comment-user-thumbnail
2023년 2월 26일

또 다른 장점으로는, 예측 가능한 코드가 될 것 같아요.
final 키워드로 재할당을 막으면 중간에 함수가 다른 흐름으로 흘러가는 것을 어느 정도 예방해줄 수 있기 때문입니다!

1개의 답글