티스토리 뷰
728x90
반응형
다이나믹 메소드 디스패치란?
Dynamic Method Dispatch
- 다이나믹 메소드 디스패치란 자바의 테크닉 중 하나로, 런타임시에 오버라이딩 된 메서드가 실행되는 것을 의미합니다.
- dynamic은 runtime의 동의어로 사용되며, dispatch는 어떤 메서드를 호출할지 결정하는 것입니다.
- 자바는 런타임 시 객체를 생성하고, 컴파일 시에는 생성할 객체 타입에 대한 정보만 가지고 있습니다. 이에따라 이 과정은 정적(static)과정과 동적(dynamic)과정이 있습니다.
Static Dispatch(정적 디스패치)
- 컴파일 시점에서, 컴파일러가 어떤 클래스의 메서드를 호출할 것이라고 명확하게 알고 있는경우
- 컴파일 시 생성된 바이트 코드에도 해당 정보가 남아있습니다.
- 런타임(실행 시점)이 되지 않아도 미리 결정하는 개념입니다.
- 메서드를 오버라이딩하여 사용하는 경우 매개변수의 타입이나 리턴타입 등에 따라 어떤 메서드를 호출할지 알수 있는 경우
class Job {
void myJob(){
}
}
class Student extends Job{
@Override
void myJob() {
System.out.println("Student");
}
}
class Teacher extends Job{
@Override
void myJob() {
System.out.println("Teacher");
}
}
public class Example {
public static void main(String[] args) {
Student student = new Student();
Teacher teacher = new Teacher();
student.myJob();
teacher.myJob();
}
}
바이트 코드로 확인하기
Dynamic Dispatch(동적 디스패치)
- 정적 디스패치와는 반대로 컴파일러가 어떠 메서드를 호출하는지 모르는 경우입니다.
- 동적 디스패치는 호출할 메서드를 런타임 시점에 결정하게 됩니다.
- 인터페이스나 추상 클래스에 정의된 추상 메서드를 사용하는 경우입니다.
- 인터페이스 또는 추상 클래스를 선언하고 상속/구현 하는 하위 클래스 생성
- 컴파일러가 알고 있는 타입에 대한 정보를 토대로 런타임 시 해당 타입의 객체를 생성하고 메서드 호출
- 런타임 전에는 객체가 생성되지 않기 때문에 Job student = new Student(); 를 해도 컴파일러가 Student의 객체가 생성된지 알 수 없으므로 Job이 정의한 myJob() 메서드로만 접근할 수 있습니다.
abstract class Job {
abstract void myJob();
}
class Student extends Job{
@Override
void myJob() {
System.out.println("Student");
}
}
class Teacher extends Job{
@Override
void myJob() {
System.out.println("Teacher");
}
}
public class Example {
public static void main(String[] args) {
Job student = new Student();
Job teacher = new Teacher();
student.myJob();
teacher.myJob();
}
}
바이트 코드로 확인하기
Double Dispatch(더블 디스패치)
- Dynamic Dispatch를 두 번 하는 것을 의미합니다.
- Post 클래스의 구현체 Text, Picture에서 어떤 클래스의 postOn 메서드를 사용할 건지(Dynamic Dispatch 한번 사용)
- postOn 메서드에서 인자로 선택된 클래스의 post 메서드를 사용할지(Dynamic Dispatch 한번 사용)
public class Dispatch {
interface Post {
void postOn(Sns sns);
}
interface Sns {
void post(Text text);
void post(Picture picture);
}
static class Text implements Post{
@Override
public void postOn(Sns sns) {
sns.post(this);
}
}
static class Picture implements Post{
@Override
public void postOn(Sns sns) {
sns.post(this);
}
}
static class Naver implements Sns {
@Override
public void post(Text text) {
System.out.println("Naver-text");
}
@Override
public void post(Picture picture) {
System.out.println("Naver-picture");
}
}
static class Kakao implements Sns{
@Override
public void post(Text text) {
System.out.println("Kakao-text");
}
@Override
public void post(Picture picture) {
System.out.println("Kakao-picture");
}
}
public static void main(String[] args) {
List<Post> postList = Arrays.asList(new Text(), new Picture());
List<Sns> snsList = Arrays.asList(new Naver(), new Kakao());
postList.forEach(post -> snsList.forEach(sns -> post.postOn(sns)));
}
}
=====================결과=====================
Naver-text
Kakao-text
Naver-picture
Kakao-picture
솔직히 이거는 무슨 말인지 하나도 모르겠다,,,, 더 공부를 해보고 강의도 들어봐야겠다
어렵다!
728x90
반응형
'JAVA > JAVA기본' 카테고리의 다른 글
JAVA - Object 클래스란? (0) | 2022.01.16 |
---|---|
JAVA - 추상 클래스란? (2) | 2022.01.16 |
JAVA - 상속이란?(feat.extends, super) (0) | 2022.01.11 |
JAVA - Class란? (feat.인스턴스, 메서드, 생성자, this) (0) | 2022.01.04 |
JAVA - Queue이란? 그리고 구현 (0) | 2022.01.01 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- polling publisher spring boot
- spring boot excel download oom
- redis 대기열 구현
- java ThreadLocal
- 공간 기반 아키텍처
- 자바 백엔드 개발자 추천 도서
- space based architecture
- microkernel architecture
- transactional outbox pattern spring boot
- 레이어드 아키텍처란
- @ControllerAdvice
- redis sorted set으로 대기열 구현
- 서비스 기반 아키텍처
- transactional outbox pattern
- spring boot redis 대기열 구현
- pipeline architecture
- spring boot 엑셀 다운로드
- spring boot poi excel download
- pipe and filter architecture
- 람다 표현식
- 트랜잭셔널 아웃박스 패턴 스프링부트
- service based architecture
- java userThread와 DaemonThread
- spring boot redisson destributed lock
- JDK Dynamic Proxy와 CGLIB의 차이
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- spring boot excel download paging
- redis sorted set
- spring boot redisson 분산락 구현
- spring boot redisson sorted set
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함