클래스 변수의 복잡한 초기화에 사용되며 클래스가 처음 로딩될 때 한번만 수행된다.
class A {
static {}
}
class B {
{}
}
정적 팩토리 메서드가 무엇인지 간단히 알아보도록 하겠다.
객체 생성의 역할을 하는 클래스 메서드이다.
생성자와 다르게 이름을 가질 수 있기 때문에 객체 생성의 목적을 표현할 수 있다.
인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있다.
// Basic, Intermediate, Advanced는 Level을 상속한다.
public class Level {
public static Level of(int score) {
if (score < 50) {
return new Basic();
} else if (score < 80) {
return new Intermediate();
} else {
return new Advanced();
}
}
}
아래와 같이 생성자 내부를 드러내지 않고 다른 객체로 변형할 수 있다.
public class CarDto {
private String name;
private int position;
pulbic static CarDto from(Car car) {
return new CarDto(car.getName(), car.getPosition());
}
}
// Car -> CatDto 로 변환
CarDto carDto = CarDto.from(car);