상속 관계에 있는 두 클래스에서 상위 클래스에서는 객체 생성을 위한 인터페이스를 정의하고, 하위 클래스가 객체 생성에 대한 구체적인 내용을 구현하는 패턴이다.
장점
- 상위 클래스가 객체 생성 방식을 알 필요가 없어지므로 유연성을 갖게 된다.
→ 새로운 객체 생성 방법을 갖는 하위 클래스를 추가하더라도, 상위 클래스는 관여하지 않아도 된다.- 객체 생성 로직은 하위 클래스에서만 구현되므로, 유지보수성이 증가한다.
→ 특정 객체 생성 방식에 대한 수정이 필요한 경우, 해당하는 하위 클래스의 로직만 변경하면 되므로 유지보수성이 증가한다.
enum CoffeeType {
LATTE,
ESPRESSO
}
abstract class Coffee {
protected String name;
public String getName() {
return name;
}
}
class Latte extends Coffee { //하위 클래스
public Latte() {
name = "Latte";
}
}
class Espresso extends Coffee { //하위 클래스
public Espresso() {
name = "Espresso";
}
}
class CoffeeFactory { //상위 클래스
public static Coffee createCoffee(CoffeeType type) {
switch (type) {
case LATTE:
return new Latte();
case ESPRESSO:
return new Espresso();
default:
throw new IllegalArgumentException("Invalid coffee type: " + type);
}
}
}
public class Main {
public static void main(String[] args) {
Coffee coffee = CoffeeFactory.createCoffee(CoffeeType.LATTE);
System.out.println(coffee.getName()); // 객체의 이름을 출력 (여기서는 "Latte")
}
}
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
for (Integer item : list) {
System.out.println(item);
}
}
}