[Java] extends, implements 차이

윤경·2022년 2월 3일
0

Java

목록 보기
10/10

Spring 공부를 하다가 extends와 implements의 차이를 모르고 있다는 것을 깨달았다. 그래서 알아봤다.


먼저 상속에 대해 알아본다.

상속 Inheritance

자바하면 OOP

OOP

: Object-Oriented Programming 객체 지향 프로그래밍

가능한 모든 물리적, 논리적 요소를 객체로 만드는 것
객체 내부에 자료형 필드와 함수가 함께 존재하는 형태

OOP 특징

  • 추상화 Abstraction
  • 캡슐화 Encapsulation
  • 상속
  • 다형성 Polymorphism

객체지향 프로그래밍에 대해 아주 잘 정리되어 있는 🔗게시글이 있으니 참고하면 좋을 것 같다.

코끼리, 고양이, 토끼풀, 해바라기객체(Object)이다. 이들은 모두 공통적으로 생물이라는 특징을 가지고 있다.

각 객체들을 분류하면

  • 코끼리, 고양이동물
  • 토끼풀, 해바라기식물

이다.

즉, 코끼리, 고양이상위 객체(부모)동물이고,
식물하위 객체(자식)토끼풀, 해바라기이다.

자식은 부모의 특징을 물려받는다. ➡️ "하위 객체는 상위 객체의 특징을 물려받는다."

이러한 계층을 표현하기 위한 방식이 바로 상속 이다.

상속은 상위 객체의 특징을 어떻게 새롭게 구현하는가, 그대로 사용하는가 에 따라서 형태가 갈린다.

extends

: 부모에서 선언, 정의를 모두 수행하며, 자식은 오버라이딩 없이 메소드, 변수를 그대로 사용할 수 있다.

➡️ 부모의 특징을 연장하여 사용

implements (interface 구현)

: 부모 객체에서는 오직 선언만, 정의는 반드시 자식이 오버라이딩하여 사용

➡️ 부모의 특징을 사용해 새로운 특징을 생성해 사용

abstract

: extends + interface
extends를 사용하지만 몇 개는 추상 메소드로 구현되어 있다.


extends

extends가 상속의 대표적 형태이다.

오버라이딩 없이 부모에 구현되어 있는 것을 직접 사용한다.

이때, 접근 지정자에 대해 알아야 한다.

  • public: 모두 접근 가능
  • protected: (다른 패키지에 존재할 때) 자식 클래스에서 부모 클래스를 호출할 수 있고, (동일 패키지에 존재할 때) 비상속시에도 접근 가능
  • default: 상속, 동일 패키지에서 접근 가능
  • private: 클래스 내부에서만 접근 가능

그리고 ⚠️ 주의해야 할 점은 Java는 "다중상속"을 지원하지 않는다는 것이다.

그 대신 implements를 사용하여 여러 interface를 상속받을 수 있다.


implements

부모는 선언만
자식은 정의를 오버라이딩하여 사용

extends는 할 수 없는 다중상속이 가능

정리하자면

  • 일반 클래스와 abstract 클래스를 상속할 때는 extend,
  • interface를 상속할 때는 implements

참고
참고

profile
개발 바보 이사 중

0개의 댓글