일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 메소드
- 자바 스프링
- spring
- 초보코딩탈출
- 자바
- 데이터베이스
- 코딩초보
- github
- JAVA기초
- 프로그래밍
- 알고리즘
- Git
- Java
- 자바기초
- 이클립스
- 클래스
- 배열
- JShell
- 제이쉘
- 컴퓨터과학개론
- 초보코딩
- 기초코딩
- eclips
- 프로그래밍언어
- 스프링 기초
- 자바프로그래밍
- 스프링
- Elk
- 프로그래밍기초
- 리눅스
- Today
- Total
키보드워리어
[자바]객체지향 - 왜 상속을 사용해야 하는가? (Inheritance) 본문
상속
객체지향프로그래밍에서 클래스는 코드를 재사용하고 중복을 방지하기 위한 도구입니다.
그러나 두 클래스 사이에 중복된 코드가 많을 때, 클래스를 복제하여 중복을 제거하는 것은 유지보수를 어렵게 만들 수 있습니다.
이때 상속(Inheritance)이라는 개념이 유용합니다.
상속은 이미 구현된 클래스(부모 클래스)를 이용해 새로운 클래스(자식 클래스)를 만들 수 있도록 해줍니다. 이를 통해 중복된 코드를 제거하고 객체의 관계를 더 명확하게 표현할 수 있습니다.
예를 들어, Person 클래스와 Student 클래스를 생각해 보겠습니다. 두 클래스는 많은 멤버 변수와 메서드를 공유하지만, 일부 멤버 변수(collegeName, year)만 Student 클래스에서 사용합니다. 이때 상속을 사용하면 Person 클래스에서 이미 구현된 코드를 Student 클래스에서 재사용할 수 있습니다.
Person에서 email이 바뀔경우 Student에서도 바꾸어야 하고 너무 복잡해지는걸 막기 위해서 상속을 이용합니다.
public class Person {
private String name;
private int age;
private String email;
// constructor, getter/setter methods
}
public class Student extends Person {
private String collegeName;
private int year;
// constructor, getter/setter methods
}
위 코드에서 Student 클래스는 Person 클래스를 상속합니다.
이를 통해 Person 클래스에 있는 코드를 Student 클래스에서 재사용할 수 있습니다. 이제 Student 클래스에서는 collegeName과 year 멤버 변수만 추가하면 됩니다.
이러한 상속 관계를 통해 코드의 재사용성을 높일 수 있으며, 객체의 관계를 더 명확하게 표현할 수 있습니다. 하지만 상속은 항상 좋은 것만은 아닙니다. 상속은 is-a 관계를 나타내는 경우에만 사용해야 합니다. 즉, 자식 클래스가 부모 클래스의 특정 유형이 되어야 합니다.
상속의 좋은 예시
// 좋은 예시: Square는 Rectangle의 일종이다.
class Rectangle {
protected int width;
protected int height;
public void setWidth(int width) {
this.width = width;
}
public void setHeight(int height) {
this.height = height;
}
public int getArea() {
return width * height;
}
}
class Square extends Rectangle {
@Override
public void setWidth(int width) {
this.width = width;
this.height = width;
}
@Override
public void setHeight(int height) {
this.width = height;
this.height = height;
}
}
상속의 안좋은 예시
// 좋지 않은 예시: Bird 클래스를 상속받아 Airplane 클래스를 만드는 경우
class Bird {
protected int wings;
protected String feather;
public void fly() {
System.out.println("I can fly");
}
}
class Airplane extends Bird {
private int engine;
public void takeOff() {
System.out.println("I can take off");
}
}
만약 두 클래스 사이에 is-a 관계가 없다면 상속은 적절하지 않습니다.
예를 들어, Bird 클래스와 Airplane 클래스가 있다고 가정해 보겠습니다. Bird 클래스는 날개와 깃털을 가지고 있으며 날아다닐 수 있지만, Airplane 클래스는 날개가 없고 엔진으로 움직입니다.
이때 Bird 클래스를 상속받아 Airplane 클래스를 만든다면 코드의 재사용성을 높이지만, 이는 올바른 객체의 관계를 표현하지 않습니다. Bird 클래스와 Airplane 클래스는 is-a 관계가 아니기 때문입니다.
상속은 코드의 재사용성을 높이고 객체의 관계를 명확하게 표현할 수 있는 유용한 도구이지만, 항상 적절한 상황에서 사용해야 합니다. Is-a 관계가 아닌 경우에는 다른 방법을 고려해보아야 합니다.
'JAVA > 입문' 카테고리의 다른 글
[자바] 객체지향 - super키워드를 이용한 부모클래스 이용 (0) | 2023.03.09 |
---|---|
[자바] 객체 클래스(Object Class)는 상속의 최상위 클래스 (0) | 2023.03.06 |
[자바] 객체 지향 프로그래밍 소개 - OOP (0) | 2023.02.22 |
[자바] 가변적 매개변수 - variable arguments (0) | 2023.02.19 |
[자바]배열 Arrays - for enhanced loop문 및 유용 메서드소개 (0) | 2023.02.12 |