[Java]Implements와 Extends의 차이

LeeYulhee·2023년 9월 4일
0

👉 Extends ⇒ 상속


  • 상속
    • 클래스가 다른 클래스를 상속할 때 사용(추상 클래스 포함)
  • 코드 재사용
    • 부모 클래스의 멤버 변수와 메서드를 자식 클래스에서 재사용할 수 있음
  • 단일 상속
    • Java에서 클래스는 단일 상속만 지원
    • 즉, 하나의 클래스는 하나의 부모 클래스만 상속할 수 있음
  • 메서드 오버라이딩
    • 자식 클래스는 부모 클래스의 메서드를 오버라이딩하여 구현을 변경할 수 있음
  • 부모 클래스의 생성자 호출
    • super()를 사용하여 부모 클래스의 생성자를 호출할 수 있음
class Animal {
    void makeSound() {
        System.out.println("Animal sound");
    }
}

class Dog extends Animal {
    // Dog 클래스는 Animal 클래스의 모든 속성과 메서드를 상속받음
    void makeSound() {
        System.out.println("Woof Woof");
    }
}


👉 Implements ⇒ 구현


  • 인터페이스 구현
    • implements 키워드는 클래스가 인터페이스를 구현할 때 사용
  • 메서드 구현
    • 인터페이스에 선언된 모든 메서드를 클래스에서 구현해야 함
  • 다중 구현
    • Java에서는 다중 인터페이스 구현이 가능
    • 즉, 하나의 클래스는 여러 인터페이스를 구현할 수 있음
  • 추상 메서드
    • 인터페이스는 구현된 메서드 없이 메서드의 시그니처만 정의
    • 이를 구현한 클래스는 이 메서드를 구현해야 함
interface Movable {
    void move();
}

class Car implements Movable {
    public void move() {
        System.out.println("Car is moving");
    }
}


👉 구현과 상속은 동시에 사용 가능


class ElectricCar extends Car implements Movable, Rechargeable {
    // ...
}


👉 추상 클래스와 인터페이스의 차이


  • 추상 클래스 사용 시기
    • 상속 관계를 쭉 타고 올라갔을 때 같은 조상 클래스를 상속하는데 기능까지 완벽히 똑같은 기능이 필요한 경우
    • 추상 클래스 = 상속을 위한 클래스 = IS-A 관계 = 미완성 설계도라고 표현
  • 인터페이스 사용 시기
    • 상속 관계를 쭉 타고 올라갔을 때 다른 조상 클래스를 상속하는데 같은 기능이 필요한 경우
    • 인터페이스 = 다중상속(구현) 가능 = HAS-A 관계 = 기본 설계도라고 표현
    • 모든 클래스가 인터페이스를 사용하여 기본 틀을 구성한다면 공통으로 필요한 기능들도 모든 클래스에서 오버라이딩 하여 재정의 해야 하는 번거로움이 있음
profile
공부 중인 신입 백엔드 개발자입니다

0개의 댓글