SSAFY11th-book-study / book-study

SSAFY 11기 6반의 '토비의 스프링 스터디'
0 stars 0 forks source link

[3.3.2] 로컬 클래스로 StatementStrategy 전략 클래스 정의 시 외부 변수 사용 #28

Open hj-k66 opened 7 months ago

hj-k66 commented 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);
    }
gmelon commented 7 months ago

아래 링크에 관련 내용이 잘 정리되어 있어 첨부합니다. https://madplay.github.io/post/effectively-final-in-java

요약해보면,