Java 상속 개념 이해와 활용 사례 정리
Java에서 상속은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 이를 통해 기존 클래스를 토대로 새로운 클래스를 생성할 수 있는 기능을 제공합니다. 이로 인해 코드의 재사용성을 높이고, 유지보수를 용이하게 하며, 소프트웨어의 구조를 더욱 명확하게 만들 수 있습니다.

상속의 정의와 장점
상속은 한 클래스가 다른 클래스의 속성과 메소드를 물려받는 구조를 의미합니다. 부모 클래스(상위 클래스)의 특성과 기능을 자식 클래스(하위 클래스)가 상속받아 사용할 수 있습니다. 상속을 통해 얻을 수 있는 주요 장점은 다음과 같습니다:
- 코드의 재사용성: 반복적으로 사용되는 코드 블록을 필요할 때마다 재작성할 필요가 없어집니다.
- 유지보수가 용이: 공통 기능이 중앙에서 관리되므로, 버그 수정이나 기능 변경 시 한 곳만 수정하면 됩니다.
- 구조화된 클래스 디자인: 클래스 간의 관계를 체계적으로 구성하여, 프로그램의 이해도를 높입니다.
Java 상속의 기본 구조
Java에서 상속을 구현하기 위해서는 ‘extends’ 키워드를 사용합니다. 자식 클래스가 부모 클래스를 상속받을 때는 다음과 같은 구조로 작성합니다:
class 부모 {
// 부모 클래스의 필드 및 메소드
}
class 자식 extends 부모 {
// 자식 클래스의 추가적인 필드 및 메소드
}
이와 같은 방식으로 자식 클래스는 부모 클래스의 모든 속성과 메소드를 사용할 수 있게 됩니다. 하지만, 부모 클래스의 멤버가 어떤 접근 제어자를 사용하는지에 따라 자식 클래스에서 사용할 수 있는 요소가 제한될 수 있습니다.
생성자와 상속
자식 클래스의 인스턴스가 생성될 때, 부모 클래스의 생성자도 자동으로 호출됩니다. 이 과정에서 Java 컴파일러는 ‘super()’라는 호출을 추가하여 부모 클래스의 생성자를 먼저 실행한 후 자식 클래스의 생성자를 실행하게 됩니다. 예를 들어 다음과 같은 코드가 있습니다:
public class Parent {
public Parent() {
System.out.println("부모 생성자");
}
}
public class Child extends Parent {
public Child() {
super(); // 부모 생성자 호출
System.out.println("자식 생성자");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child(); // 부모 생성자와 자식 생성자 호출
}
}
위의 코드가 실행되면 “부모 생성자”와 “자식 생성자”가 순서대로 출력됩니다.
instanceof 연산자
Java에서는 객체가 어떤 클래스의 인스턴스인지 확인하기 위해 ‘instanceof’라는 연산자를 사용할 수 있습니다. 이를 통해 부모 클래스와 자식 클래스 간의 관계를 확인할 수 있으며, 특정 객체가 어떤 클래스의 인스턴스인지 판별하는 데 유용합니다. 예시는 다음과 같습니다:
class Parent {}
class Child extends Parent {}
public class InstanceofExample {
public static void main(String[] args) {
Parent p = new Parent();
Child c = new Child();
System.out.println(p instanceof Parent); // true
System.out.println(c instanceof Parent); // true
System.out.println(p instanceof Child); // false
System.out.println(c instanceof Child); // true
}
}
이처럼 ‘instanceof’를 통해 각 객체가 어떤 클래스 인스턴스인지 확인할 수 있습니다.
상속의 제한 사항
Java에서는 다중 상속을 지원하지 않습니다. 하나의 클래스가 여러 부모 클래스를 상속받는 방식은 혼란을 초래할 수 있기 때문입니다. 동일한 메소드 이름이나 필드가 존재할 경우, 어떤 부모의 메소드를 사용할지를 결정하는 데 어려움이 생길 수 있습니다. 따라서, Java에서는 클래스가 하나의 부모 클래스만을 상속받도록 제한하고 있습니다.
상속에는 두 가지 주요 형태가 있습니다:
- 다단계 상속: 부모 클래스로부터 자식 클래스와 손자 클래스를 포함하는 구조입니다.
- 계층적 상속: 하나의 부모 클래스가 여러 자식 클래스를 가지는 형태입니다.
접근 제어자와 상속
상속을 통해 부모 클래스의 필드와 메소드를 자식 클래스가 물려받을 수 있지만, 접근 제어자에 따라 사용할 수 있는 여부가 달라집니다.
- public: 모든 클래스에서 접근 가능
- protected: 동일 패키지 내 또는 하위 클래스에서 접근 가능
- default: 동일 패키지 내에서만 접근 가능
- private: 해당 클래스 내에서만 접근 가능
결론적으로, 자식 클래스가 부모 클래스의 멤버를 물려받기 위해서는 해당 멤버의 접근 제어자가 public 또는 protected여야만 합니다.

상속을 통한 효과적인 프로그래밍
Java의 상속 개념은 객체 지향 프로그래밍에서 매우 중요한 요소로, 프로그래머가 코드의 효율성 및 가독성을 높일 수 있게 도와줍니다. 자식 클래스는 부모 클래스로부터 속성과 메소드를 상속받아, 이를 바탕으로 새로운 기능을 추가할 수 있습니다. 상속을 제대로 이해하고 활용하는 것은 Java 개발자로서의 성장에 큰 도움이 됩니다.
상속 개념을 통해 여러분은 더 구조적이고 효율적인 코드를 작성할 수 있으며, 유지보수와 재사용성이 높아진다는 이점을 누릴 수 있습니다. 따라서 Java 상속을 적극적으로 활용해 보시기 바랍니다.
자주 묻는 질문 FAQ
Java 상속이란 무엇인가요?
Java에서 상속은 한 클래스가 다른 클래스로부터 속성 및 메소드를 물려받는 기능을 의미합니다. 이를 통해 기존 클래스를 기반으로 새로운 클래스를 만들 수 있습니다.
상속을 사용하면 어떤 이점이 있나요?
상속을 통해 코드 재사용성이 높아지고, 유지보수가 쉬워지며, 클래스 간의 구조가 명확해집니다. 이는 프로그램 개발의 효율성을 증가시킵니다.
Java에서는 다중 상속이 가능한가요?
Java는 다중 상속을 지원하지 않습니다. 이는 여러 부모 클래스에서 같은 메소드를 물려받을 경우 발생할 수 있는 혼란을 방지하기 위한 설계입니다.