Toby Lee - 토비의 봄 TV 1회 - 재사용성과 다이나믹 디스패치, 더블 디스패치
22:43~42:00
https://youtu.be/s-tXAHub6vg?t=42m
-Method Dispatch
원하는 Method를 정하고 호출하여 실행하는 과정/작업
-Static과 Dynamic 으로 있다.
-컴파일이 되는시점에서 어느메소드가 호출될지 알수 있는 상태(Static Dispatch)
*예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | static class CallService{ //static은 class파일을 따로 작성할때는 필요없고 void talkToMe(){ //다른 클래스안에서 독립적인 클래스 작성이 System.out.println("Hi."); //복사붙여넣기용 이여서 이렇게 예제를 만듬. } //즉 이 예제는 메인이될 클래스 안에 모두 넣음. void talkToMe(int tNumber){ System.out.println("Hi"+tNumber+"."); } void talkToMe(String msg){ System.out.println("Hi"+msg+"."); } } public static void main(String[] args){ new CallService().talkToMe(); new CallService().talkToMe(7); new CallService().talkToMe("World"); } | cs |
코드작성-https://colorscripter.com
*예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | static abstract class CallService{//추상 클래스 abstract void talkToMe(); } static class MyService extends CallService{//상속 @Override //서브 크래스에서 다시 정의시 붙이도록 권장함 void talkToMe(){ System.out.println("Hi"); } } static class MyService2 extends CallService{//상속2 @Override//서브 크래스에서 다시 정의시 붙이도록 권장함 void talkToMe(){ System.out.println("Hi2"); } } public static void main(String[] args){ MyService svc1 = new MyService(); svc1.run(); MyService2 svc2 = new MyService2(); svc2.run(); CallService svc = new MyService(); svc.run();//컴파일되었어도 어느것을 실행되어야 되는지 알수 없는 //현재 이 시점의 run()은 MyService들중 어느것을 //실행해야 되는 상황인지 정해져 있지 않은 상황 //CallService의 추상클래스의 메소드를 가져오는 것처럼 되어있다. } | cs |
코드작성-https://colorscripter.com
-우리가 쓰는 this에 해당하는 오브젝트가 recevier parameter에 들어가 있다.
*예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | static abstract class CallService{//추상 클래스 abstract void talkToMe(); } static class MyService extends CallService{//상속 @Override //서브 크래스에서 다시 정의시 붙이도록 권장함 void talkToMe(){ System.out.println("Hi"); } } static class MyService2 extends CallService{//상속2 @Override//서브 크래스에서 다시 정의시 붙이도록 권장함 void talkToMe(){ System.out.println("Hi2"); } } public static void main(String[] args){ List<CallService> svc = Array.asList(new MyService(), new MyService2()); //어느 Class의 오브젝트가 들어갈지 한눈에 안보이게 된다. svc.forEach(s->s.run()); //동적으로 잡아 런타임이 정한다. } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | static abstract class CallService{//추상 클래스 abstract void talkToMe(); } static class MyService extends CallService{//상속 @Override //서브 크래스에서 다시 정의시 붙이도록 권장함 void talkToMe(){ System.out.println("Hi"); } } static class MyService2 extends CallService{//상속2 @Override//서브 크래스에서 다시 정의시 붙이도록 권장함 void talkToMe(){ System.out.println("Hi2"); } } public static void main(String[] args){ List<CallService> svc = Array.asList(new MyService(), new MyService2()); //어느 Class의 오브젝트가 들어갈지 한눈에 안보이게 된다. svc.forEach(CallService::run);//메소드 레퍼런스 //타입이 일치하면 가져다 쓸수 이 } | cs |
코드작성-https://colorscripter.com
-Method Signature
-오버라이딩시 중요함 (name, parameter Types - 이두가지가 같아야 오버라이딩 할 수 있다.)
-이두가지가 같은 메소드는 두개 이상 정의 할 수 없다. (한 클래스 안에)
-리턴타입을 넣는 사람도 있는데 이것은 아니다.
-위 이야기는 제너릭 이야기는 뺀상태의 이야기
-Method Type
-람다를 할때 이야기 할때
-(return type, method type parameter,method argument type, exception) => Method Reference
-관련 도서 링크 Java 8 in Action
'정리 카테고리 > 토비s Spring Vol.1' 카테고리의 다른 글
[동영상 시청/메모]토비의 봄 TV 1회 - 재사용성과 다이나믹 디스패치, 더블 디스패치_3 (0) | 2018.05.21 |
---|---|
[동영상 시청/메모]토비의 봄 TV 1회 - 재사용성과 다이나믹 디스패치, 더블 디스패치 (0) | 2018.05.16 |
Vol_1, 1.1, 59P (0) | 2018.05.11 |
시작전 환경 설정 (0) | 2018.05.10 |
토비의 Spring 3.1 시작전 (0) | 2018.05.01 |