나의개발일지
상속 본문
728x90
자바의 상속은 객체지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 기존의 클래스를 재사용하여 새로운 클래스를 생성하는 메커니즘이다
상속
Object 클래스
- 모든 클래스의 조상 클래스
- 별도의 extends 선언이 없는 클래스들은 extends Object가 생략됨
- 따라서 모든 클래스에는 Object 클래스에 정의된 메서드가 있음 ※ 다형성 파트에서 중요
단일 상속
- 다중 상속의 경우 여러 클래스의 기능을 물려받을 수 있으나 관계가 매우 복잡해짐
- 자바는 단일 상속만 지원
- 대신 interface와 포함 관계(has a)로 단점 극복
상속 예시
// 부모 클래스 (상위 클래스)
class Animal {
String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + " is eating.");
}
}
// 자식 클래스 (하위 클래스)
class Dog extends Animal {
public Dog(String name) {
// 부모 클래스의 생성자 호출
super(name);
}
public void bark() {
System.out.println(name + " is barking.");
}
}
public class InheritanceExample {
public static void main(String[] args) {
// 자식 클래스의 인스턴스 생성
Dog myDog = new Dog("Buddy");
// 부모 클래스의 메서드 호출
myDog.eat();
// 자식 클래스의 메서드 호출
myDog.bark();
}
}
위의 코드에서 Dog 클래스는 Animal 클래스를 extends구문으로 상속받는다 Dog클래스는 Animal 클래스의 모든 맴버변수와 멤버 메서들를 사용할 수 있다.
Super 키워드
- super. 을 이용해 조상의 메서드 호출로 조상의 코드 재사용
- super() 는 조상 클래스의 생성자 호출
- super()는 자식 클래스 생성자의 맨 첫 줄에서만 호출 가능
- 명시적으로 this() 또는 super()를 호출하지 않는 경우 컴파일러가 super() 삽입
1. 부모 클래스의 메서드 호출
class Animal {
void makeSound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
void makeSound() {
super.makeSound(); // 부모 클래스의 makeSound 메서드 호출
System.out.println("Dog barks");
}
}
2. 부모 클래스의 생성자 호출
class Animal {
String type;
Animal(String type) {
this.type = type;
}
}
class Dog extends Animal {
String breed;
Dog(String type, String breed) {
super(type); // 부모 클래스의 생성자 호출
this.breed = breed;
}
}
상속을 하는 이유
1. 코드 재사용성
상속은 기존 클래스의 코드를 재사용하여 새로운 클래스를 생성할 수 있다. 부모 클래스의 멤버(필드, 메서드)를 자식 클래스에서 상속받아 사용함으로써 중복 코드를 줄이고 코드의 재사용성을 높인다.
2. 일관성 유지
상속을 통해 클래스 간에 일관된 인터페이스와 구조를 유지할 수 있다. 부모 클래스에서 정의된 멤버를 자식 클래스에서 그대로 사용하므로, 프로그램의 구조가 일관되고 예측 가능해진다.
3. 확장성
자식 클래스에서 부모 클래스의 기능을 확장할 수 있다. 새로운 멤버를 추가하거나 부모 클래스의 메서드를 오버라이딩하여 새로운 동작을 정의함으로써 프로그램을 확장할 수 있다.
4. 유지보수성 향상
상속을 사용하면 코드의 유지보수성이 향상된다. 변경이 필요한 경우, 부모 클래스의 수정만으로 모든 자식 클래스에 변경이 반영될 수 있다. 이는 코드 수정이나 추가 작업에 대한 작업량을 감소시키고 버그를 줄일 수 있다.
5. 다형성 제공
상속은 다형성을 구현하는데 기여한다. 부모 클래스 타입의 참조 변수로 자식 클래스의 객체를 다룰 수 있어, 코드의 유연성이 높아지고 다양한 객체를 효과적으로 다룰 수 있다.
728x90
반응형