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