Java를 배워보자/3. 객체 지향 프로그래밍 (OOP)

자바 OOP 다형성

_Blue_Sky_ 2024. 9. 26. 17:13
728x90
728x90

자바 OOP 다형성: 깊이 있게 파헤치는 상세 가이드

다형성이란 무엇일까요?

**다형성(Polymorphism)**이란 하나의 객체나 메소드가 여러 가지 타입을 가질 수 있는 성질을 의미합니다. 마치 같은 단어가 문맥에 따라 다른 의미를 가질 수 있는 것처럼, 프로그래밍에서도 다형성을 통해 코드의 유연성과 재사용성을 높일 수 있습니다.

쉽게 말해, 다형성은 다양한 객체들을 하나의 공통된 타입으로 다룰 수 있게 해주는 강력한 도구입니다.

자바에서 다형성 구현하기

자바에서 다형성은 주로 다음과 같은 방법으로 구현됩니다.

1. 오버로딩 (Overloading)

  • 같은 이름의 메소드를 여러 개 정의하는 것으로, 매개변수의 개수나 타입이 다르면 같은 이름의 메소드를 여러 개 만들 수 있습니다.
  • 컴파일 시에 호출할 메소드가 결정됩니다.
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    public double add(double a, double b) {
        return a + b;
    }
}
 
 

2. 오버라이딩 (Overriding)

  • 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것입니다.
  • 메소드의 이름, 매개변수, 반환 타입이 부모 클래스의 메소드와 완전히 같아야 합니다.
  • 실행 시에 실제 객체의 타입에 따라 호출될 메소드가 결정됩니다.
class Animal {
    public void sound() {
        System.out.println("동물의 소리");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("멍멍");
    }
}
 
 

3. 업캐스팅 (Upcasting)

  • 자식 클래스의 객체를 부모 클래스 타입의 참조 변수에 할당하는 것입니다.
  • 자동으로 이루어지며, 부모 클래스에서 정의된 메소드만 호출할 수 있습니다.
Animal animal = new Dog(); // Dog 객체를 Animal 타입으로 업캐스팅
animal.sound(); // "멍멍" 출력
 

4. 다운캐스팅 (Downcasting)

  • 부모 클래스 타입의 참조 변수를 자식 클래스 타입으로 강제 변환하는 것입니다.
  • 명시적으로 형 변환을 해야 하며, 잘못된 타입으로 변환하면 ClassCastException이 발생할 수 있습니다.
  • 자식 클래스에서 추가된 메소드를 호출할 수 있습니다.
Animal animal = new Dog();
Dog dog = (Dog) animal; // 다운캐스팅
dog.sound(); // "멍멍" 출력
 

다형성의 장점

  • 코드의 재사용성 증가: 부모 클래스를 기반으로 다양한 자식 클래스를 만들어 재사용할 수 있습니다.
  • 유연한 프로그래밍: 다양한 객체를 하나의 인터페이스로 다룰 수 있어 프로그램의 확장성을 높입니다.
  • 코드의 가독성 향상: 추상적인 개념을 사용하여 코드를 간결하게 표현할 수 있습니다.

다형성 활용 예시

  • 다양한 종류의 도형 그리기: Shape 클래스를 상속받는 Circle, Rectangle 등의 클래스를 만들어 다양한 도형을 그릴 수 있습니다.
  • 다양한 종류의 동물 소리 내기: Animal 클래스를 상속받는 Dog, Cat 등의 클래스를 만들어 각 동물의 소리를 내게 할 수 있습니다.
  • 다양한 종류의 데이터 처리: ArrayList, LinkedList 등의 클래스를 사용하여 다양한 데이터를 저장하고 처리할 수 있습니다.

결론

다형성은 객체지향 프로그래밍에서 매우 중요한 개념입니다. 다형성을 잘 활용하면 코드의 유연성과 재사용성을 높이고, 더욱 효율적인 프로그램을 개발할 수 있습니다.

추가적으로 알아두면 좋은 점

  • 인터페이스: 다형성을 구현하는 또 다른 방법으로, 인터페이스를 사용하여 클래스 간의 관계를 정의할 수 있습니다.
  • 추상 클래스: 추상 메소드를 포함하는 클래스로, 자식 클래스에서 반드시 구현해야 하는 메소드를 정의할 수 있습니다.
  • 다형성과 관련된 예외: ClassCastException, NullPointerException 등 다형성 사용 시 발생할 수 있는 예외에 대해 알아두는 것이 좋습니다.

 

728x90
728x90