Java

[JAVA] 인터페이스의 기본부터 응용까지 (1) - 인터페이스? 왜 사용하나요?

손가든 2023. 5. 23. 16:26

오늘 포스팅의 한줄 목표 - "달인이 되기 위해선 칼질부터 연습하라"

 

기본기를 충분히 다지기 위하여 프로그래밍의 중요한 요소 중 하나라고 생각되는 인터페이스에 대해 공부해 봅시다 !

 


인터페이스, 너는 누구냐.

 

먼저 인터페이스를 만들기 위해 인터페이스가 무엇인지 ChatGPT에 물어봤습니다.

 

인터페이스가 뭐야?

인터페이스가 무엇인지 정리해보자면,

인터페이스란, 클래스(인터페이스)와 클래스(인터페이스를 구현한 구현 클래스) 사이의 계약과 같으며, 인터페이스를 구현한 클래스는 인터페이스가 정의한 모든 메서드를 구현해야하는 계약조건을 가진다.

 

(오호.. 너무나 당연한 소리;)

 

무엇인지는 감이 옵니다. 우린 이미 사실 알고 있었잖아요 그쵸?

(몰랐다면 이 포스팅은 당신을 위한것)

 

그럼 인터페이스를 왜 사용하는지 또한 안 물어볼 수 없겠죠?

 

인터페이스를 왜 사용해?

 

저는 개인적으로 인터페이스를 사용하는 이유는 코드의 중복을 방지하는 것이라고 생각했어요.

만약, 흔히 예시로 드는 자동차가 시동을 켜는 메소드를 가지고 있다면, 비행기 또한 시동을 켜는 메소드를 가지고 있겠죠?

시동을 켜는 메소드를 인터페이스에 정의하여 중복을 줄이면 너무 좋잖아요?

 

근데 생각보다 많은 다방면의 장점에 조금 놀랐어요.

장점을 요약하자면,

 

1. 다형성 측면에서는 제가 예시로 든 자동차와 비행기가 모두 시동을 켜는 물체로서 

서로 다른 장치(즉, 다형성의 개체들)를 한번에 구현한다는 장점을 가지게 되요.

 

이는 마치 여러 낱개의 문서를 특정 공통점을 기준으로 하나의 폴더에 넣어두는 문서화와 비슷한 장점이 될 수 있겠네요 !

(내가 들었지만... 이 예시 너무 맘에 들었어..)

 

 

2. 코드를 재사용한다는 장점은 제가 알고 있었던 개념과 같은 장점인 것 같죠?

중복 코드를 줄이고 이는 유지보수를 간편하게 한다는 장점까지 확대되겠네요 !

 

 

3. 계약을 통한 메소드 강제화가 장점이 된다는 개념은 참으로 색다르네요... 제가 알고 있지 못한 장점이었어요.

(뉴메타)

 

강제한다는 것이 장점이 된다는 것은 예를 들면,

특정 클래스를 설명하는 description() 메소드를 가진 인터페이스가 있다고 가정해봅시다.
이를 구현한 구현 클래스는 어떤 역할을 하는지 필히 설명해야 하는 규약이 생기도록 할 수 있겠네요 !

 

 

4. 다중 상속!!

이것은 개인적으로 장점이라고 하기 애매하면서도 확실히 매력적인 장점 같아요.

 

제가 예전 프로젝트 코드를 멘토님께서 리뷰해주셨을 당시,

멘토님께서 "이거 왜 추상 클래스가 아니라 인터페이스를 사용했나요?" 라고 여쭤보신 적이 있어요.

 

그때 저는 DTO를 LIST화하는 메소드를 인터페이스에 선언해 두었는데요.

( DTO는 추후 포스팅을 통해 공부하는 시간을 가져볼게요! 일단은 실제 DB 데이터의 복사본 이라고 해두겠습니다. )

 

DTO는 모든 데이터마다 존재하기때문에 LIST화하는 메소드는 여러 클래스에 선언해야했어요.

다중 상속의 개념이었죠 !

 

말이 길었지만 결론은 다중상속 구현을 하기 위해서 단일 상속만 가능한 추상 클래스가 아닌 ! 인터페이스를 선택하여 사용했다는 것이에요.

(일기 아님)

 

5. 유연성과 확장성, 지금 생각해보니 이 부분이 단연 가장 큰 장점이 아닐까 하는 생각이 드는데요.

 

마치 돈을 넣으면 음료가 나오는 자판기처럼,

어떻게 자판기가 작동하는지 알 필요없이 사용법만 익혀서 가져다 쓸 수 있다는 것이 응용성 측면에서 아주 좋은 장점이 되겠네요.

 


 

오늘은 인터페이스가 무엇인지, 그리고 왜 인터페이스를 사용하는지 알아봤어요.

인터페이스가 무엇인지 감이 오나요?

 

저는 새롭게 알게 된 정보들을 이해하며 오늘 또 한번 지식을 쌓고 갑니다.

다음 포스팅에선 인터페이스를 어떻게 사용하는지 실제 예시 코드와 함께 알아보도록 할게요!

 

감사합니다 :)