본문 바로가기

java(자바)

[java(자바)] 다형성 _디버깅의 눈물

자바에서 다형성(Polymorphism)은 객체 지향 프로그래밍의 중요한 개념 중 하나입니다. 다형성은 같은 이름의 메서드나 연산자를 여러 객체에서 다르게 구현하거나 사용하는 기능을 말합니다. 이를 통해 코드의 재사용성과 유지보수성이 높아지며, 객체지향 프로그래밍의 핵심 원리 중 하나인 추상화를 구현할 수 있습니다.

 

자바에서 다형성은 크게 오버로딩(Overloading)과 오버라이딩(Overriding) 두 가지 방법으로 구현할 수 있습니다.

 

 

오버로딩(Overloading)

 

오버로딩은 같은 이름의 메서드를 여러 개 정의하고, 매개변수의 개수나 타입을 다르게 해서 호출할 수 있도록 하는 것입니다. 메서드 오버로딩을 사용하면 같은 작업을 수행하는 메서드들을 하나의 이름으로 그룹화할 수 있습니다.

 

 

public class OverloadingExample {
    public int add(int a, int b) {
        return a + b;
    }
    
    public int add(int a, int b, int c) {
        return a + b + c;
    }
    
    public double add(double a, double b) {
        return a + b;
    }
}

 

위 예시 코드에서 add 메서드는 세 가지 버전으로 오버로딩되었습니다. 이렇게 오버로딩된 메서드는 호출될 때 전달된 매개변수의 타입과 개수에 따라 적절한 메서드가 선택되어 실행됩니다.

 

 

오버라이딩(Overriding)

 

오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것입니다. 즉, 같은 이름의 메서드를 부모 클래스와 자식 클래스에서 각각 구현하면 자식 클래스의 메서드가 호출됩니다.

 

class Animal {
    public void makeSound() {
        System.out.println("The animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("The dog barks");
    }
}

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("The cat meows");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog(); // 다형성을 이용한 객체 생성
        Animal animal2 = new Cat();
        
        animal1.makeSound(); // "The dog barks" 출력
        animal2.makeSound(); // "The cat meows" 출력
    }
}

 

위 예시 코드에서 Animal 클래스는 추상적인 개념의 동물을 나타내는 클래스입니다. Dog 클래스와 Cat 클래스는 Animal 클래스를 상속하여 makeSound() 메서드를 재정의하였습니다.

 

Main 클래스에서는 Dog 객체와 Cat 객체를 Animal 타입의 변수에 할당하고, makeSound() 메서드를 호출합니다. 이때, 변수의 타입은 Animal이지만 실제로 실행되는 메서드는 Dog나 Cat에서 재정의한 메서드입니다. 이렇게 같은 메서드를 호출하더라도 객체에 따라 다른 동작을 수행하게 되므로 다형성이 구현되었다고 할 수 있습니다.