코딜기
[Java] 상속 (Inheritance) 본문
반응형
상속(Inheritance)이란?
- 부모 클래스가 가진 속성과 기능을 자식 클래스가 물려받는 것을 의미합니다.
- 상속이 이루어지면 부모 클래스의 모든 필드와 메서드들이 자식 클래스에 상속되므로, 각 클래스마다 중복되는 속성과 기능을 일일이 작성할 필요가 없어집니다.
- 상속을 통해 자식 클래스는 부모 클래스의 기능을 그대로 사용할 수 있으며, 자식 클래스만의 고유한 속성이나 메서드를 추가하여 기존 클래스를 확장할 수 있습니다.
- 이로 인해 코드의 재사용성이 높아지고, 중복 코드가 줄어들며, 코드의 가독성과 유지보수성이 향상되는 이점이 있습니다.
상속을 고려하지 않았을 때의 비효율성
- 위 사진을 보면 각각 클래스는 다르지만, 가지고 있는 속성과 기능이 비슷한 것을 찾아볼 수 있습니다.
- 모든 동물들 클래스가 name, age, favorite이라는 속성을 가지고 있고 breath() 기능과 sleep() 기능을 가지고 있습니다.
- 이 상황에서 새로운 동물을 추가한다고 했을 때, 똑같은 코드를 작성해야 할 것이고, 이는 코드의 비효율성으로 이어질 것입니다.
상속을 고려했을 때의 효율성
- Animal 클래스를 동물들이 공통적으로 가지고 있는 속성과 기능을 모두 모아놓은 클래스로 작성했습니다.
- 그리고 나머지 동물 클래스들이 Animal 클래스를 상속받는 형식으로 구축을 해주었습니다.
- 이처럼 상속이 이루어진다면 부모가 가진 모든 필드와 메서드들이 자식에게 물려지게 되고, 클래스마다 중복되는 속성과 기능을 일일이 작성할 필요가 없게 됩니다.
- 또한 각자가 가지는 고유한 속성들이 있다면, 자기 자신의 클래스에 추가하여 개념을 확장할 수 있을 것입니다.
상속 사용
- 공통 속성으로 name과 age를 갖는 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