로컬 클래스 즉, 메소드내 에서 inner class 를 사용하는걸 보다가 의문점이 들어서 글을 작성합니다.
메소드에서 파라미터로 받아온 값을 inner class로 사용하려면 final 이라는 키워드가 필요하던데
왜.. 라는 의문이 들어서 찾아보고 있지만 .. 마땅히 이해가 가는 글이 없어서 .. 질문드릴께요 .. ㅠ
검색 결과 (?)
지역클래스의 인스턴스가 소멸된 지역변수를 참조할 수 있기 때문이다.
라는 말을 찾아서 이해해 보려고 하고있는데 ...
좀 이해가 안가네요 .. ㅠ
예시 )
public void executeSql(final String query) throws SQLException{
StatementStrategy stmt = new StatementStrategy() {
@Override
public PreparedStatement makePreparedStatement(Connection c) throws SQLException {
// TODO Auto-generated method stub
PreparedStatement ps = c.prepareStatement(query);
return ps; // 쿼리가 담긴 ps 를 반환
}
};
workWithStatementStrategy(stmt);
}
위와같이 final 이 쓰임 ..