프로그래밍을 하다보면 추상 클래스(Abstract class)를 사용할 지, 인터페이스(Interface)를 사용할 지 고민이 될 때가 많다. 보통은 웬만하면 interface로 처리를 하려고 하는데, 어떨 때는 두 가지 경우 모두 사용해보며 더 나은 방식을 채택하기도 했다. 오늘은 강의를 듣다가 두 가지의 차이점에 대해 정리를 해주셔서 이 부분을 정리해보려 한다.

일반적으로 Interface를 Abstract class보다 선호한다

abstract classinterface 모두 추상화를 하는 데에 사용이 된다.
차이점이 있다면 abstract class는 적어도 하나의 메소드는 추상화하여 메소드 바디가 없어야 하고,
interface는 전체 메소드를 추상화하여 메소드 바디가 없어야 한다.

따라서, 아무런 조건이 없다면 더 추상적인 interface를 사용하는 것을 권장한다.

그럼에도 불구하고 Abstract class를 사용해야 하는 경우는?

1.부모 자식 관계가 필요할 때

두 클래스의 관계가 부모 자식 관계이기 때문에 "is-a" 관계를 가질 때에는 abstract class를 사용한다.
Animal 클래스와 Dog 클래스를 예시로 들 수 있다.

2.부분적인 구현이 필요할 때

공통적으로 들어가는 코드가 있어 상윗단에 구현을 해야하는 경우, abstract class를 사용한다.
상위 클래스를 생성하여 중복 코드를 제거한다.

Interface를 사용해야하는 경우는?

1.class의 작은 역할을 표현해야 할 때

OOP에서는 역할을 세분하게 구분하여 클래스를 구분하는 것을 선호한다.
따라서, 세분화하여 작은 역할을 표현해야할 때에는 interface를 사용한다.

2.이미 다른 클래스를 상속받고 있을 때

interface는 여러개를 구현할 수 있지만, 상속은 하나만 받을 수 있다.
이미 클래스가 상속을 받았다면, 나머지 구현 부분을 추상화하기 위해서는 interface를 사용해야 한다.

반응형

'Java' 카테고리의 다른 글

(Java) JSON.simple을 이용하여 JSON 파일 읽고 쓰기  (0) 2022.05.30
복사했습니다!