강의 내용
[1] 다형성 활용(다형성 인수)
[2] 다형성 활용(다형성 배열)
[1] 다형성 활용(다형성 인수)
다형성 인수
부모 클래스를 활용하면 자식 클래스들을 쉽게 처리할 수 있다.
*인수/인자/매개변수 : 메서드 용어
*다형성 인수 : 하나의 타입으로 여러 타입을 받는 것
*Overloading : 메서드의 이름은 같지만, 타입이 다름
Q. Dog와 Cat 클래스를 설계하고 동작시켜 보시오.
main() 안에서 만들어진 Dog, Cat 타입을 다른 메서드로 이동하는 방법
*오버로딩(Overloading) : 앞으로 추가 될 다른 타입(토끼, 사자, 하마)을 받기 위한 메서드를 만들어야 함(비효율)
*Animal : 자식(Dog, Cat)의 타입을 받음
public class PolyMethodTest { public static void main(String[] args) { Dog d = new Dog(); display(d); // display(Dog d) Cat c = new Cat(); display(c); // display(Cat c) } private static void display(Dog d) { // Overloading d.eat(); } private static void display(Cat c) { // Overloading c.eat(); } }
하나의 메서드로 처리하려면 두 타입(Dog, Cat)을 받을 수 있는 타입으로 인자를 적어야 함
public class PolyMethodTest { public static void main(String[] args) { Dog d = new Dog(); display(d); Cat c = new Cat(); display(c); } private static void display(Animal ani) { // 다형성 인수 ani.eat(); } }
instanceof로 타입 검사
*instanceof : 타입 확인 연산자
Q. Dog와 Cat 클래스를 설계하고 동작시켜 보시오.
public class PolyMethodTest { public static void main(String[] args) { Dog d = new Dog(); display(d); Cat c = new Cat(); display(c); } private static void display(Animal ani) { // 다형성 인수 ani.eat(); // Cat 타입으로 받은 경우에만 실행 if (ani instanceof Cat) { // Cat 타입으로부터 만들어진 ani임을 확인 ((Cat)ani).night(); // Cat의 고유한 기능 } } }
[2] 다형성 활용(다형성 배열)
다형성 배열(상위 타입 배열)
배열은 동일한 자료형만 저장 가능하지만, 부모 타입의 배열은 자식 타입을 저장할 수 있다.
하나의 배열에 서로 다른 타입 저장 가능
Q. Dog와 Cat 클래스를 설계하고 동작시켜 보시오.
main()안에서 만든 타입을 바구니(배열)에 담아 다른 메서드로 이동
Dog, Cat : 타입 불일치(서로 다른 타입을 부모 타입의 배열에 넣음)
public class PolyArrayTest { public static void main(String[] args) { Dog d = new Dog(); Cat c = new Cat(); // Dog, Cat을 저장할 배열을 생성하시오. // Animal[] ani = {new Dog(), new Cat()}; // 생성과 동시에 초기화 Animal[] ani = new Animal[2]; // 다형성 배열 ani[0] = d; ani[1] = c; display(ani); } public static void display(Animal[] ani) { for (int i = 0; i < ani.length; i++) { ani[i].eat(); if (ani[i] instanceof Cat) { ((Cat) ani[i]).night(); } } } }
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://bit.ly/48sS29N