개발 문서/Java

다형성과 상속: 자바의 중요한 개념

copg 2023. 11. 11. 02:50
728x90
반응형

다형성(Polymorphism)과 상속(Inheritance)은 객체지향 프로그래밍의 핵심 개념 중 두 가지로, 자바에서 강력하게 지원되고 활용되는 개념입니다.

1. 다형성 (Polymorphism):

다형성은 같은 이름의 메소드나 연산자가 다양한 상황에서 다르게 동작하는 능력을 의미합니다. 자바에서 다형성은 주로 오버로딩과 오버라이딩을 통해 구현됩니다.

  • 메소드 오버로딩 (Method Overloading):
    • 동일한 메소드 이름을 가지지만 매개변수의 타입, 개수, 순서가 다른 여러 메소드를 정의하는 것입니다.
class Calculator {
    int add(int a, int b) {
        return a + b;
    }

    double add(double a, double b) {
        return a + b;
    }
}
  • 메소드 오버라이딩 (Method Overriding):
    • 상위 클래스에서 정의된 메소드를 하위 클래스에서 동일한 시그니처로 재정의하는 것입니다.
class Animal {
    void makeSound() {
        System.out.println("Some generic sound");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Woof!");
    }
}

class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("Meow!");
    }
}
  • 인터페이스와 다형성:
    • 인터페이스를 통해 다형성을 구현할 수 있습니다. 여러 클래스가 같은 인터페이스를 구현하면, 이들은 같은 형태로 다룰 수 있습니다.
interface Shape {
    void draw();
}

class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a circle");
    }
}

class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a rectangle");
    }
}

2. 상속 (Inheritance):

상속은 기존의 클래스에서 필드와 메소드를 물려받아 새로운 클래스를 만드는 것을 의미합니다. 이는 코드의 재사용성을 높이고, 클래스 간에 계층 구조를 형성할 수 있도록 합니다.

  • 부모 클래스 (상위 클래스 또는 슈퍼 클래스):
    • 다른 클래스에게 속성과 메소드를 제공하는 클래스입니다.
class Animal {
    void eat() {
        System.out.println("Animal is eating");
    }
}
  • 자식 클래스 (하위 클래스 또는 서브 클래스):
    • 다른 클래스(부모 클래스)로부터 상속받은 속성과 메소드를 가지고 있는 클래스입니다.
class Dog extends Animal {
    void bark() {
        System.out.println("Dog is barking");
    }
}
  • 상속의 장점:
    • 코드의 재사용성이 증가하고, 중복을 방지합니다.
    • 클래스 간의 계층 구조를 형성하여 설계를 간결하게 만듭니다.
    • 유지보수가 용이해집니다.

상속과 다형성은 객체지향 프로그래밍의 핵심 개념으로, 코드를 더 유연하고 확장 가능하게 만들어줍니다. 상속을 사용하면 새로운 클래스를 기존 클래스의 특성을 기반으로 쉽게 만들 수 있으며, 다형성을 통해 여러 클래스를 하나의 형태로 통일적으로 다룰 수 있습니다.