[Java] 인터페이스와 추상클래스에 대해서 알아보자

[Java] 인터페이스와 추상클래스에 대해서 알아보자

300x250

이미지 출처 Oracle

Java에서 많이 헷갈리는 개념인 인터페이스와 추상클래스에 대해서 알아보는 시간을 갖도록 하겠다.

① 인터페이스 (Interface)

(1) 개념

- 동일한 목적 하의 동일한 기능을 수행하게끔 강제하는 기능.

- 클래스들이 구현해야 하는 동작을 지정한다.

- 가장 기본적인 설계도라고 생각하면 된다.

(2) 특징

- 다중상속을 지원한다.

- 선언 시 interface 키워드를 사용한다.

- 상속을 위해서 implements 키워드를 사용한다.

- 인스턴스화 할 수 없다.

(3) 사용의도

- 상속 관계를 타고 올라갔을 때 다른 조상 클래스를 상속하더라도, 같은 기능이 필요할 경우 사용한다.

- 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용한다.

(4) 주로 사용하는 경우

- 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우

ex) Comparable, Clonable 인터페이스는 여러 클래스들에서 구현되는데, 구현클래스들 간에 관련성이 없다.

- 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지는 신경쓰지 않는 경우.

- 다중 상속을 허용하고 싶은 경우

② 추상클래스 (Abstract class)

(1) 개념

- 부모 클래스에서 정의만 해놓고, 실제 동작은 자식 클래스에서 한다.

- 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스이다.

- 미완성 설계도라고 생각하면 된다.

(2) 특징

- 다중상속을 지원하지 않는다.

- 선언 시 abstract 키워드를 사용한다.

- 상속을 위해서 extends 키워드를 사용한다.

- 인스턴스화 할 수 없다.

(3) 사용의도

- 상속할 각 객체들의 공통점을 찾아 추상화시켜 놓은 것으로, 상속 관계를 타고 올라갔을 때 같은 부모 클래스를 상속한다.

- 부모 클래스가 가진 기능들을 구현해야할 경우 사용한다.

(4) 주로 사용하는 경우

- 서로 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우.

- 추상 클래스를 상속 받는 클래스들이 공통으로 가지는 메소드와 필드가 많거나, public이외의 접근자(protected, private) 선언이 필요한 경우

- non-static, non-final 필드 선언이 필요한 경우 (각 인스턴스에서 상태 변경을 위한 메소드가 필요한 경우)

※ 참조

300x250

from http://iwillcomplete.tistory.com/41 by ccl(A) rewrite - 2021-10-07 20:01:13