본문 바로가기

CS 잡지식

Sub Class vs Interface implementation Class

서브 객체와 인터페이스의 구현체는 어떤 차이가 있을까??

매우 헷갈려서 정리를 해 본다.

1. 서브 클래스는 슈퍼 클래스의 필드/메서드를 [상속(extends)] 받는 것이다.

그에 반해,  인터페이스 구현체는 인터페이스에서 무언가를 상속 받는 것이 아닌, 인터페이스에서 선언한 메서드를 구현체

에서 정의를 한 것이다. 

2. 인터페이스 구현체는 객체 선언 없이 모든 필드/메서드의 사용이 가능하다

.서브 객체는 명시적으로 코드로 객체를 선언을 해줘야 필드/메서드가 사용이 가능하다. 

 

그에 반해, 인터페이스 구현체는 클래스가 인터페이스에만 의존을 하고 있다면, 객체 선언 없이 모든 필드/메서드의 호출이

가능하다.

( 물론, 서브 클래스도 클래스가 부모 클래스에 의존을 하고 있다면 필드/메서드 호출이 가능하다. 

그러나, 슈퍼 클래스에만 의존해서는 모~~든 필드/메서드 호출은 불가능하다. 

만약  서브 클래스의 필드/메서드를 사용하고 싶다면, Down Casting이 필요하다.)

-> 나는 개인적으로 2번이 굉장히 큰 차이점을 보인다고 본다. 

왜냐하면, 서브 클래스의 경우에는 부모 클래스에 어떤 필드/메서드가 있고, 또 자식 클래스에는 어떤 필드/메서드가 있는

지를 고려하여 때에 따라서는 다운 캐스팅을 해야 하고, 부모 클래스의 코드가 변경 시, 자식 클래스에게 영향을 줄 수가 있

다. 

그러나 인터페이스 구현체는 상속이 아니라, 인터페이스에서 선언을 한 메서드를 그대로 구현체에서 정의를 하는 것이기

에 [인터페이스와 인터페이스 구현체]는 인터페이스에 선언된 모~~든 메서드와 인터페이스 구현체의 모~든 메서드가  빠

짐없이 1:1로 매칭이 되므로 개발자 입장에서는 생각하기가 편하고, 개발하기도 편한 것 같다.