2020. 4. 27. 19:27ㆍ인프런/웹개발 코스 [JAVA 개발언어]
다형성
다형성(Polymorphism)이란
하나의 메서드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 키보드의 키를 통해서 비유를 들어보겠다. 키보드의 키를 사용하는 방법은 '누른다'입니다.
하지만 똑같은 동작 방법의 키라고 하더라도 ESC는 취소를 ENTER는 실행의 목적을 가지고 있습니다. 다형성이란 동일한 조작방법으로 동작시키지만 동작방법은 다른 것을 의미합니다.
또한 객체지향 개념에서 다형성은 여러 가지 형태를 가질 수 있는 능력을 의미하며 자바에서는 한 타입의 참조 변수로 여러 타입의 객체를 참조할 수 있도록 합니다.
실습
package JavaTest02;
public class Animal {
public void animalBark()
{
System.out.println("동물이 소리를 냅니다");
}
}
처음에는 부모 클래스인 Animal클래스를 만들어 줍니다.
package JavaTest02;
public class bird extends Animal {
public void animalBark()
{
System.out.println("짹짹");
}
}
package JavaTest02;
public class Dog extends Animal {
public void animalBark()
{
System.out.println("멍멍");
}
}
package JavaTest02;
public class owl extends Animal{
public void animalBark()
{
System.out.println("부어부엉");
}
}
다음으로 bird,dog,owl 클래스를 만들어주며 Animal클래스에 있는 메서드를 상속받습니다. 그리고 함수 이름을 동일하게 만들어줍니다.
package JavaTest02;
public class Javatest {
public static void main(String[] args) {
Animal animal = new Animal();
Animal dog = new Dog();
Animal Owl = new owl();
Animal bird = new bird();
animal.animalBark();
dog.animalBark();
Owl.animalBark();
Bird.animalBark();
}
}
다음으로 출력해줍니다 위의 코드처럼 값을 상위 클래스의 값을 사용하지만 자식 클래스의 객체를 생성합니다. 그리고 동일화된 메서드를 호출하여 각각의 소리를 출력할 수 있습니다.
//Animal animal = new Animal();
//Animal animal = new Dog();
//Animal animal = new Dog();
Animal animal = new owl();
//Animal animal = new bird();
animal.animalBark();
위의 코드처럼 생성하는 클래스만 바꾸고 메소드는 그대로 두어 코드의 재사용이 가능합니다.
이렇게 하나의 객체가 여러개의 자료형 타입을 가질 수 있는 것을 객체지향 세계에서는 다형성 입니다.
instanceof 연산자
package JavaTest02;
public class Javatest {
public static void main(String[] args) {
Animal animal = new Bird();
animal.animalBark();
if(animal instanceof Bird)
{
System.out.println("새 입니다.");
}
}
}
위의 코드처럼 상속받은 값을 instanceof 연산자를 사용하여 라는 animal 메서드 값과 Bird라는 클래스 값이 같다면
출력이 되는 코드입니다.
이렇듯 instanceof 연산자란 instanceof 연산자는 참조 변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 사용되며 주로 조건문에 사용되고, instanceof의 왼쪽에는 참조 변수를 오른쪽에는 타입(클래스명)이 피연산자로 위치합니다. 그리고 연산의 결과로 boolean값인 true, false 중의 하나를 반환합니다.
'인프런 > 웹개발 코스 [JAVA 개발언어]' 카테고리의 다른 글
인터페이스 (0) | 2020.04.27 |
---|---|
추상화 (0) | 2020.04.27 |
상속 (0) | 2020.04.26 |
캡슐화 (0) | 2020.04.26 |
객체지향 프로그래밍 (0) | 2020.04.26 |