GDJ 8/23

Yongha Hwang·2023년 8월 23일
0

Web & JAVA

1. 다형성

  • exam
  • 매개변수가 추가 될 때 마다 메서드를 계속 추가해줘야 하는 불편함이 있다.
  • 그런데 매개변수로 들어오는 객체들의 부모가 같으면, 매개변수 타입이 부모로 설정 된다면?
  • 이런 상황을 다형성을 이용한다고 한다.
//생성자와 Field 변수를 이용 하여 부모class를 생성한다.
// 새로운 메서드를 추가 할 때 효율적이다.
public class VingsuMachine {	
	String name ="";	
	public VingsuMachine(String name) {
		this.name = name;
	}
	public String makeVingsu(Vingsu ving) {
		ving.iceFlake();
		ving.milk();
		ving.redBean();
		ving.jelly();
		ving.etc();
		return name+" 빙수가 완성 되었습니다.";
	}
}
@WebServlet("/drive")
public class DriveController extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		String car = req.getParameter("car");
		System.out.println(car);
		Racer racer = new Racer();
		String msg ="";
		
	
		
		switch (car) {
		case "benz":
			msg = racer.drive(new Benz());
			break;
		case "bmw":
			msg = racer.drive(new BMW());
			break;
		case "audi":
			msg = racer.drive(new Audi());
			break;
		}
		
		req.setAttribute("result", msg);
		RequestDispatcher dis = req.getRequestDispatcher("index.jsp");
		dis.forward(req, resp);
	}

2. Promotion & Casting

자식 -> 부모 promotion(무시적 형변환)
부모 -> 자식 Casting (명시적 형변환)

  • 묵시적 형변환의 단점
if(action.equals("mew")) {
	//msg=mal.mew();	
	// mew 는 Cat 의 고유 메서드 이므로, 부모형태로 들어가서는 사용할 수 없다.
	// 사용하고 싶다면 본인의 형태로 다시 되돌아와야한다.		
	Cat cat = (Cat)mal;
	msg = cat.mew();
if(action.equals("bark")) {
	//Cat cat = (Cat)mal;  
	//강아지였던놈이 고양이로 돌아가려고 하면 ClassCastException 발생
	Dog dog = (Dog)mal;
	msg = dog.bark();    

자식의 고유 메서드를 사용 할 경우 본인의 형태로 다시 되돌아와야 하며, 다른 자식의 형태로 돌아가지 않도록 주의하자.

0개의 댓글

관련 채용 정보