hayu's 개발 일지

[TIL]240405 extends, implements 차이 본문

스터디/spring

[TIL]240405 extends, implements 차이

hayu00 2024. 4. 5. 21:03

extends, implements 차이

? 왜 extends를 하지 않았는데 @Override를 사용할까?

public class MeetingServiceImpl implements MeetingService {

@Override
    @Transactional
    public Long updateMeeting(UpdateMeetingRequestDto requestDto, Member member, Long meetingId) {

        Meeting meeting = meetingRepository.findByIdAndMember(meetingId,member)
                        .orElseThrow(()-> new CustomException(ErrorCode.AUTHORITY_ACCESS));

        meeting.updateMeeting(requestDto);
        return meetingId;
    }

}

상속이란?

  • 상자 하나하나는 모두 객체이고, 자바에서는 calss이다.
  • 이러한 객체를 표현하기 위해 만들어진 것이 상속이다.
  • 상속 시, 하위 객체(자식)는 상위 객체(부모)의 특징(메서드, 변수 등)을 물려받게 된다.

이때, 상위 객체(부모)의 특징(메서드, 변수 등)을 새롭게 구현하는지, 그대로 사용하는지에 따라서 상속의 형태가 갈리게 된다.

extends

  • 대표적인 상속의 형태이다.
  • 부모에서 선언(정의)을 모두하여, 자식은 오버라이딩할 필요 없이 부모의 특징(메서드, 변수 등)을 모두 사용할 수 있다.

→ 부모의 특징을 연장해서 사용한다.

  • java는 다중상속을 지원하지 않는다. 즉, 부모 클래스가 두 개 이상 존재할 수 없다.

( java는 implements를 사용하여 여러 인터페이스를 상속 받을 수 있다.)

  • class가 class를 상속받을 때, interface가 interrface를 상속받을 때는 extends를 사용한다.

implements(interface 구현)

  • 부모 객체는 선언만 하여, 정의는 반드시 자식이 오버라이딩하여 사용한다.

→ 부모의 특징을 도구로 사용해 새로운 특징을 만들어 사용한다.

  • implements는 여러개 사용 가능하다.
  • 이러한 구현은 부모의 메소드를 재정의하기 때문에 상속의 의미가 없다고 생각할 수 있지만 java에서 인터페이스 상속은 계약 및 분류의 의미가 강하다고 한다.

⇒ implement를 하면 @Override 를 사용하는 이유: 상속받은 메서드를 재정의할 때 메서드 이름이 틀리지 않게 쓰기 위한 에너테이션이다. 메서드의 이름이 다를 때 @Override 이 없다면 상속받은 것이 아니라 새로운 메서드를 만들어 사용한 것이 된다. (실수를 컴파일러 단계에서 알 수 있게 된다.)

 

참고 자료

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

- https://wooono.tistory.com/261

- https://jfbta.tistory.com/113

- https://jonghoit.tistory.com/48