Java - extends, implements, abstract 차이

728x90

상속이라는 개념을 이론적으로 분명 학습했는데, 잘 안쓰다보니(직접 만들어 쓴적은 없다는 얘기... JpaRepository 인터페이스 같은 것은 자주 사용...) 그 개념을 자꾸 잊어먹어서 implements, extends 심지어 추상 클래스 ,메서드인(명칭만 기억하지 기능은 기억도 안나는 것 같다.. 반성한다) abstract 등 한번 기회 잡아서 다시 정리해야지하며 미뤘는데, 어쩌다보니 스터디원분이 상속 얘기를 꺼내면서, 매우 진땀을 흘렸다. 민망해서 밤에 이불킥 몇 번 하다가 내 선생님인 '구글'을 찾아봤다. 마침 간단하게 잘 요약해둔 블로그가있어서, 옮겨적어본다.  

참고: https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4

 

자바 extends, implements 차이

상속이란 (Inheritance) 상속을 말하기 전에 먼저 OOP가 무엇인지 알면 좋을거 같다.OOP(Object-Oriented Programming, 객체 지향 프로그래밍) 이란? OOP의 특징으로 1. 상속과 인터페이스 (계층성) 2. 다형성, 사용편의성 (모듈화) 3. 캡슐화, 정보은닉 4. 자료 추상화 (모델링) 5. 동적 바인딩 위에 링크에는...

velog.io

 

상속(Inheritance)이란 

상속을 말하기전에 먼저 객체 지향 프로그래밍(OOP)의 특징을 알면 좋다.

OOP의 특징은 아래의 5가지이다.

  1. 상속과 인터페이스(계층성)

  2. 다형성, 사용편의성(모듈화)

  3. 캡슐화, 정보은닉

  4. 자료 추상화(모델링)

  5. 동적 바인딩

상속은 아래의 그림을 통해서 이해를 도울 수 있다.

각 상자는 모두 객체(Object)이고, 자바 용어로는 클래스이다.
이러한 계층을 표현하기 위해서 만들어진 것이 상속이다.
하위 객체는 상위 객체(부모)의 특징을 물려받는다.

또 다른 예로 변수또한 객체에 선언되어 있다면 물려받게 된다.
이 메소드 또는 변수를 '구현'하는가 그대로 '사용'하는가에 따라서 상속의 형태가 갈리게 된다.

  1. extends 
    사실상 extends가 상속의 대표적인 형태다.
    부모에서 선언 / 정의를 모두하여 자식은 메소드 / 변수를 그대로 사용할 수 있다.
    '다중상속'을 지원하지 않는다.

  2. Implements (interface 구현)
    부모 객체는 선언만 하며 정의(내용)은 자식에서 오버라이딩(재정의)해서 사용한다.
    (extends가 못하는) 다중상속을 대신해준다.

  3. abstract
    extends와 implements의 혼합, extends하되 몇 개는 추상 메서드로 구현되어 있다.

정리

  1. extends는 일반 클래스와 abstract 클래스 상속에 사용되고, implements는 interface 상속에 사용된다.
  2. class to class, interface to interface 상속은 extends를 사용한다.
  3. class to interface 를 사용할 땐 implements를 써야하고
  4. interface to class 를 사용할 땐 implements를 사용할 수 없다.
  5. extends는 1 개의 상속만 받을 수 있다.
  6. extends 자식 클래스는 부모 클래스의 기능을 사용한다. 
  7. implements는 여러개 사용 가능하다.
  8. implements는 설계 목적으로 구현 가능하다.
  9. implements한 클래스는 implements의 내용을 다 사용해야한다.

 

 

728x90