1 분 소요



전략 패턴(strategy pattern)은 정책 패턴(policy pattern)이라고도 불린다. 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고, 전략이라고 하는 캡슐화한 알고리즘을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴.

컨텍스트 : 동일한 내용의 코드뭉치라고 생각하면 좋을 것 같다. 상황, 맥락,문맥을 말하고 개발자가 어떤 작업을 완료하는데 필요한 모든 관련 정보를 말한다.

우리가 어떤 것을 살 때, 결제수단을 선택할 수 있다. ex) naverpay,kakaopay …

밑의 예제는 결제 방식의 전략만 바꿔서 두 가지 방식으로 결제하는 것을 구현하였다.



import java.util.ArrayList;
import java.util.List;

interface PaymentStrategy {
    public void pay(int amout);
}

class KakaoPay implements PaymentStrategy {
    private String name;
    private String cardNumber;
    private String cvv;
    private String expiry;

    public KakaoPay(String nm,String cn,String cv,String ex) {
        this.name = nm;
        this.cardNumber= cn;
        this.cvv = cv;
        this.expiry = ex;
    }

    @Override
    public void pay(int amount) {
        System.out.println(amount+" paid using KakaoPay");
    }

}

class NaverPay implements PaymentStrategy {
    private String naverID;
    private String naverPW;

    public NaverPay(String id, String pw) {
        this.naverID=id;
        this.naverPW=pw;
    }

    @Override
    public void pay(int amount) {
        System.out.println(amount+" paid using NaverPay");
    }
}

class Item {
    private String name;
    private int price;
    public Item(String name, int cost ) {
        this.name = name;
        this.price = cost;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }
}

class Cart {
    List<Item> items;

    public Cart() {
        this.items = new ArrayList<Item>();

    }
    public void addItem(Item item) {
        this.items.add(item);
    }

    public void removeItem(Item item) {
        this.items.remove(item);
    }

    public int total() {
        int sum=0;
        for (Item item : items) {
            sum += item.getPrice();
        }
        return sum;
    }

    public void pay(PaymentStrategy paymentMethod) {
        int amout = total() ;
        paymentMethod.pay(amout);
    }
}

public class study {

    public static void main(String[] args) {

        Cart ct = new Cart(); 

        Item A = new Item("A",1000);
        Item B = new Item("B",2000);

        ct.addItem(A);
        ct.addItem(B);

        ct.pay(new KakaoPay("yangjennie","1234","1234","1/1"));
        ct.pay(new NaverPay("yang","1234"));


    }

}




출처 : 면접을 위한 CS 전공노트

댓글남기기