[IT국비지원] 개발자 교육 20일 차 : JAVA(2023.08.23)fit.구디아카데미,김지훈 강사님

Nicole Gold·2023년 8월 23일
0

K-digital training

목록 보기
21/60

이하 구디아카데미 김지훈 강사님의 수업자료와 강의 내용 정리, 실습한 내용을 정리함!

Vingsu를 이틀째 보고 있자니 빙수가 먹고 싶다.

다형성 예시 3

변경 전

  • Mage 는 현재 3가지 속성의 공격을 사용할 수 있다.
  • Mage 가 각 속성 마법을 사용하도록 기본 구현

  1. cast 이름을 가진 action 속성의 폼 생성
  2. name 속성이 element 인 선택창 생성
  3. 옵션 값 fire 인 화염 속성 생성
  4. 옵션 값 ice 인 냉기 속성 생성
  5. 옵션 값 light인 번개 속성 생성
  6. 서버에 전송하는 사용 버튼 생성
  7. EL 태그 통해서 result 출력


  8. Fire 클래스는 casting 메서드를 실행해서 반환값으로 화염마법사용을 뱉음
  9. Ice 클래스는 casting 메서드를 실행해서 반환값으로 냉기마법사용을 뱉음
  10. Light 클래스는 casting 메서드를 실행해서 반환값으로 번개마법사용을 뱉음
  11. MageController 클래스는 httpServlet 을 상속받음 /cast 링크에 대해서만 처리함
  12. doget 메서드 오버라이드해옴
  13. element 값을 가져와 element 변수에 담음 -> msg 문자열 변수 선언
  14. switch 문을 사용해 element 의 case 가 변할 때마다 다른 메서드 실행
  15. 값이 "fire"일 때 Fire 클래스를 fire로 객체화함 -> fire 객체의 casting 메서드 반환값을 msg 에 담음
  16. 값이 "ice" 라면 Ice 클래스 ice 로 객체화 후 ice 객체의 casting 메서드 실행하여 반환값 msg 에 담음
  17. 값이 "light" 라면 이하 동문
  18. req의 setAttribute 메서드 사용하여 msg를 "result"로 설정해줌
  19. index.jsp 로 보내는 변수 dis
  20. dis 의 forward 변수를 사용하여 값을 보냄



변경 후

  • 해당 속성을 사용 할 때 , Spell 이라는 형태로 사용하도록 변경


1. 부모 클래스인 Spell 생성, casting 메서드 리턴값 "속성 마법 사용"
2. Frie 클래스는 Spell 클래스를 상속받음 -> casting 오버라이드
3. casting 리턴 값을 "화염" +부모의 캐스팅 메서드 리턴값
4. Ice, Light 에도 동일 적용

1. Spell 클래스의 sp 변수 선언 = 객체화 대상 클래스에 자식을 넣을 수 있음
2. 각 element 선택 시 sp= new Fire/Ice/Light 로 객체화

다형성 예시 4

변경 전

  • 레이서가 각 차를 운전함

index


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 메서드 실행 결과

controller


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 메서드로 값을 보냄

변경 후

  • 레이서가 car 라는 형태의 모든 것을 운전할 수 있음

부모 자식 상속


1. Car 클래스는 run 메서드를 실행하여 반환값으로 " 차량이 달린다."를 뱉음
2. Car 클래스를 상속받는 벤츠/BMW/아우디 클래스 생성
3. run 메서드를 오버라이드 해와서 리턴값 설정 "각 차 이름"+부모 클래스의 run 메서드 반환값

Racer


1. 레이서 클래스는 클래스 Car car 변수에 넣은 매개변수로 drive 메서드 실행
2. car의 run 메서드 실행을 반환함

컨트롤러에는 변화가 없으나 차량이 달린다는 공통 내용을 Car 클래스에 담아 각 차종의 클래스에 상속하여 중복을 피할 수 있음

요약

  • 다형성을 사용할 경우 여러 가지 이점이 있다.
  • 부모를 상속받는 객체들을 담을 변수를 여러 개 만들지 않아도 된다.
  • 매개변수를 부모 객체 형태로 하여 들어오는 변수의 폭을 넓힐 수 있다.
  • 다형성은 상속 관계뿐 아니라 구현 관계에서도 동작한다.



Promotion & Casting

  • 자식 클래스가 부모 클래스 형태로 들어가는 것을 Promotion(묵시적 형 변환) 이라고 부른다.
  • 반대로 다시 자식의 형태로 되돌아 가는 것을 Casting (명시적 형 변환) 이라고 한다.
  • 묵시적 형 변환을 했을 때 단점

index

  1. action 속성이 animal 인 form 생성

  2. name 속성이 cls 인 선택창 생성

  3. 옵션은 두 개 각 value 는 dog/cat

  4. name 속성이 action 인 선택창 생성

  5. 옵션은 3개 value 가 birth/eat/bark

  6. 클릭하면 go 함수 실행하는 실행 버튼 생성

  7. EL 태그로 msg 가져옴

  8. 'dog'를 변수 cls 에 담음

  9. name 이 cls 인 select 에 change 이벤트가 일어났을 때 콜백함수 실행

  10. 이벤트가 일어난 객체의 벨류 값을 변수 cls 에 담음

  11. $opt 변수에 name 이 action인 select의 자식 요소 option에서 마지막 것의 값을 담음

  12. 만약 cls 변수가 dog 라면 $opt 변수의 값은 "bark"고 html은 멍멍 짖는다 로 표시

  13. 아니라면 $opt 의 값은 mew 이고 html은 냥 으로 표시

  14. go 실행 > form 태그의 cls 속성에 cls를 세팅하고 서버로 전송



부모 자식 클래스

  1. mammal 클래스는 birth 메서드와 eat 메서드가 있음
  2. birth 메서드는 "새끼를 낳는다." 반환, eat 메서드는 "젖을 먹인다." 반환
  3. Dog 클래스는 Mammal 클래스를 상속하며 birth 메서드를 오버라이드 해와서 클래스 네임은 새끼를 다섯 마리 낳는다 라고 반환값 변경
  4. bark 메서드는 "멍 하고 짖는다." 라고 반환값 뱉음
  5. Cat 클래스는 Mammal 클래스를 상속하며 birth 메서드를 오버라이드 해와서 클래스 네임은 새끼를 세 마리 낳는다 라고 반환값 변경
  6. mew 라는 메서드를 실행하면 반환값 클래스 네임은 냥하고 운다 라고 뱉음.



controller


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 을 통해 자식 형태로 되돌아가야 한다.
  • 되돌아갈 때 원형을 잘 찾아가야 한다.
profile
JAVA 개발자로 가는 길

0개의 댓글

관련 채용 정보