본문으로 바로가기



디자인 패턴이란?

프로그래밍을 효율적으로 해서 유지보수까지 무난하게 할수있는 코딩 기법이라고 생각하시면 되겠습니다.


오늘은 스트래티지 패턴을 포스팅하겠습니다.


스트래티지 패턴이란?

:하나의 추상적인 접근점을 만들어 접근점에서 서로 교환 가능하도록 하는 패턴


스트래티지 패턴의 예는 과일로 설명하겠습니다.

과일가게안에는 여러 과일이 있고 과일마다 색상,가격 등이 다 다를것입니다.

사과는 500원 바나나는 1000원 이런식으로 ....


이것을 프로그래밍에 접목시켜 본다면 

과일들은 다르지만 크게 봤을때 가격,색상 등 종류에 상관없이 다 가지고 있는 속성이 있습니다.

이것을 공통적인 속성을 과일 인터페이스에 적용을 하고 각 과일들은 그 인터페이스를 상속받은후

각 요청에 맞게 사용하시면 됩니다.   


말 보단 코드를 보시면 이해가 쉬울실껍니다.

크게 5개의 .java 파일이 필요합니다.

Fruit : interface

Apple : 사과(과일)

Banana  : 바나나(과일)

Customer: 소비자

Main : 실행시킬파일


- Fruit.java


1
2
3
4
5
6
7
8
package test;
 
public interface Fruit {
 
    public void Price();                         
    
}
 
cs


과일들의 공통 속성중 하나인 Price를 만들겠습니다.

Price말고도 색상,크기등 속성들을 추가하면 더 많은 기능을 사용할수 있겠죠!!

참고로 만약 인터페이스에 대해 모르신다면 따로 공부를 먼저 하셔야해요



- Apple.java


1
2
3
4
5
6
7
8
9
10
11
package test;
 
public class Apple implements Fruit{
 
    @Override
    public void Price() {
        // TODO Auto-generated method stub                
        System.out.println("500원");
    }
}
 
cs


Fruit 인터페이스를 상속받은후

Price를 재정의 해줍니다.


- Banana.java


1
2
3
4
5
6
7
8
9
10
11
package test;
 
public class Banana implements Fruit{
 
    @Override
    public void Price() {
        // TODO Auto-generated method stub
        System.out.println("1000원");
    }                                               
}
 
cs


Fruit 인터페이스를 상속받은후

Price를 재정의 해줍니다.


- Customer.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package test;
 
public class Customer {
 
    private Fruit ft;
    
    Customer()
    {
        
    }
    
    public void setOrder(Fruit ft)                         
    {
        this.ft = ft; 
    }
    
    public void ShowPrice()
    {
        ft.Price();
    }
    
}
 
cs

- Main.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package test;
 
public class Main {
    
    public static void main(String[] args) {
        
        Customer c = new Customer();
        c.setOrder(new Apple());
        c.ShowPrice();
        
        c.setOrder(new Banana());                         
        c.ShowPrice();
        
    }    
}
 
cs


Customer의 객체는 한개만 만들었지만 즉 , 어떤 과일인지에 따라서 결과값이 다르게 나오죠!!

이것이 바로 스트래티지 패턴입니다.



<출력결과>