본문 바로가기

자바

19. 패턴을 이용한 객체 지향 이해하기(스트레티지)

두번째로 스트레티지 패턴을 알아보자. 스트레티지 패턴은 알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든 것이다. 스트레티지 패턴을 이용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 쉽게 말해 어떤 객체가 가지고 있는 기능을 추상화 하여 언제든지 적용할 수 있게 만드는 것이다. 실무에서 많이 사용하는 패턴이다. 내가 짠 코드를 다른 사람이 다시 짤 때 Super클래스를 추상화 시켜 Derived클래스에서 꼭 필요한 함수들을 빼먹지 않고 사용할 수 있게 할 수 있는 방법으로도 사용된다.

 

package com.Strategy;

public abstract class Robot { //상속 받는 클래스가 꼭 필요한 기능을 빼먹지 않도록 추상화한다.
	public Robot() {}
	
	public void RobotWalk() {
		System.out.println("걸을 수 있습니다.");
	}
	
	public void shape() {
		System.out.println("팔 다리 몸통이 있습니다.");
	}
	
	public abstract void RobotRun();
	
	public abstract void RobotFly();
	
	public abstract void RobotMissile() ;
	
	public abstract void RobotLaser();
}

 

package com.Strategy;

public class LowRobot extends Robot {
	public LowRobot() {
		RobotWalk();
		RobotRun();
		RobotFly();
		RobotMissile();
		RobotLaser();
		shape();
		System.out.println();
	}
	
	public void RobotRun() {
		System.out.println("뛸 수 없습니다.");	
	}
	
	public void RobotFly() {
		System.out.println("날 수 없습니다.");
	}
	
	public void RobotMissile() {
		System.out.println("미사일 쏠 수 없습니다.");
	}
	
	public void RobotLaser() {
		System.out.println("레이저 쏠 수 없습니다.");
	}
}

 

package com.Strategy;

public class StandardRobot extends Robot {
	public StandardRobot() {
		RobotWalk();
		RobotRun();
		RobotFly();
		RobotMissile();
		RobotLaser();
		shape();
		System.out.println();
	}
	
	public void RobotRun() {
		System.out.println("뛸 수 있습니다.");	
	}
	
	public void RobotFly() {
		System.out.println("날 수 있습니다.");
	}
	
	public void RobotMissile() {
		System.out.println("미사일 쏠 수 없습니다.");
	}
	
	public void RobotLaser() {
		System.out.println("레이저 쏠 수 없습니다.");
	}
}

 

package com.Strategy;

public class SuperRobot extends Robot {
	public SuperRobot() {
		RobotWalk();
		RobotRun();
		RobotFly();
		RobotMissile();
		RobotLaser();
		shape();
		System.out.println();
	}
	
	public void RobotRun() {
		System.out.println("뛸 수 있습니다.");	
	}
	
	public void RobotFly() {
		System.out.println("날 수 있습니다.");
	}
	
	public void RobotMissile() {
		System.out.println("미사일 쏠 수 있습니다.");
	}
	
	public void RobotLaser() {
		System.out.println("레이저 쏠 수 있습니다.");
	}
}

 

package com.Strategy;

public class Main {
	public static void main(String[] args) {
		LowRobot LR = new LowRobot();
		StandardRobot SR = new StandardRobot();
		SuperRobot SupR = new SuperRobot();
	}
}