개발/JAVA

Java 객체지향 프로그래밍 - 상속(Inheritance) 개념 이해하기

예니03 2025. 2. 4. 09:53
반응형

1. 상속(Inheritance)이란?

자바(Java)에서 상속(Inheritance) 이란 기존 클래스(부모 클래스, 슈퍼 클래스)의 기능을 그대로 물려받고, 추가적인 기능을 확장할 수 있는 개념입니다. 상속을 활용하면 코드의 재사용성을 높이고 유지보수를 쉽게 할 수 있습니다.

예를 들어, 사람(Person)이라는 클래스가 있고, 학생(Student)이라는 클래스를 만들고 싶다고 가정해 봅시다. 학생도 사람의 특성을 가지므로, 사람(Person) 클래스를 상속받아 필요한 기능을 추가하면 됩니다.

 

2. 예제 코드로 배우는 상속

1) 부모 클래스(Person) 만들기

먼저, 사람(Person) 클래스를 정의해 보겠습니다.

package com.javaex.oop.person;

public class Person {

    protected String name;
    protected int age;
    
    // 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    // Getter 및 Setter 메서드
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    // 정보 출력 메서드
    public void showInfo() {
        System.out.println("Name: " + name + " Age: " + age);
    }
}

설명:

  • protected 키워드를 사용하여 name과 age 필드를 선언합니다. (상속받는 클래스에서도 접근 가능)
  • 생성자를 사용하여 객체를 초기화합니다.
  • showInfo() 메서드를 만들어 객체 정보를 출력할 수 있도록 합니다.

 

2) 자식 클래스(Student) 만들기

부모 클래스를 상속받아 학생(Student) 클래스를 만들어 보겠습니다.

package com.javaex.oop.person;

public class Student extends Person {
    private String schoolName;
    
    // 생성자
    public Student(String name, int age, String schoolName) {
        super(name, age); // 부모 클래스의 생성자 호출
        this.schoolName = schoolName;
    }
    
    // Getter 및 Setter 메서드
    public String getSchoolName() {
        return schoolName;
    }
    public void setSchoolName(String schoolName) {
        this.schoolName = schoolName;
    }
    
    // showInfo() 메서드 오버라이딩(재정의)
    @Override
    public void showInfo() {
        super.showInfo(); // 부모 클래스의 showInfo() 실행
        System.out.println("School: " + schoolName);
    }
}

설명:

  • Student 클래스는 Person 클래스를 extends 키워드를 사용해 상속받습니다.
  • super(name, age);를 사용해 부모 클래스의 생성자를 호출합니다.
  • showInfo() 메서드를 오버라이딩(Overriding) 하여 학교 정보까지 출력할 수 있도록 확장합니다.

 

3) 실행 클래스(PersonApp) 만들기

이제 Person과 Student 객체를 생성하고, 메서드를 실행해 보겠습니다.

package com.javaex.oop.person;

public class PersonApp {
    public static void main(String[] args) {
        // 학생 객체 생성
        Student s1 = new Student("정우성", 45, "서울고등학교");
        s1.showInfo();
        
        Student s2 = new Student("이정재", 45, "한국고등학교");
        s2.showInfo();
    }
}

출력 결과:

Name: 정우성 Age: 45
School: 서울고등학교
Name: 이정재 Age: 45
School: 한국고등학교

 

 

3. 상속의 장점

  1. 코드의 재사용성 증가: 기존 코드를 다시 작성할 필요 없이 부모 클래스를 상속받아 활용할 수 있습니다.
  2. 유지보수 용이: 부모 클래스의 기능을 변경하면 자식 클래스에도 자동 반영됩니다.
  3. 코드의 가독성 향상: 공통 기능을 부모 클래스에 정의하면 코드가 더 명확해집니다.
  4. 객체지향 프로그래밍(OOP)의 원칙 준수: 상속을 활용하면 캡슐화, 다형성, 추상화 등의 개념을 쉽게 적용할 수 있습니다.

 

4. 상속 시 주의할 점

  1. 다중 상속은 지원하지 않음: Java에서는 하나의 부모 클래스만 상속받을 수 있습니다.
  2. 부모 클래스의 생성자 호출 필수: 자식 클래스의 생성자에서 super()를 사용해 부모 클래스의 생성자를 호출해야 합니다.
  3. 접근 제한자(Access Modifier) 주의:
    • private: 자식 클래스에서 접근 불가능
    • protected: 자식 클래스에서 접근 가능
    • public: 어디서든 접근 가능
    • default: 같은 패키지 내에서만 접근 가능

 

5. 마무리

이번 글에서는 Java의 상속(Inheritance) 개념을 배우고, 실제로 코드 예제를 통해 구현해 보았습니다. 상속을 활용하면 코드의 재사용성유지보수성을 높일 수 있으며, 객체지향 프로그래밍의 핵심 개념을 적용할 수 있습니다.💡 

 

반응형