오늘은 객체지향프로그램의 꽃인 다형성에 대해서 알아보자.
1. 다형성
다형성이란 프로그램 언어 각 요소들(상수, 변수, 식, 객체, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다. [출처 : 위키피디아]
쉽게 말하면, 다형성이란 하나의 객체에 여러 가지 타입을 대입할 수 있다는 것을 의미한다. 반대로, 단형성은 하나의 객체에 하나의 타입만 대응할 수 있습니다. 다형성을 설명하기 전에 단형성을 사용한 코드를 보겠습니다.
예를 들어, 자동차의 부모클래스가 있고, 각각이 상속받는 BMW와 Hyndai 클래스있어 해당 클래스들의 info()메소드를 main메소드에서 호출한다고 하면, 아래와 같은 코드일것이다.
public class Car {
private int door;
private String gear;
private String model;
public Car(int door, String gear, String model) {
this.door = door;
this.gear = gear;
this.model = model;
}
public void powerOn() {
System.out.println("시동켜기");
}
public void powerOff() {
System.out.println("시동끄기");
}
public void accel() {
System.out.println("악셀밟기");
}
public void stop() {
System.out.println("브레이크 밟기");
}
public void info( ) {
System.out.println("이것은 Car입니다.");
}
}
public class BMW extends Car{
private String brand;
public BMW(int door, String gear, String model, String brand) {
super(door, gear, model);
this.brand = brand;
}
public void info() {
System.out.println("이것은 BMW입니다.");
}
}
public class Hyndai extends Car{
private String brand;
public Hyndai(int door, String gear, String model, String brand) {
super(door, gear, model);
this.brand = brand;
}
public void info() {
System.out.println("이것은 현대입니다.");
}
}
public class Run {
public static void main(String[] args) {
BMW b = new BMW(4, "승용차", "P", "BMW");
Hyndai h = new Hyndai(4, "SUV", "P", "현대");
b.info();
h.info();
/** 출력
이것은 BMW입니다.
이것은 현대입니다.
**/
}
}
위 코드는 현재 BMW클래스와 Hyndai클래스 두개에 대해서만 객체를 만들고 생성하여 info()메소드를 호출해서 비교적 간결하게 보이는것이지 만약 200대의 차종 모두를 위와 같이 코드수행 한다고 가정한다면, 매우 끔찍할 것이다. 그래서 등장한것이 바로 다형성이다. 그럼 다형성이 적용된 코드는 어떻게 될까? 그것은 아래와 같은 코드형태를 가질것이다.
public class Run {
public static void main(String[] args) {
Car[] c = new Car[2];
c[0] = new BMW(4, "승용차", "P", "BMW");
c[1] = new Hyndai(4, "SUV", "P", "현대");
for(Car cc : c) {
cc.info();
}
/** 출력
이것은 BMW입니다.
이것은 현대입니다.
**/
}
}
위 코드를 보고 200대의 차종을 추가한다고 하면 코드가 많이 간결해지고 유지보수에 용이할것이다. 위와 같은 방법이 다형성이고 자바에서 이런 다형성을 권장하고 있다.
'CS' 카테고리의 다른 글
Git Hub Organization 계정 만들기 (0) | 2024.08.30 |
---|---|
형상 관리란? (0) | 2024.08.29 |
클래스 다이어그램 (0) | 2024.06.28 |
객체 vs 클래스 (0) | 2024.06.21 |
참조변수 vs 일반변수 (0) | 2024.06.21 |