JAVA의 클래스 상속
상속(Inheritance)은 기존 클래스(슈퍼 클래스 또는 기본 클래스)를 기반으로 새 클래스(하위 클래스 또는 파생 클래스)를 만들 수 있게 해주는 객체 지향 프로그래밍의 기본 개념입니다. 이 개념을 사용하면 기존 클래스의 기능을 재사용하고 확장하여 코드 재사용성과 유지 관리성을 높일 수 있습니다.
Java에서는 extends 키워드를 사용하여 상속을 설정할 수 있습니다. 다음은 기본적인 예입니다.
class Animal {
void eat() {
System.out.println("Animal is eating");
}
}
class Dog extends Animal {
void bark() {
System.out.println("Dog is barking");
}
}
이 예에서 Dog 클래스는 Animal 클래스의 하위 클래스입니다. extends 키워드는 Dog이 Animal에서 상속됨을 나타냅니다. 결과적으로 Dog 클래스는 자동으로 Animal 클래스의 eat() 메서드에 대한 액세스 권한을 얻습니다.
다음은 Java의 클래스 상속에 대해 이해해야 할 몇 가지 핵심 사항입니다.
슈퍼클래스와 서브클래스의 관계
슈퍼클래스는 서브클래스가 상속하는 기존 클래스입니다. 서브클래스는 슈퍼클래스의 모든 비공개 멤버(필드 및 메서드)에 액세스할 수 있습니다.
메서드 재정의(Overriding)
하위 클래스는 수퍼클래스에서 상속된 자체 메서드 구현을 제공할 수 있습니다. 이를 메서드 재정의라고 합니다. 서브클래스의 메서드는 슈퍼클래스의 메서드와 동일한 이름, 반환 유형 및 매개변수 목록을 가져야 합니다.
액세스 수정자
액세스 수정자(public, protected, default, private)는 슈퍼클래스와 서브클래스 모두에서 멤버의 가시성을 결정합니다. 서브클래스는 슈퍼클래스의 public 및 protected 멤버에 액세스할 수 있지만 private 멤버에는 액세스할 수 없습니다.
생성자 상속
하위 클래스는 상위 클래스에서 생성자를 상속하지 않지만 자체 생성자에서 super() 키워드를 사용하여 상위 클래스의 생성자를 호출할 수 있습니다.
단일 상속
Java는 단일 상속을 지원합니다. 즉, 클래스는 단일 수퍼클래스에서만 상속할 수 있습니다. 이는 클래스가 여러 클래스에서 상속할 수 있는 다중 상속과 대조됩니다.
객체 클래스
extends를 사용하여 명시적으로 슈퍼클래스를 지정하지 않은 경우 클래스는 모든 Java 클래스의 루트 클래스인 Object 클래스에서 암시적으로 상속됩니다.
다음은 생성자와 함께 상속을 사용하는 방법을 보여주는 간단한 예입니다.
class Vehicle {
String type;
Vehicle(String type) {
this.type = type;
}
void drive() {
System.out.println(type + " is being driven");
}
}
class Car extends Vehicle {
Car(String type) {
super(type);
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car("Sedan");
myCar.drive(); // Output: Sedan is being driven
}
}
상속은 강력한 도구이지만 신중하게 사용해야 합니다. 지나치게 복잡한 관계를 피하기 위해 클래스에서 명확하고 논리적인 계층 구조를 유지하는 것이 중요합니다.