한 번의 코딩으로
여러 개의 객체를 생성할 수 있는
원리가 '다형성(polymorphism)'이다.
상속과 같이
불필요한 코드 사용을
줄이는 중요한 개념이다.
개인적으로
다형성의 의미는
참조변수에 얼마나
다양한 생성자를 받을 수 있냐?
출처 입력
라고 생각한다.
참조변수란 Heap영역에 생성된 객체의 주소를 담는 변수다. 주소는 new(연산자)와 생성자()(피연산자)를 통해 산출된다. 그러므로 하나의 코드로 다양한 객체를 만든다의 의미는 한 가지 참조타입(클래스)의 변수에 얼마나 다양한 생성자를 담을 수 있느냐?의 의미인 것이다.
다형성은 기본적으로
2 가지 경우가 있다.
1. 한 가지 클래스 타입에 매개변수가 서로 다른 생성자
출처 입력
이 경우는 이전 포스팅에 구체적으로 다룬 적이 있다.
이런 경우를 자동 타입 변환(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. 다양한 객체를 받아들인다.
'JAVA > JAVA Basic' 카테고리의 다른 글
[ JAVA ] 상속의 원리 : 메소드 동적 바인딩 (0) | 2021.06.18 |
---|---|
[ JAVA ] 자동 타입 변환(promtion) and 강제 타입 변환(casting) (0) | 2021.06.18 |
[ JAVA ] JAVA와 C언어의 차이 (0) | 2021.06.18 |
[ JAVA ] 상속(Inheritance) (0) | 2021.06.18 |
[ JAVA ] 싱글톤패턴(singleton) 그리고 final (0) | 2021.06.18 |