객체지향 프로그래밍에서의 다형성의 의미
객체지향 프로그래밍에서 다형성(Polymorphism)은 객체들이 동일한 메시지에 대해 서로 다른 방식으로 응답할 수 있는 능력을 의미합니다. 다시 말해, 다형성은 하나의 인터페이스나 추상 클래스를 여러 개의 구현 클래스가 상속받아 각자의 방식으로 구현하여 동일한 메소드를 다르게 동작시키는 기능입니다. 이러한 다형성은 코드의 재사용성과 유지보수성을 높여줄 수 있습니다.
예를 들어, 도형(Shape) 클래스가 있고, 이 클래스를 상속받은 삼각형(Triangle), 사각형(Rectangle), 원(Circle) 클래스가 있다고 가정해 봅시다. 도형 클래스에는 getArea() 메소드가 정의되어 있고, 각 도형 클래스에서는 이 메소드를 오버라이딩하여 해당 도형의 면적을 계산하는 방식으로 구현할 수 있습니다.
interface Shape {
double getArea();
}
class Triangle implements Shape {
private double base;
private double height;
public Triangle(double base, double height) {
this.base = base;
this.height = height;
}
public double getArea() {
return 0.5 * base * height;
}
}
class Rectangle implements Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public double getArea() {
return width * height;
}
}
class Circle implements Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getArea() {
return Math.PI * radius * radius;
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Shape s1 = new Triangle(10, 20);
Shape s2 = new Rectangle(10, 20);
Shape s3 = new Circle(10);
double area1 = s1.getArea();
double area2 = s2.getArea();
double area3 = s3.getArea();
System.out.println("Triangle area: " + area1);
System.out.println("Rectangle area: " + area2);
System.out.println("Circle area: " + area3);
}
}
위 코드에서 Shape 인터페이스를 구현한 Triangle, Rectangle, Circle 클래스가 있습니다. 이들 클래스는 각각 다르게 구현된 getArea() 메소드를 가지고 있습니다.
main() 메소드에서는 Shape 인터페이스를 구현한 객체들을 생성하여, 각 객체의 getArea() 메소드를 호출합니다. 이렇게 하면, Shape 타입의 변수 s1, s2, s3가 각기 다른 객체를 참조하면서도 동일한 메소드를 호출할 수 있습니다. 이것이 바로 다형성의 예시입니다.
또한, 다형성은 상속을 이용한 코드의 재사용성을 높여줍니다. 하나의 추상 클래스나 인터페이스를 정의해두면, 이를 상속받아 새로운 클래스를 만들 때 중복 코드를 최소화할 수 있습니다.
객체지향 프로그래밍에서 다형성은 상속, 추상화, 인터페이스 등의 개념과 함께 사용되어 유용하게 쓰입니다.
'프로그래밍' 카테고리의 다른 글
객체 지향 프로그래밍에서 오버로딩(Overloading)과 오버라이딩(Overriding) 차이점 (0) | 2023.04.24 |
---|---|
언리얼 엔진 4, 비쥬얼 스튜디오 2022 다운로드 및 설치 후 프로젝트 생성하기 (0) | 2023.02.09 |
[STL] 컨테이너의 분류와 종류(순차 컨테이너, 연관 컨테이너, 비정렬 컨테이너) (0) | 2023.02.08 |
[C++] 레퍼런스(참조, &) 사용 시 주의 사항 (0) | 2023.02.08 |
[C++] decltype 이란? (0) | 2023.02.08 |