1)디자인패턴-생성패턴_Factory

hams·2023년 3월 2일
1

cs스터디

목록 보기
4/10

1) 생성패턴

  • 추상팩토리
  • 빌더
  • 팩토리 메서드
  • 프로토타입
  • 싱글톤

팩토리 패턴

디자인 패턴 - 팩토리 패턴

팩토리 패턴은 객체를 생성하기 위한 패턴 중 하나입니다. 객체를 생성하는 코드를 별도의 클래스/메서드로 분리하여, 객체 생성 코드의 변경이나 유지보수를 용이하게 합니다.
즉, 객체를 생성하는 코드를 분리하여 클라이언트 코드와 결합도(의존성)을 낮추어 코드를 건드리는 횟수를 최소화 하는 패턴이다!
(클라이언트 코드는 분리시킨 객체 생성 코드를 호출하는 쪽)

팩토리 패턴의 예시

팩토리 패턴은 객체 생성 코드를 별도의 클래스로 분리하므로, 객체 생성 코드의 변경이나 유지보수를 용이하게 할 수 있습니다. 예를 들어, 캐릭터를 생성하는 코드가 있다고 가정하면

public class Character {
    private String name;
    private int level;

    public Character(String name, int level) {
        this.name = name;
        this.level = level;
    }
}

public class GameManager {
    public static void main(String[] args) {
        Character player1 = new Character("Player 1", 10);
        Character player2 = new Character("Player 2", 5);
        // ...
    }
}

만약 캐릭터 객체 생성 코드에 변경이 생긴다면, 모든 코드에서 해당 부분을 일일이 수정해야 한다. 이를 팩토리 패턴을 이용해 개선할 수 있다.

public abstract class CharacterFactory {
    public abstract Character createCharacter(String name, int level);
}

public class PlayerFactory extends CharacterFactory {
    public Character createCharacter(String name, int level) {
        return new Character(name, level);
    }
}

public class GameManager {
    public static void main(String[] args) {
        CharacterFactory factory = new PlayerFactory();
        Character player1 = factory.createCharacter("Player 1", 10);
        Character player2 = factory.createCharacter("Player 2", 5);
        // ...
    }
}

팩토리 패턴을 이용하면, 객체 생성 코드를 별도의 클래스로 분리하여 수정이 용이하다. 또한, 객체 생성 코드를 확장하기 쉬워지므로, 캐릭터 생성 코드 외에도 다른 종류의 객체를 생성하는 코드를 추가하기 쉬워짐!

팩토리 패턴의 장단점

장점

  • 객체 생성 코드를 별도의 클래스로 분리하여, 객체 생성 코드의 변경이나 유지보수를 용이하게 할 수 있다.
    ? 예를들면 여러 클래스가 존재하는 코드에서 객체를 추가/수정하는 일이 발생하면 클래스마다 코드를 전부 변경해줘야하는데 객체 생성한 코드만 수정할 수 있어서 용이하다
  • 오브젝트 생성과정을 클라이언트가 직접 다룰 필요가 없다.
  • 객체 생성 코드를 확장하기 쉬워집니다.

단점

  • 코드가 복잡해질 수 있다.
  • 객체 생성 코드가 많아질수록, 별도의 클래스 작성이 필요하다.

팩토리 메서드 패턴과의 차이점

팩토리 패턴과 팩토리 메서드 패턴은 객체 생성을 위한 패턴으로 매우 유사하지만 팩토리 패턴은 객체를 생성하는 메서드를 별도의 클래스로 분리하여, 객체 생성 코드의 변경이나 유지보수를 용이하게 한다.

팩토리 메서드 패턴은 객체 생성 코드를 Creator 클래스 안에 있는 팩토리 메서드로 분리하며, 이를 상속받은 클래스에서 구체적인 객체 생성 코드를 구현한다. 따라서, 팩토리 패턴은 Creator와 ConcreteCreator를 분리하는 반면, 팩토리 메서드 패턴은 Creator 클래스와 이를 상속받은 클래스를 분리한다.

팩토리 패턴의 활용

추상화 수준이 높은 클래스를 만들기 위해서는 객체 생성과 관련된 로직을 분리하는 것이 좋다. 또한, 객체 생성 코드가 변경될 가능성이 높거나, 객체 생성 코드가 복잡할 경우에도 팩토리 패턴을 사용할 수 있다. 팩토리 패턴은 많은 디자인 패턴에서 사용되며, 가장 기본적인 디자인 패턴 중 하나이다.

0개의 댓글