-
다형성(Polymorphism)TIL(Today I Learned) 2022. 9. 26. 20:45
다형성이란?
다형성은 하나의 타입에 여러 객체를 대입할 수 있는 성질입니다.
다형성을 활용하면 기능을 확장하거나, 객체를 변경해야할 때 타입 변경 없이 객체 주입만으로
수정이 일어나게 할 수 있습니다. 또한 상속을 사용한다면 중복되는 코드까지 제거할 수 있으므로
더욱 객체 지향 설계와 가까워질 수 있습니다.
자바에서 다형성을 지원하는 방법으로 메서드 오버로딩과 오버라이딩이 있습니다.
다형성의 쉬운 예시로 동물을 들겠습니다. 거의 대부분의 동물들의 특징은 달리거나 걷거나 잠을 잡니다.그리고 동물들의 종류는 다양합니다. 원숭이, 강아지, 기린, 코뿔소..등
동물이라는 하나의 타입에 원숭이, 강아지, 기린, 코뿔소와 같은 여러 객체를 대입할 수 있고공통된 기능(걷기, 자기, 뛰기..등)을 오버라이딩 하여 다른 기능으로 재사용할 수 있습니다.
아래는 예시 코드입니다.
객체를 호출하고 메서드를 호출하는 Main 클래스입니다.
public class Main{ public static void main(String[] args){ // 동물은 다양한 객체가 존재할 수 있습니다. 예를 들어 기린, 강아지, 원숭이, 사자.. 등 // 객체의 주입만으로 메서드 결괏값이 달라집니다. 아래에선 Monkey 객체를 주입했습니다. Animal animal = new Animal(new Monkey()); animal.walk(); animal.run(); animal.sleep(); } }
output
원숭이가 걷습니다. 원숭이가 뜁니다. 원숭이가 잡니다.
Animal 클래스입니다.
public class Animal{ private AnimalType animalType; public Animal(AnimalType animalType){ this.animalType = animalType; } public void walk(){ animalType.walk(); } public void sleep(){ animalType.sleep(); } public void run(){ animalType.run(); }
AnimalType 인터페이스입니다.(다형성 = 인터페이스)
public interface AnimalType{ public void run(); public void walk(); public void sleep(); }
동물이라는 객체가 가질 수 있는 여러 객체들(클래스들)입니다.
public class Monkey implements AnimalType{ @Override public void run(){ System.out.println("원숭이가 뜁니다."); } @Override public void walk(){ System.out.println("원숭이가 걷습니다."); } @Override public void sleep(){ System.out.println("원숭이가 잡니다."); } }
public class Dog implements AnimalType{ @Override public void run(){ System.out.println("강아지가 뜁니다."); } @Override public void walk(){ System.out.println("강아지가 걷습니다."); } @Override public void sleep(){ System.out.println("강아지가 잡니다."); } }
'TIL(Today I Learned)' 카테고리의 다른 글
자바 컴파일 흐름 (0) 2022.09.26 오버로딩/오버라이딩 (0) 2022.09.26 JSP response 내장 객채(Implicit Object) (0) 2022.09.25 절대 경로와 상대 경로 (0) 2022.09.25 동시성 문제란?/ JSP 지시어, 내장 객체의 간략한 설명 (2) 2022.09.24