상속이란 (Inheritance)
위의 그림을 볼때 상자 하나 하나는 모두 객체(Object)이고 자바 용어로는 Class이다.
이러한 계층을 표현하기 위해 만들어진것이 바로 상속이며 하위 객체는 상위 객체(부모)의 특징을 물려받는다.
예를들어 동물의 특징인 '움직이다'를 포유류, 조류, 파충류는 그대로 물려받게 된다.
즉, move()라는 메소드를 포유류, 조류, 파충류 객체가 모두 사용할수 있게 된다는 뜻이다.
또 다른 예로 나이라는 변수가 동물 객체에 선언되어 있다면 포유류, 조류, 파충류는 나이 변수를 물려받게 된다.
이 메소드 혹은 변수를 그대로 "구현" 하는가 "사용" 하는가에 따라서 상속의 형태가 달라지게 된다.
- extends : 부모에서 선언 및 정의를 모두 하며 자식은 메소드 및 변수를 그대로 사용할수 있다.
- implements (interface 구현) : 부모 객체는 선언만 하며 정의(내용)는 자식에서 오버라이딩 (재정의) 하여 사용한다.
- abstract : extends 와 implements의 혼합으로 extends하되 몇개는 추상 메소드로 구현되어 있다.
추상화 : 해당 객체의 공통적인 요소나 특징, 기능을 추출하여단순화된형태로사용
extends
상속의 대표적 형태로 부모의 메소드를 그대로 사용할 수 있으며 오버라이딩 할 필요 없이 부모에 구현되어 있는것을 직접 사용할수 있다.
오버라이딩 : 부모 클래스에서 상속받은 자식 클래스에서 부모클래스에서 만들어진 메서드를 자식 클래스에서 자신의 입맛대로 다시 재정의해서 사용하는 것을 말한다.
implements
자바는 "다중 상속"을 지원하지 않는다.
다중 상속이란 부모 클래스가 두개 이상 존재 할수 있다는 것인데, 자바에서는 이를 지원하지 않는다.
즉, public class Son extends Father, Mother{...} 과 같은 형식은 지원되지 않는다는 것이다.
대신 implements(interface 구현) 가 등장하였다.
implements의 가장 큰 특징은 이렇게 부모의 메소드를 반드시 오버라이딩(재정의)해야 한다.
또한 이 implements는 public class Son implements Father, Mother{...} 와 같은 형식으로 다중상속을 대신해준다.
extends, implements 차이
extends는 클래스 상속에 사용되며, 자식 클래스는 부모 클래스의 기능을 그대로 상속받아 사용할 수 있습니다. 자식 클래스는 부모 클래스를 확장(extend)하여 자신만의 특징을 추가할 수 있습니다. 또한, 자식 클래스는 부모 클래스의 모든 멤버 변수와 메소드를 사용할 수 있습니다. 하나의 클래스에서 다중 상속은 불가능하며, 오직 하나의 클래스만 상속 받을 수 있습니다.
implements는 인터페이스 상속에 사용되며, 인터페이스는 클래스와 달리 멤버 변수를 가질 수 없습니다. 대신, 메소드만을 가지며, 그 메소드의 구현은 상속받은 클래스에서 이루어집니다. 이때, implements 키워드를 사용하여 인터페이스를 상속 받을 수 있습니다. 하나의 클래스에서 여러 개의 인터페이스를 상속 받을 수 있습니다. 상속받은 인터페이스의 메소드는 모두 오버라이딩하여 구현해주어야 합니다.
따라서, extends와 implements는 각각 클래스와 인터페이스를 상속받을 때 사용하는 키워드이며, extends는 단일 상속만 가능하고, 자식 클래스는 부모 클래스의 모든 기능을 그대로 사용할 수 있으며 클래스 확장의 개념이고, implements는 다중 상속이 가능하며, 인터페이스의 메소드를 모두 오버라이딩하여 구현해주어야 합니다. 이러한 차이점을 이해하고 적절하게 사용하는 것이 좋습니다.
연관된글:
참고 :
chat gpt
https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4
'개발 > CS' 카테고리의 다른 글
[CS] 프레임워크(Framework)와 라이브러리(Library)의 차이 (0) | 2023.05.11 |
---|---|
[CS] 좋은 객체 지향 설계의 5대 원칙: SOLID (0) | 2023.02.23 |
[CS] OOP(객체 지향 프로그래밍) (0) | 2023.02.23 |