추상 클래스와 인터페이스

0

코드숨 리액트에 이어 코드숨 자바 스프링 강의를 같이 신청한 동기분들과 스터디를 진행하고 있다.
스터디는 자유형식이었고, 나는 일단 자료형이나 기타 개념들을 먼저 알고 시작하고 싶었기에
생활코딩 자바 부분을 읽어본 뒤 나름 정리해보고 참여했다.

그 중, 평소 잘 몰랐는데 이번에 알게된 개념으로는 추상 클래스와 인터페이스가 있다.
abstract 로 구현해도 강제되고 인터페이스로 구현해도 강제되는데 뭐가 다르냐고 하면 설명할 수 없었는데,
지금은 통쾌하게 까지는 아니더라도 나름은 설명할 수 있게 되었달까...

abstract class도, interface도 둘 다 그대로는 사용할 수 없고 상속하거나 구현시켜야만 사용할 수 있다는 공통점이 있다.
차이점은 abstract class는 1:1의 상속만 가능하고, interface는 1:n 의 구현 매칭이 가능하다.

abstract class에는 abstract method 말고도 일반 메소드로 기능을 구현해서 자식 클래스가 그대로 사용할 수 있도록 할 수 있다.
interface는 전부 abstract method 개념으로만 정의가 가능하다.

이렇게만 보면
"인터페이스가 기능이 더 적은데 뭐하러 써?"
라는 말이 나올 수 있다.

전에는 어버버 하면서 "어... 그러네..." 라고 했을텐데 지금은 설명을 할 수 있다.

예를 들어 USB 라는 abstract class가 있다고 해보자.
그래서 'USB-C' 라는 클래스를 만들고 USB를 상속받아 구현했다.
그러면 USB를 상속받아 USB의 기능을 하는 USB-C 라는 클래스가 탄생했다.
USB-C는 USB의 기능을 상속받아 구현했지만, 만약 USB-A와 USB-B 가 있다면 이 둘과는 호환이 되지 않는다.

USB-A, USB-B, USB-C 라는 인터페이스가 있다고 해보자.
'CompatibleUSB' 라는 클래스를 구현할건데, 위에 있는 세가지 버전의 USB와 호환이 되게 만들고 싶다.
그럼 CompatibleUSB는 USB-A, USB-B, USB-C를 전부 구현하면 호환이 가능해진다.

이렇게 말했다고 인터페이스가 더 좋다는건 아니다.
둘 다 쓰임새가 있고, 사람마다 잘 쓸 수 있는 방식이 다를 것이다.
뭐가 더 좋고 나쁘다 라고 말할 수 없는 개념이라고 생각된다.

profile
지상 최강의 개발자 쥬니니

0개의 댓글