코딜기

[Java] 상속 (Inheritance) 본문

Language/Java

[Java] 상속 (Inheritance)

코딜기 2024. 9. 2. 18:58
반응형

상속(Inheritance)이란?

  • 부모 클래스가 가진 속성과 기능을 자식 클래스가 물려받는 것을 의미합니다.
  • 상속이 이루어지면 부모 클래스의 모든 필드와 메서드들이 자식 클래스에 상속되므로, 각 클래스마다 중복되는 속성과 기능을 일일이 작성할 필요가 없어집니다.
  • 상속을 통해 자식 클래스는 부모 클래스의 기능을 그대로 사용할 수 있으며, 자식 클래스만의 고유한 속성이나 메서드를 추가하여 기존 클래스를 확장할 수 있습니다.
  • 이로 인해 코드의 재사용성이 높아지고, 중복 코드가 줄어들며, 코드의 가독성유지보수성이 향상되는 이점이 있습니다.

상속을 고려하지 않았을 때의 비효율성

  • 위 사진을 보면 각각 클래스는 다르지만, 가지고 있는 속성과 기능이 비슷한 것을 찾아볼 수 있습니다.
  • 모든 동물들 클래스가 name, age, favorite이라는 속성을 가지고 있고 breath() 기능과 sleep() 기능을 가지고 있습니다.
  • 이 상황에서 새로운 동물을 추가한다고 했을 때, 똑같은 코드를 작성해야 할 것이고, 이는 코드의 비효율성으로 이어질 것입니다.

상속을 고려했을 때의 효율성

  • Animal 클래스를 동물들이 공통적으로 가지고 있는 속성과 기능을 모두 모아놓은 클래스로 작성했습니다.
  • 그리고 나머지 동물 클래스들이 Animal 클래스를 상속받는 형식으로 구축을 해주었습니다.
  • 이처럼 상속이 이루어진다면 부모가 가진 모든 필드와 메서드들이 자식에게 물려지게 되고, 클래스마다 중복되는 속성과 기능을 일일이 작성할 필요가 없게 됩니다.
  • 또한 각자가 가지는 고유한 속성들이 있다면, 자기 자신의 클래스에 추가하여 개념을 확장할 수 있을 것입니다.

상속 사용

  • 공통 속성으로 nameage를 갖는 Person 클래스를 선언해 주었고, 이는 이후에 부모 클래스로 사용할 예정입니다.
public class Person {
    String name;
    int age;

    String info() {
        return "이름: " + name + ", 나이: " + age;
    }
}
  • 학생, 선생님, 직원은 모두 다 사람이기 때문에 Person이라는 클래스를 부모 클래스로 삼았습니다.
  • 자식클래스Student, Teacher, Employee는 각자가 고유하게 가지는 속성과 기능들을 자신의 클래스에 추가로 선언해 주었습니다.
public class Student extends Person {
    String studentId;

    void study() {
        System.out.println("공부를 합니다.");
    }
}
public class Teacher extends Person {
    String subject;

    void teach() {
        System.out.println(this.subject + "(을)를 가르칩니다.");
    }
}
public class Employee extends Person {
    String department;

    void work() {
        System.out.println(this.department + "부서에서 일을 합니다");
    }
}

 상속의 기본 원칙

  • 자바는 단일 상속만을 지원합니다. 즉, 한 클래스는 오직 하나의 부모 클래스만을 가질 수 있습니다.
  • 부모 클래스의 생성자는 상속되지 않으며, 부모 클래스의 private 멤버도 상속 대상에서 제외됩니다.
  • 자바의 모든 클래스는 Object 클래스를 상속받고 있으며, Object 클래스는 자바의 최상위 클래스입니다.
  • 모든 클래스는 Object 클래스의 자식 클래스입니다.
반응형

'Language > Java' 카테고리의 다른 글

[Java] super와 super()  (0) 2024.09.02
[Java] 오버라이딩 (Overriding)  (0) 2024.09.02
[Java] 상수 (Constant)  (0) 2024.08.29
[Java] final (final 필드, final 메서드)  (0) 2024.08.27
[Java] static (static 필드, static 메서드)  (0) 2024.08.27
Comments