이하 구디아카데미 김지훈 강사님의 수업자료와 강의 내용 정리, 실습한 내용을 정리함!
Vingsu를 이틀째 보고 있자니 빙수가 먹고 싶다.
1. 부모 클래스인 Spell 생성, casting 메서드 리턴값 "속성 마법 사용"
2. Frie 클래스는 Spell 클래스를 상속받음 -> casting 오버라이드
3. casting 리턴 값을 "화염" +부모의 캐스팅 메서드 리턴값
4. Ice, Light 에도 동일 적용
1. Spell 클래스의 sp 변수 선언 = 객체화 대상 클래스에 자식을 넣을 수 있음
2. 각 element 선택 시 sp= new Fire/Ice/Light 로 객체화
1. action 속성이 drive 인 form 생성
2. name 속성이 car 인 선택창 생성
3. 3개의 옵션 각 value 는 "benz" /"bmw"/"audi"
4. 옵션의 자동차를 (운전) 버튼 생성
5. h3 태그에 result 값을 넣음
1. 벤츠 클래스는 메서드 run을 가지고 있고 리턴값은 "벤츠 자동차가 달린다."
2. BMW, 아우디도 동일
3. 레이서 클래스는 drive 메서드를 가지고 있고 매개변수로 벤츠, BMW, 아우디 클래스를 car 변수에 담아 사용
4. 리턴값은 car 객체의 run 메서드 실행 결과
1. 인덱스의 "car" 값을 가져와 변수 car에 넣음
2. Racer 클래스를 racer 로 객체화 함
3. swich 문을 사용하여 car 객체의 case 별로 다른 메서드를 실행하여 msg 변수에 담음
4. "benz" case 시에 recer 객체의 drive 메서드를 Benz를 매개변수로 실행
5. BMW/아우디 동일
6. msg 값을 "result"로 세팅
7. index.jsp 로 보내는 메서드를 변수 dis에 담음
8. dis 의 forward 메서드로 값을 보냄
1. Car 클래스는 run 메서드를 실행하여 반환값으로 " 차량이 달린다."를 뱉음
2. Car 클래스를 상속받는 벤츠/BMW/아우디 클래스 생성
3. run 메서드를 오버라이드 해와서 리턴값 설정 "각 차 이름"+부모 클래스의 run 메서드 반환값
1. 레이서 클래스는 클래스 Car car 변수에 넣은 매개변수로 drive 메서드 실행
2. car의 run 메서드 실행을 반환함
컨트롤러에는 변화가 없으나 차량이 달린다는 공통 내용을 Car 클래스에 담아 각 차종의 클래스에 상속하여 중복을 피할 수 있음
요약
- 다형성을 사용할 경우 여러 가지 이점이 있다.
- 부모를 상속받는 객체들을 담을 변수를 여러 개 만들지 않아도 된다.
- 매개변수를 부모 객체 형태로 하여 들어오는 변수의 폭을 넓힐 수 있다.
- 다형성은 상속 관계뿐 아니라 구현 관계에서도 동작한다.
action 속성이 animal 인 form 생성
name 속성이 cls 인 선택창 생성
옵션은 두 개 각 value 는 dog/cat
name 속성이 action 인 선택창 생성
옵션은 3개 value 가 birth/eat/bark
클릭하면 go 함수 실행하는 실행 버튼 생성
EL 태그로 msg 가져옴
'dog'를 변수 cls 에 담음
name 이 cls 인 select 에 change 이벤트가 일어났을 때 콜백함수 실행
이벤트가 일어난 객체의 벨류 값을 변수 cls 에 담음
$opt 변수에 name 이 action인 select의 자식 요소 option에서 마지막 것의 값을 담음
만약 cls 변수가 dog 라면 $opt 변수의 값은 "bark"고 html은 멍멍 짖는다 로 표시
아니라면 $opt 의 값은 mew 이고 html은 냥 으로 표시
go 실행 > form 태그의 cls 속성에 cls를 세팅하고 서버로 전송
1. cls 의 값을 가져와서 변수 cls 에 담음
2. action 의 값을 가져와서 변수 action 에 담음
3. Mammal 클래스의 변수 mal 은 자식들을 객체화 할 수 있음
4. msg 선언
5. 만약 cls 가 cat 이면 변수 mal 은 Cat 클래스를 객체화한 후
만약 action이 birth 이면 mal의 메서드 birth 의 값을 msg 에 넣음 ( 고양이는 세 마리 낳는다)
만약 action 이 eat 이면 mal의 메서드 eat 의 값을 msg 에 넣음 ( 젖을 먹인다)
만약 action 이 mew 라면 mal 을 다시 Cat 으로 캐스팅 해줘서 cat 변수에 넣고 cat의 mew 메서드 실행하여 msg 에 넣음
6. 도그는 이하 동일
요약
- 다형성은 자식 객체가 부모 객체 형태의 변수에 들어갈 수 있는 것이다.
- 다만 부모 형태의 변수에 들어가면 자식 고유의 기능을 쓸 수 없다.
- 이 경우 casting 을 통해 자식 형태로 되돌아가야 한다.
- 되돌아갈 때 원형을 잘 찾아가야 한다.