게으른 개발자의 끄적거림

Java 다형성 간단 설명

끄적잉 2023. 6. 13. 21:49
반응형

자바에서 다형성은 객체 지향 프로그래밍의 중요한 개념 중 하나입니다. 다형성은 "여러 가지 형태를 갖는 능력"을 의미하며, 자바에서는 다형성을 통해 같은 타입이지만 다양한 구현을 가진 객체를 처리할 수 있습니다.

 

 

 1. 다형성은 크게 두 가지 방식으로 구현됩니다: 상속을 이용한 다형성과 인터페이스를 이용한 다형성입니다상속을 이용한 다형성: 자바에서는 클래스들 사이의 상속 관계를 통해 다형성을 구현할 수 있습니다. 기본적으로 부모 클래스의 변수로 자식 클래스의 객체를 참조할 수 있습니다. 이 때 부모 클래스의 변수를 통해 자식 클래스의 객체를 다룰 수 있게 되며, 이를 통해 다양한 자식 클래스의 객체를 하나의 부모 클래스 타입으로 처리할 수 있습니다. 이를 업캐스팅이라고도 합니다. 다음은 상속을 이용한 다형성의 예시입니다:

 

 

class Animal {
    public void sound() {
        System.out.println("동물 소리를 내는 중");
    }
}

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

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("야옹~");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();

        animal1.sound(); // "멍멍!" 출력
        animal2.sound(); // "야옹~" 출력
    }
}

 

위의 예시에서 Animal 클래스는 sound() 메서드를 가지고 있습니다. 이 클래스를 상속한 Dog 클래스와 Cat 클래스는 각자의 소리를 출력하는 sound() 메서드를 오버라이딩합니다. main() 메서드에서는 Animal 타입의 변수 animal1animal2를 선언하고, 각각 DogCat 객체를 참조합니다. 이때, animal1.sound()animal2.sound()를 호출하면 각 객체의 오버라이딩된 메서드가 호출되어 각각 "멍멍!"과 "야옹~"을 출력합니다.

 

 

 2. 인터페이스를 이용한 다형성: 인터페이스를 이용한 다형성은 클래스가 아닌 인터페이스를 사용하여 다형성을 구현하는 방식입니다. 인터페이스는 클래스들이 구현해야 하는 메서드의 목록을 정의하는데, 이를 통해 서로 다른 클래스들이 동일한 인터페이스를 구현할 수 있습니다. 인터페이스를 구현한 클래스의 객체는 해당 인터페이스의 타입으로 선언될 수 있으며, 이를 통해 다양한 구현을 가진 객체를 동일한 인터페이스 타입으로 처리할 수 있습니다. 다음은 인터페이스를 이용한 다형성의 예시입니다:

 

 

interface Shape {
    void draw();
}

class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("원을 그립니다.");
    }
}

class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("사각형을 그립니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Shape shape1 = new Circle();
        Shape shape2 = new Rectangle();

        shape1.draw(); // "원을 그립니다." 출력
        shape2.draw(); // "사각형을 그립니다." 출력
    }
}

 

위의 예시에서 Shape 인터페이스는 draw() 메서드를 정의하고 있습니다. Circle 클래스와 Rectangle 클래스는 각각 Shape 인터페이스를 구현하여 draw() 메서드를 오버라이딩합니다. main() 메서드에서는 Shape 타입의 변수 shape1shape2를 선언하고, 각각 CircleRectangle 객체를 참조합니다. 이때, shape1.draw()shape2.draw()를 호출하면 각 객체의 오버라이딩된 메서드가 호출되어 각각 "원을 그립니다."와 "사각형을 그립니다."를 출력합니다.

 

다형성은 코드의 유연성과 재사용성을 높여주는 중요한 개념입니다. 상속을 통한 다형성은 계층적인 관계를 가진 클래스들을 처리할 때 유용하며, 인터페이스를 통한 다형성은 서로 다른 클래스들을 처리할 때 유용합니다. 이를 통해 자바에서 다양한 객체들을 일관된 방식으로 처리할 수 있고, 유지보수 및 확장성이 좋은 코드를 작성할 수 있습니다.

 

반응형