Search
📌

파라미터 final

태그
JAVA
파라미터 앞에 final을 붙이고, 클래스의 인스턴스 변수 앞에도 final을 붙이고 왜 그런거지? 라는 의문이 들었다. 뭐 파라미터 앞에 붙이는 건 메서드 내부에서 변경이 불가능하도록하는것 까지는 알고 있었다. 그런데 굳이? 라는 생각이 들었다.
결론부터 말하자면 코딩스타일이고, 이전의 잔재 같은 느낌이 조금 들었다. 명시적이고 방어적인 코드가 좋다는 점에서 해당 final은 어느 정도 쓸모가 있어 보인다.
// 원래 알고 있던 사실 public void modifyParam(String str) { str = "Changed"; // 가능 (원래 값 변경) } public void modifyParamFinal(final String str) { str = "Changed"; // 컴파일 오류! }
Java
복사
/** 찾아 보니 자바 8이전에는 이런식으로 사용해야했다고 한다. 하지만 자바8 이후에는 암시적으로 final을 인식한다. */ public void runTask(final String message) { Runnable task = new Runnable() { @Override public void run() { System.out.println(message); // message가 final이어야 가능 } }; new Thread(task).start(); }
Java
복사