정적 메소드 패턴이란?
객체 생성의 역할을 하는 클래스 메서드라는 의미로 요약할 수 있다.
아래 트랙에서 Cars의 객체를 생성할 때 아래와 같이 Cars를 for문을 돌면서 추가하고 있다.
아래와 같이(정적메소드 패턴을 사용하지 않을 시) 작성 하게 될때 한눈에 보기도 불편하다고 생각 될 것이다. 적정 메소드 패턴을 사용하게 되면, 생성할때 진행해야될 로직들이 내부로 숨은 것을 볼 수 있고, from을 통해서 cars가 만들어진다는 것을 의미적으로도 볼 수 있다.
public class Track {
private static final String DELIMITER = ",|:";
private int attemptCount;
private Cars cars;
public Track(final String carNames, final int attemptCount) {
this.attemptCount = attemptCount;
createCars(carNames);
}
private void createCars(final String carNames) {
List<Car> cars = new ArrayList<>();
for (String carName : carNames.split(DELIMITER)) {
cars.add(new Car(carName));
}
this.cars = new Cars(cars);
}
Java
복사
•
다음과 같이 변경
public class Track {
private int attemptCount;
private Cars cars;
public Track(final String carNames, final int attemptCount) {
this.attemptCount = attemptCount;
createCars(carNames);
}
private void createCars(final String carNames) {
this.cars = Cars.from(carNames);
}
Java
복사
public class Cars {
private static final String DELIMITER = ",|:";
private List<Car> cars;
public Cars(List<Car> cars) {
this.cars = cars;
}
public static Cars from(final String carNames) {
List<Car> cars = new ArrayList<>();
for (String carName : carNames.split(DELIMITER)) {
cars.add(new Car(carName));
}
return new Cars(cars);
}ㅇㅇ
Java
복사
이외에 장점들이 더 있지만, 직접 사용해보고, 장점을 느꼈을 때 추가로 적도록 하겠다.
정적 팩토리 메서드 네이밍 컨벤션
•
from : 하나의 매개 변수를 받아서 객체를 생성
•
of : 여러개의 매개 변수를 받아서 객체를 생성
•
getInstance | instance : 인스턴스를 생성. 이전에 반환했던 것과 같을 수 있음.
•
newInstance | create : 새로운 인스턴스를 생성
•
get[OtherType] : 다른 타입의 인스턴스를 생성. 이전에 반환했던 것과 같을 수 있음.
•
new[OtherType] : 다른 타입의 새로운 인스턴스를 생성.