나의개발일지

상속 본문

언어/Java

상속

아. 이렇게 하면 될거 같은데.. 2024. 1. 23. 01:43
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
반응형

'언어 > Java' 카테고리의 다른 글

다형성  (0) 2024.01.28
오버로딩/오버라이딩  (0) 2024.01.25
변수  (0) 2024.01.21
객체지향  (0) 2024.01.16
배열  (0) 2024.01.16