JAVA/JAVA Basic

[ JAVA ] 다형성

IT록흐 2021. 6. 18. 21:42
반응형

 

 

한 번의 코딩으로

여러 개의 객체를 생성할 수 있는

원리가 '다형성(polymorphism)'이다.

 

상속과 같이

불필요한 코드 사용을

줄이는 중요한 개념이다.

 

 

개인적으로

다형성의 의미는

 

참조변수에 얼마나

다양한 생성자를 받을 수 있냐?

출처 입력

 

라고 생각한다.

 

 

참조변수란 Heap영역에 생성된 객체의 주소를 담는 변수다. 주소는 new(연산자)와 생성자()(피연산자)를 통해 산출된다. 그러므로 하나의 코드로 다양한 객체를 만든다의 의미는 한 가지 참조타입(클래스)의 변수에 얼마나 다양한 생성자를 담을 수 있느냐?의 의미인 것이다.

 

 

다형성은 기본적으로

2 가지 경우가 있다.

 

1. 한 가지 클래스 타입에 매개변수가 서로 다른 생성자

출처 입력

 

 

 

이 경우는 이전 포스팅에 구체적으로 다룬 적이 있다.

 

 

[ JAVA ] 객체의 생성과 호출

객체 생성 연산자 : new 객체 접근 연산자 : . (도트) 이 두 가지만 알아도 객체의 많은 부분을 알 수 있다 생각한다. new 객체는 Heap 영역에 생성된다. Heap 영역에 객체생성을 지시하는 연산자가 new

lordofkangs.tistory.com

 

 

 

 

이런 경우를 자동 타입 변환(promotion)이라고 한다.

 

Promotion은 '객체의 부품화'에 기여한다.

 

자동타입변환이 없다면, 코딩을 할 때 car라는 변수가 아닌, Tesla(), Hyundae(), Toyota()의 '전용' 참조변수를 사용하여 코딩을 해야한다.

 

Tesla t1 = new Tesla(); // 현대차로 바뀌면

t1.run(); // 얘도 수정
t1.accelerate(); // 얘도 수정
t1.stop(); // 얘도 수정해야 됨

 

 

이 코드를 사용하는데, 만약 차가 테슬라가 아닌 현대차로 바뀌었다고 가정해보자, 현대차로 바뀌었다면 t1 참조변수가 쓰인 모든 코드를 모두 수정해야한다. 이는 엄청난 비효율을 초래한다. 그래서 자동타입변환을 통해 car라는 더 큰 추상개념을 사용하면 효율적인 코딩을 할 수 있다.

 

Car car = new Tesla(); // 이 부분만 바꾸면 됨!

car.run();
car.accelerate();
car.stop();

 

 

자동타입변환을 사용하면, 나중에 객체를 바꾸어야 할 때, 객체생성 부분의 코드만 수정해주면 된다. Car car = new Hyundae(); 이렇게 수정하면 나머지 car참조변수의 메소드는 자동으로 Hyundae의 메소드를 가리킨다.

 

이것이 바로 '객체의 부품화'다. 코드가 어느 한 객체에 종속되지않고 여러 객체를 떼었다 붙였다 할 수 있다. 이 개념은 나중에 인터페이스에서 사용된다.

 

 

 


정리

 

이렇듯 다형성의 두 가지 경우의 의미는 이러하다.

 

1. 다양한 객체를 생성한다.

2. 다양한 객체를 받아들인다.

 

 

 

반응형