JAVA

객체 지향 프로그래밍 4요소 - 다형성(Polymorphism)

최서은 2024. 6. 30. 17:07

다형성


객체지향 프로그래밍의 핵심 개념 4요소 중 하나입니다.

이는 같은 코드에서 여러 실행 결과가 나올 수 있는 것을 의미합니다.

따라서 하나의 객체가 여러 타입을 가질 수 있습니다.  그에 따라 동일한 메서드 호출이 객체의 타입에 따라 다른 동작을 할 수 있게 합니다.

 

https://hollydev.tistory.com/1 

 

JAVA에 대하여

객체지향 언어클래스와 객체를 기반으로 프로그래밍하는 방식, 다음과 같은 특성을 지님코드의 재사용성과 유지보수성을 높이기 위해 클래스와 객체 사용* 클래스(Class)  : 데이터와 메소드

hollydev.tistory.com

4요소의 간단한 설명이 정리되어 있습니다. 

 

다형성 구현


상속 또는 구현 상황에서 메소드 오버라이딩/메소드 오버로딩 으로 다형성을 구현할 수 있다.

 

메소드 오버라이딩 : 부모 클래스에 정의된 메소드를 자식 클래스에서 재정의 하는 것, 반드시 상속 관계에 있는클래스 간 발생

- 규칙

  1. 메소드 이름 동일
  2. 매개 변수 정보(개수, 타입 , 순서) 동일
  3. 반환 타입 동일
  4. 접근 제어자 : 부모 클래스의 메소드보다 좁은 범위 사용 불가 
  5. 예외 : 부모 클래스의 예외보다 더 많은 예외 사용 불가
// 부모 클래스 Car
public class Car {
    String model;
    Stirng brand;
	int wheels;
    int price;
    
    public void driveCar() {
    	System.out.println("운전합니다.");
    }
}
// 자식 클래스 SportCar 
public class SportCar extends Car{
	public void driveCar() {	// 부모 클래스의 driveCar 오버라이딩
            System.out.println("스포츠카를 운전합니다.");
    }
}

 

메소드 오버로딩 : 같은 이름의 메소드를 여러 개 정의하는 것, 동일 클래스 내 또는 상속 관계에서 발생

- 규칙 

  1. 메소드 이름 동일
  2. 매개 변수 정보(개수, 타입 , 순서)  달라야 함
  3. 반환 타입은 동일 하지 않아도 가능
// 자식 클래스 SportsCar
public class SportsCar{
	public void drivecar() {
		System.out.println("스포츠카를 운전합니다.");    
    	}
	public void driveCar(int a) {
    		System.out.println("스포츠카를 " + a + "번 운전합니다."); // 메소드 오버로딩
    	}
}

 

객체 배열의 다형성 구현


상속 관계에 있는 부모의 클래스 타입의 배열 공간에 여러 종류의 자식 클래스 객체를 저장할 수 있다.

// 자식 클래스 Truck 
public class Truck extends Car {
	public void driveCar() {
    	System.out.println("트럭을 운전합니다.");
    }
}

// 부모 클래스 Car의 자식 클래스는 SportsCar, Truck이다

 

public class Main {
	public static void main(String[] args) {
    	Car[] carArr = new Car[2]
        
        // 상속 관계에 있는 부모 클래스 타입의 배열
        // 배열 인덱스에 여러 종류의 자식 클래스 객체 저장
        carArr[0] = new SportsCar();
        carArr[1] = new Truck();
    }
}

 

 

매개 변수의 다형성 구현


메소드 호출 시 부모 타입의 변수 하나만 사용해 자식 타입의 객체를 받을 수 있다.

public void execute() {
	driveCar(new SportsCar()); // Car c = new SportsCar()
	driveCar(new Truck());	   // Car c = new Truck()
}

public void driveCar(Car c) {}

 

 

다형성의 장점


  1.  유연성 : 코드의 유연성과 사용성을 높인다. 새로운 클래스가 추가되더라도 기존 코드를 수정하지 않고도 확장 가능하다.
  2.  유지보수성 : 공통 인터페이스나 부모 클래스를 사용함으로서 유지보수가 용이해진다.
  3.  가독성 : 동일한 인터페이스를 통해 다양한 객체를 다룰 수 있어 코드의 가독성을 높인다.

'JAVA' 카테고리의 다른 글

왜 우리는 JVM을 공부해야 하는가: JRE, JDK  (1) 2026.04.04
[UML] 클래스 다이어그램  (0) 2024.07.14
객체와 클래스  (0) 2024.06.23
자바의 변수들(일반 변수, 참조 변수)  (0) 2024.06.23
JAVA에 대하여  (2) 2024.06.16