본문 바로가기
Java

[JAVA] 상속(Inheritance)

by 임혁진 2024. 11. 27.

상속의 중요성과 활용: 중복 코드를 줄이고 유지보수성을 높이자!

상속이란?
상위 클래스(부모)의 속성과 메서드를 하위 클래스(자식)가 물려받는 개념.

 

코드의 중복은 유지보수를 어렵게 만듭니다. 아래는 상속을 사용하지 않았을 때의 코드와, 상속을 활용해 효율적으로 개선된 예제를 비교해 보겠습니다.


상속을 사용하지 않은 코드 (Bad Ver.)

public class Employee {
    String name;
    int age;
    String department; // 부서

    String info() {
        return "이름: " + name + ", 나이: " + age + ", 부서: " + department;
    }
}

public class Student {
    String name;
    int age;
    String studentId; // 학번

    String info() {
        return "이름: " + name + ", 나이: " + age + ", 학번: " + studentId;
    }
}

public class Teacher {
    String name;
    int age;
    String subject; // 과목

    String info() {
        return "이름: " + name + ", 나이: " + age + ", 과목: " + subject;
    }
}

문제점:

  • 각 클래스에 동일한 속성(name, age)과 메서드(info)가 반복적으로 선언됨.
  • 코드 중복으로 인해 수정할 때 모든 클래스를 일일이 수정해야 하는 비효율적인 구조.

상속을 사용한 코드 (Good Ver.)

1. 부모 클래스 Person 정의
공통 속성과 메서드를 부모 클래스에 정의합니다.

public class Person {
    String name;
    int age;

    String info() {
        return "이름: " + name + ", 나이: " + age;
    }
}

2. 자식 클래스에서 상속받기
각 클래스는 Person 클래스를 상속받아 고유 속성만 추가하면 됩니다.

public class Employee extends Person {
    String department; // 부서

    @Override
    String info() {
        return super.info() + ", 부서: " + department;
    }
}

public class Student extends Person {
    String studentId; // 학번

    @Override
    String info() {
        return super.info() + ", 학번: " + studentId;
    }
}

public class Teacher extends Person {
    String subject; // 과목

    @Override
    String info() {
        return super.info() + ", 과목: " + subject;
    }
}

상속의 상속: 확장 가능성

Person을 상속받은 클래스에서도 추가적인 상속이 가능합니다. 아래는 Mother 클래스를 상속받아 확장한 예제입니다.

public class Mother {
    String gender;
}

public class Person extends Mother {
    String name;
    int age;

    String info() {
        return "이름: " + name + ", 나이: " + age;
    }
}

상속 사용 예제: MainClass

public class MainClass {
    public static void main(String[] args) {
        // 부모 클래스 객체
        Person p = new Person();
        p.name = "홍길동";
        p.age = 20;
        System.out.println(p.info());
        // 출력: "이름: 홍길동, 나이: 20"

        // 학생 객체
        Student s = new Student();
        s.name = "이순신";
        s.age = 30;
        s.studentId = "123456";
        System.out.println(s.info());
        // 출력: "이름: 이순신, 나이: 30, 학번: 123456"

        // 선생님 객체
        Teacher t = new Teacher();
        t.name = "피카츄";
        t.age = 40;
        t.subject = "수학";
        System.out.println(t.info());
        // 출력: "이름: 피카츄, 나이: 40, 과목: 수학"
    }
}

상속의 장점

  1. 코드 재사용: 공통 코드를 부모 클래스에 작성하여 중복 제거.
  2. 유지보수성 증가: 부모 클래스의 변경만으로 모든 자식 클래스가 업데이트됨.
  3. 확장성: 추가적인 기능을 쉽게 확장 가능.

이처럼 상속을 활용하면 코드의 가독성과 유지보수성을 대폭 향상시킬 수 있습니다! 🌟

 

다음 포스트에선 상속과 연관이 큰 오버라이딩, 오버로딩 및 super-this 를 알아보도록 하겠습니다.