본문 바로가기
Programming/Java

자바의 상속

by vita12321 2023. 7. 28.
728x90
반응형

자바의 상속은 객체 지향 프로그래밍의 핵심 개념 하나로, 이미 정의된 클래스의 속성과 기능을 다른 클래스에 전달하는 메커니즘입니다. 상속을 통해 코드의 재사용성을 높이고 중복 코드를 줄일 있습니다. 이번 글에서는 자바의 상속에 대해 더욱 상세하게 알아보고, 예제 코드를 통해 기능을 이해해 보겠습니다.


 

1. 상속의 개념 장점

 

상속은 기존의 클래스를 확장하여 새로운 클래스를 생성하는 과정입니다. 기존의 클래스를 부모 클래스(Parent Class) 또는 상위 클래스(Super Class)라고 하며, 새로 생성된 클래스를 자식 클래스(Child Class) 또는 하위 클래스(Sub Class)라고 합니다. 자식 클래스는 부모 클래스의 속성(변수) 메서드(함수) 물려받아 사용할 있습니다. 상속을 활용하면 다음과 같은 장점이 있습니다.

 

  • 코드의 재사용성이 높아집니다. 기존 클래스에 작성된 코드를 새로운 클래스가 그대로 사용할 수 있습니다.

  • 코드 중복을 줄일 수 있습니다. 자식 클래스에 동일한 코드를 작성할 필요 없이, 상속을 통해 필요한 기능을 활용할 수 있습니다.

  • 유지 보수가 쉬워집니다. 기존 코드를 수정하거나 추가할 때 상위 클래스의 코드만 수정하면 되므로, 자식 클래스에 발생할 수 있는 버그나 오류를 줄이고 코드를 관리하기 쉬워집니다.

 

2. 자바 상속 구현 사용

 

  • extends

자바에서 상속을 구현하려면, 자식 클래스 선언 'extends' 키워드를 사용하여 상위 클래스를 명시합니다. 아래 코드는 상속의 예시입니다.

 

class ParentClass {

    // 필드 및 메서드

}

 

class ChildClass extends ParentClass {

    // 필드 및 메서드

}

 

  • Override

상속을 통해 자식 클래스가 부모 클래스의 메서드를 재정의(Override)하는 경우가 있습니다. 이를 통해 동일한 이름의 메서드를 다른 기능으로 활용할 있습니다. 재정의는 'Override' 키워드를 사용하여 구현합니다.

 

class ChildClass extends ParentClass {

    @Override

    public void someMethod() {

        // 부모 클래스의 someMethod 메서드를 재정의

    }

}

 

  • super

또한, 부모 클래스의 생성자, 메서드, 변수를 자식 클래스에서 사용할 있습니다. 이를 위해 'super' 키워드를 사용합니다.

 

class ChildClass extends ParentClass {

    public ChildClass() {

        super(); // 부모 클래스의 생성자 호출

    }

 

    public void doSomething() {

        super.someMethod(); // 부모 클래스의 someMethod 메서드 호출

        int value = super.someVariable; // 부모 클래스의 someVariable 변수 사용

    }

}

 


3. 상속 예제

 

자동차를 나타내는 클래스를 상속하여 전기 자동차를 구현하는 예제입니다. 예제에서는 부모 클래스인 Car 상속한 ElectricCar 생성하고, Car 추가로 배터리 용량이라는 속성을 부여할 것입니다. 또한, Car 클래스의 메서드를 재정의하여 전기 자동차에 맞는 기능으로 구현해 보겠습니다.

 

  • 기존의 Car 클래스 
class Car {
    private String make;
    private String model;
    private int speed;

    public Car(String make, String model) {
        this.make = make;
        this.model = model;
        this.speed = 0;
    }

    public void accelerate() {
        speed += 10;
    }

    public void brake() {
        speed -= 10;
    }

    public void showInfo() {
        System.out.println("제조사: " + make + ", 모델명: " + model + ", 현재 속도: " + speed);
    }
}

 

  • 상속을 통한 ElectricCar 클래스 구현 
class ElectricCar extends Car {
    private int batteryCapacity;

    public ElectricCar(String make, String model, int batteryCapacity) {
        super(make, model);
        this.batteryCapacity = batteryCapacity;
    }

    @Override
    public void accelerate() {
        super.accelerate();
        System.out.println("전기 자동차 가속 중...");
    }

    @Override
    public void brake() {
        super.brake();
        System.out.println("전기 자동차 감속 중...");
    }

    @Override
    public void showInfo() {
        super.showInfo();
        System.out.println("배터리 용량: " + batteryCapacity + "kWh");
    }
}

public class Main {
    public static void main(String[] args) {
        Car car1 = new Car("현대", "소나타");
        ElectricCar car2 = new ElectricCar("테슬라", "모델 S", 85);

        car1.accelerate();
        car1.showInfo();

        car2.accelerate();
        car2.accelerate();
        car2.showInfo();
    }
}

다른 예제로, 도형 클래스를 상속받아 사각형, , 삼각형 이외의 도형들을 구현하는 예제도 생각해볼 있습니다. 이때 각각의 도형들이 공통적으로 가지고 있는 속성(예를 들어, 색상) 메서드(예를 들어, 넓이 계산) 상위 클래스인 도형 클래스에서 정의하고, 자식 클래스에서는 도형에 맞는 속성과 메서드를 재정의하거나 추가할 있습니다.

 

 

상속을 활용하면 코드의 재사용성이 높아지고, 객체 지향 프로그래밍의 핵심 원칙에 따라 코드를 작성하게 됩니다. 이를 통해 프로젝트의 규모가 커졌을 유지 보수가 용이하고 효율적인 협업이 가능해집니다

728x90
반응형

'Programming > Java' 카테고리의 다른 글

자바의 추상 클래스  (0) 2023.07.30
자바의 다형성  (0) 2023.07.29
자바의 클래스와 객체  (0) 2023.07.27
자바의 다차원 배열  (0) 2023.07.26
자바의 조건문과 반복문  (0) 2023.07.25