StrategyPattern을 사용하면, 바뀌는 전략에 따라 매번 클래스를 생성해야하는 번거로움이 있다.
이 부분을 어떻게 해결해야 할지 고민해보자.

로컬 클래스 사용

1.로컬 클래스는 선언된 메소드 내에서만 사용할 수 있다. 어차피 사용될 전략 클래스가
add메소드뿐이라면, 이렇게 사용하기전에 바로 정의해서 쓰는 것도 나쁘지 않다. 덕분에 클래스 파일이 하나 줄었고
add()메소드 안에서 PreparedStatement 생성 로직을 함께 볼 수 있으니 코드를 이해하기도 좋다.
로컬클래스의 다른 장점

로컬클래스는 클래스가 내부 클래스이기 때문에 자신이 선언된 곳의 정보에 접근 할 수 있다는 점이다.

내부 메소드는 자신이 정의된 메소드의 로컬변수에 직접 접근 할 수 있기때문에
add()메소드의 user변수를 AddStatement내부클래스가 바로 사용 할 수 있다.
따라서 , AddStatement의 생성자 부분이 없어진다.

이렇게 내부적으로 접근하기 위해서는 전제조건으로 add()메소드의 user파라미터는 final로 선언이 되어야한다.
익명 내부 클래스 사용

1. 익명 내부 클래스는 선언과 동시에 오브젝트를 생성.
클래스를 재사용할 필요가 없고, 구현한 인터페이스 타입으로만 사용할 경우에 유용하다.
변수에 담아두지 않고,

바로 클래스 생성 인스턴스를 넘김
deleteAll메소드도 익명클래스로 적용