본문 바로가기
OOP

[OOP] Interface 인터페이스를 이용하는 이유와 장점

by ifhead 2022. 8. 19.
반응형

부모 클래스는 세 가지 클래스로 만들 수 있습니다.

일반 클래스, 추상 클래스, 인터페이스

왜 세 가지나 있을까요?

어떻게 구분해서 사용해야 할까요?

이 글에서는 인터페이스를 중점적으로 다루어 보겠습니다.

 

"그냥 일반 클래스를 쓰면 안 될까요?"

A. 일반 클래스끼리 상속을 시키면 결합도가 높아집니다.

수정, 삭제가 양측에 영향을 줄 수 있습니다.

 

인터페이스는 구체적인 구현을 하지 않기 때문에 결합도가 낮습니다.

상속 관계와 다르게, 유연하게 확장하고 수정할 수 있어요.

 

 

"추상 클래스만 쓰면 되지 않나요?"

A. 추상 클래스는 일반 메서드와 추상 메서드를 모두 가질 수 있습니다.

인터페이스는 모든 메소드에 구현이 없음을 보장합니다.

 

추상 클래스를 의도에 맞게 사용한 예를 들면 아래와 같습니다.

부모가 '동물' 추상 클래스, 자식은 '고양이' 클래스

 

추상 클래스가 만들어내는 상속 관계는

"A(자식)는 B(부모)이다"라는 문장을 자연스럽게 충족시킵니다.

"고양이는 동물이다" 같은 문장처럼요. (일반 클래스도 동일합니다)

 

인터페이스는 어때야 할까요?

"A는 B할 수 있다", "A는 B를 가지고 있다" 등이 인터페이스와 어울리는 문장이라고 할 수 있습니다.

인터페이스는 여러 곳에 재활용되고,

다른 인터페이스와 혼용될 가능성이 높으며,

클래스보다 수정, 삭제, 추가에 열려 있습니다.

 

추상 클래스, 일반 클래스, 인터페이스의 예시

Barkable, Talkable, Eatable외에도 다른 -able이 추가되어도 문제되지 않습니다. (확장 용이)

메소드를 매번 새롭게 구현하기 때문에 클래스들 안에서 각자 다르게 수정되어도 문제되지 않습니다. (수정 용이)

 

 

"여전히 추상 클래스만 이용해도 상관 없어 보이는데요!?"

A. 인터페이스는 메소드 출처가 모호해질 일이 없으므로 다중 상속이 가능합니다.

추상 클래스는 다중 상속이 불가능하므로 인터페이스와 확실히 다릅니다.

이는 수정과 확장이 많이 이루어지는 개발에서 중요한 차이입니다.

 

실무에서 인터페이스는 표준화된 틀을 제공합니다.

코드 간 종속성으로 인해 개발자가 고통받는 일을 줄여줍니다.

인터페이스 설계를 하면서 팀원들과 약속만 잘 해둔다면

서로 혼선 없이 컴파일하며 작업할 수 있습니다.

 

 

 

 

 

반응형

댓글