일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 토큰갱신
- retorift
- TDD 개발 방법론
- Parameter specified as non-null is null
- 다트 테스트
- 테스트 주도 개발론
- 안드로이드
- 플러터 테스트
- 배움순서
- dart
- 플러터
- pubspec
- dart test
- 8시간 삽질
- 에러 메시지를 잘보자 ^^
- SOLID 원칙
- Flutter
- pubspec.yaml
- widget test
- 2D graphics library
- permission_handler
- 인코딩방지
- 안드로이드를 위한
- Android
- 2D 그래픽 라이브러리
- 객체 지향 설계
- refresh 토큰
- Refresh Tocken
- 다트
- Same parameter
Archives
- Today
- Total
Landroid
[Creational Patterns] 추상 팩토리 (Abstract Factory) 본문
추상 팩토리 패턴은 객체의 생성과 조합을 캡슐화하여 일관된 객체를 생성하고 프로그램 구조에 영향을 크게 받지 않는 패턴입니다.
간단하게 Dart로 만든 클래스들을 가지고 설명하겠습니다.
참고로 scottt2.github.io/design-patterns-in-dart/ 에서 가져와서 수정한 코드입니다.
더보기
Dart를 선택한 이유
객체지향의 대표주자인 자바는 Dart와 문법적으로 그렇게 큰 차이는 없습니다.
있다면 자바의 interface와 다트의 mixin정도 있겠네요 ^^.
그리고 자바에 불필요하게 붙는 코드들로 인해 코드 보기 어려울 수 있다고 판단해서
Dart로 설명하려 합니다.
abstract class Edible {
void grab();
}
class Chicken implements Edible {
void grab() {
print("I Love Chicken!!!!");
}
}
class Cake implements Edible {
void grab() {
print("so Sweat!");
}
}
-----------------------------------------------------------------------------------------------
abstract class Drinkable {
void pour();
}
class Beer implements Drinkable {
void pour() {
print("Pouring a delicious beer!");
}
}
class Coffee implements Drinkable {
void pour() {
print("Pouring a refreshing coffee!");
}
}
-----------------------------------------------------------------------------------------------
abstract class RestaurantFactory {
Drinkable createDrink();
Edible createSomethingToEat();
}
class Pub implements RestaurantFactory {
Drinkable createDrink() {
return Beer();
}
Edible createSomethingToEat() {
return Chicken();
}
}
class CoffeeShop implements RestaurantFactory {
Drinkable createDrink() {
return Coffee();
}
Edible createSomethingToEat() {
return Cake();
}
}
-----------------------------------------------------------------------------------------------
void main() {
String mood = "sleepy";
RestaurantFactory destination;
switch(mood) {
case "sleepy": destination = CoffeeShop(); break;
case "done": destination = Pub(); break;
default: print("I only have two moods...");
}
destination.createDrink().pour();
destination.createSomethingToEat.grab();
}
추상 팩토리를 사용하는 이유는
만약 Edible과 Drinkable을 메뉴별로 Factory 클래스로 만들면 연관성이 있는 클래스를 생성하기 어렵습니다.
대신 Pub이나 CoffeeShop 클래스와 같이 가게별로 Factory 클래스를 만들면 클래스를 연관성 있게 생성할 수 있습니다.
- Pub: Chicken과 Beer객체를 생성하는 팩토리 클래스
- CoffeeShop: Cake, Coffee 객체를 생성하는 팩토리 클래스
이렇게 여러 종류의 객체를 생성할 때 객체들 사이의 관련성이 있는 경우 라면 각 종류별로 별도의 Factory 클래스를 사용하는 것보단 관련 객체들을 일관성 있게 생성하는 Factory 클래스를 사용하는 것이 추상 팩토리 패턴의 핵심입니다.
Comments