Open hj-k66 opened 7 months ago
p228에서 내부 클래스에서 외부의 변수를 사용할 때는 외부 변수는 반드시 final로 선언해줘야 한다고 합니다. jdk 1.8부터는 자동으로 인스턴스 변수에 final을 붙여 주기 때문에 생략할 수 있다는데, 왜 반드시 final로 선언해줘야하는지 궁금합니다.
public void add(User user) throws SQLException { class AddStatement implements StatementStrategy { @Override public PreparedStatement makePreparedStatement(Connection c) throws SQLException { //2. SQL을 담은 Statement를 만든다. PreparedStatement ps = c.prepareStatement( "insert into users(id,name,password) values(?,?,?)" ); ps.setString(1, user.getId()); ps.setString(2, user.getName()); ps.setString(3, user.getPassword()); return ps; } } StatementStrategy st = new AddStatement(); jdbcContextWithStatementStrategy(st); }
아래 링크에 관련 내용이 잘 정리되어 있어 첨부합니다. https://madplay.github.io/post/effectively-final-in-java
요약해보면,
effective final
final
p228에서 내부 클래스에서 외부의 변수를 사용할 때는 외부 변수는 반드시 final로 선언해줘야 한다고 합니다. jdk 1.8부터는 자동으로 인스턴스 변수에 final을 붙여 주기 때문에 생략할 수 있다는데, 왜 반드시 final로 선언해줘야하는지 궁금합니다.