하나의 메소드 내에서 의미있는 단위의 로직을 추출해서 클래스로 캡슐화하는 방식
캡슐화한 클래스의 메소드를 직접 호출하는 방식으로 리팩터링
class Main {
void method() {
//do something
}
}
class Delegator {
void doSomething() {
//do something
}
}
class Main {
Delegator delegator = new Delegator();
void method() {
delegator.doSomething();
}
}
책에서는 첫 번째로 UserDao 의 insert 로직을 InsertJdbcTemplate 클래스로 추출했음
공통 기능을 상위 클래스에서 구현하고, 변화가 생기는 부분만 추상 메소드로 선언
// 계좌의 잔액을 확인하는 로직 및 단위는 구현 은행/국가 별로 다를 수 있다
abstract class Account {
public Long printMoney() {
return getMoney() + getUnit();
}
// 잔액 반환
abstract Integer getMoney();
// 화폐 단위 반환
abstract String getUnit():
}
책에서는 쿼리를 PreparedStatement 로 변경하고, 쿼리를 실행하는 부분은 공통적인 로직으로 두고
createQuery(), setValues() 메소드는 추상메소드로 선언
익명 클래스는 같은 스코프에 있는 변수값을 사용(참조)할 수 있다.
abstract class Person {
abstract String getName();
}
class Main {
public void method(String name) {
Person person = new Person() {
@Override
String getName() {
return name;
}
};
}
}