자바에서 클래스는 상속 관계와 포함 관계를 가질 수 있습니다.
- 상속 관계 (Inheritance)
상속 관계는 부모 클래스와 자식 클래스 간의 관계입니다. 자식 클래스는 부모 클래스의 특징을 물려받아 사용할 수 있습니다. 부모 클래스는 자식 클래스에게 공통적인 특징을 제공하며, 자식 클래스는 부모 클래스의 특징을 확장하여 사용할 수 있습니다.
상속 관계는 extends 키워드를 사용하여 선언합니다. 예를 들어, 다음과 같이 부모 클래스인 Animal 클래스와 자식 클래스인 Dog 클래스를 정의할 수 있습니다.
// Animal 클래스 정의
public class Animal {
public void eat() {
System.out.println("Animal is eating");
}
}
// Dog 클래스 정의 (Animal 클래스를 상속받음)
public class Dog extends Animal {
public void bark() {
System.out.println("Dog is barking");
}
}
위 코드에서 Animal 클래스는 eat() 메서드를 가지고 있습니다. Dog 클래스는 Animal 클래스를 상속받았으며, bark() 메서드를 추가로 가지고 있습니다. Dog 클래스는 Animal 클래스의 eat() 메서드도 사용할 수 있습니다.
- 포함 관계 (Composition)
포함 관계는 상속 이외의 '클래스를 재사용하는 방법 중 하나'로, 한 클래스가 다른 클래스를 멤버 변수로 가지는 관계입니다. 이러한 관계를 has-a 관계라고도 합니다. 포함 관계는 객체 지향 프로그래밍에서 객체를 조립하는 데 매우 중요한 개념입니다.
포함 관계는 클래스 내부에 다른 클래스의 인스턴스 변수를 선언하여 구현합니다. 예를 들어, 다음과 같이 Car 클래스가 Engine 클래스를 멤버 변수로 가지는 경우를 생각해보겠습니다.
// Engine 클래스 정의
public class Engine {
public void start() {
System.out.println("Engine is starting");
}
}
// Car 클래스 정의 (Engine 클래스를 포함함)
public class Car {
private Engine engine;
public Car() {
this.engine = new Engine(); // Engine 객체 생성
}
public void startCar() {
engine.start(); // Engine 객체의 start() 메서드 호출
}
}
위 코드에서 Car 클래스는 Engine 클래스를 멤버 변수로 가지고 있습니다. Car 클래스의 생성자에서는 Engine 객체를 생성하고, startCar() 메서드에서는 Engine 객체의 start() 메서드를 호출합니다. 이렇게 함으로써 Car 클래스는 Engine 클래스의 기능을 사용할 수 있습니다.
'java(자바)' 카테고리의 다른 글
[java(자바)] final, finally, finalize의 차이점? _디버깅의 눈물 (0) | 2023.02.24 |
---|---|
[java(자바)] 다형성 _디버깅의 눈물 (0) | 2023.02.24 |
[java(자바)] non-static 멤버와 static 멤버의 차이점 _디버깅의 눈물 (0) | 2023.02.23 |
[java(자바)] 2차원 배열 정렬하기 Comparator, 람다식 _디버깅의 눈물 (0) | 2022.10.20 |
[java(자바)] treeSet 오름차순 정렬하기 Collections.reverseOrder() _디버깅의 눈물 (1) | 2022.10.05 |