Java 상속에 관하여

2025. 2. 3. 22:52·java

객체지향 프로그래밍(OOP)에서 상속 (Inheritance) 과 다형성 (Polymorphism) 은 코드 재사용성과 유연성을 높이는 중요한 개념입니다. 이 글에서는 Java에서 객체 상속이 동작하는 과정과 다형성으로 인해 메서드가 어떻게 동작하는지 예제 코드와 함께 설명하겠습니다.

1. Java에서 객체 상속의 동작 과정

1.1 상속(Inheritance) 개념

Java에서 상속은 기존 클래스 (부모 클래스, superclass) 의 속성과 메서드를 새로운 클래스 (자식 클래스, subclass) 가 물려받는 기능입니다. 이를 통해 코드의 중복을 줄이고, 유지보수를 쉽게 할 수 있습니다.

1.2 기본적인 상속 예제

class Parent {
    String name = "Parent";

    void display() {
        System.out.println("This is parent class");
    }
}

class Child extends Parent {
    void show() {
        System.out.println("This is child class");
    }
}

public class InheritanceExample {
    public static void main(String[] args) {
        Child child = new Child();
        child.display(); // 부모 클래스 메서드 호출
        child.show();    // 자식 클래스 메서드 호출
    }
}

실행 결과

This is parent class
This is child class

위 코드에서 Child 클래스는 Parent 클래스를 상속받아 display() 메서드를 사용할 수 있습니다.


2. 상속에서 메서드 오버라이딩(Method Overriding)

자식 클래스에서 부모 클래스의 메서드를 재정의 (Override) 하면, 부모 클래스의 메서드를 변경하여 사용할 수 있습니다.

2.1 메서드 오버라이딩 예제

class Parent {
    void display() {
        System.out.println("Parent's display method");
    }
}

class Child extends Parent {
    @Override
    void display() {
        System.out.println("Child's display method");
    }
}

public class OverrideExample {
    public static void main(String[] args) {
        Child child = new Child();
        child.display(); // 오버라이딩된 메서드 호출
    }
}

실행 결과

Child's display method

오버라이딩된 display() 메서드가 호출되었음을 확인할 수 있습니다.


3. 다형성(Polymorphism)과 메서드 사용 범위

3.1 다형성이란?

다형성 (Polymorphism) 은 하나의 인터페이스(또는 부모 클래스) 를 통해 여러 형태의 객체를 다룰 수 있도록 하는 개념입니다. 이를 통해 코드의 유연성과 확장성이 증가합니다.

3.2 부모 타입의 참조 변수로 자식 객체 참조

class Parent {
    void display() {
        System.out.println("Parent's display method");
    }
}

class Child extends Parent {
    @Override
    void display() {
        System.out.println("Child's display method");
    }
}

public class PolymorphismExample {
    public static void main(String[] args) {
        Parent obj = new Child(); // 부모 타입으로 자식 객체 참조
        obj.display(); // 오버라이딩된 메서드 실행
    }
}

실행 결과

Child's display method
  • 부모 클래스 타입의 참조 변수 (Parent obj) 가 자식 클래스 객체 (new Child()) 를 가리키고 있지만, 오버라이딩된 메서드가 호출됩니다.
  • 이를 동적 바인딩(Dynamic Binding)이라고 하며, 런타임에 실제 객체 타입을 기준으로 메서드가 실행됩니다.

4. 부모 타입 참조 변수의 메서드 호출 범위

부모 타입 참조 변수는 부모 클래스에서 정의된 메서드만 호출 가능하며, 자식 클래스의 고유한 메서드는 호출할 수 없습니다.

4.1 호출 범위 예제

class Parent {
    void display() {
        System.out.println("Parent's display method");
    }
}

class Child extends Parent {
    @Override
    void display() {
        System.out.println("Child's display method");
    }

    void childMethod() {
        System.out.println("Child's unique method");
    }
}

public class ReferenceExample {
    public static void main(String[] args) {
        Parent obj = new Child();
        obj.display(); // 가능 (오버라이딩된 메서드 호출)
        // obj.childMethod(); // 오류: 부모 타입 참조 변수는 자식 클래스의 고유 메서드 호출 불가
    }
}

실행 결과

Child's display method
  • display()는 부모 클래스에도 정의된 메서드이므로 호출 가능.
  • childMethod()는 Parent 클래스에 정의되지 않았기 때문에 obj.childMethod(); 에서 컴파일 오류 발생.
  • 자식 클래스의 고유 메서드를 호출하려면 다운캐스팅(Downcasting) 이 필요합니다.

5. 결론

  • 상속을 통해 부모 클래스의 속성과 메서드를 재사용할 수 있다.
  • 메서드 오버라이딩을 통해 부모 클래스의 기능을 자식 클래스에서 재정의할 수 있다.
  • 다형성을 활용하면 부모 타입으로 자식 객체를 참조할 수 있으며, 오버라이딩된 메서드는 실제 객체 타입에 따라 실행된다.
  • 부모 타입 참조 변수는 부모 클래스에 정의된 메서드만 호출할 수 있으며, 자식 클래스의 고유한 메서드를 호출하려면 다운캐스팅이 필요하다.

'java' 카테고리의 다른 글

접근 제한자에 관하여  (1) 2025.02.04
정적 바인딩과 동적 바인딩에 관하여  (0) 2025.02.04
Signature 에 관하여  (0) 2025.01.22
BufferedReader와 Scanner의 차이 및 비교  (0) 2025.01.21
숏서킷 연산에 관하여  (0) 2025.01.20
'java' 카테고리의 다른 글
  • 접근 제한자에 관하여
  • 정적 바인딩과 동적 바인딩에 관하여
  • Signature 에 관하여
  • BufferedReader와 Scanner의 차이 및 비교
heejunp
heejunp
희준개발
  • heejunp
    희준개발
    heejunp
  • 전체
    오늘
    어제
    • 분류 전체보기 (35)
      • java (16)
      • spring (1)
        • test (0)
      • web (1)
      • cloud (1)
      • database (2)
      • algorithm (7)
      • OS (2)
      • sonarqube (0)
      • ai (1)
      • 기타 (2)
      • 사고 (1)
      • go (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    heejunp
    Java 상속에 관하여
    상단으로

    티스토리툴바