목록으로
OOP

객체의 인터페이스에 대해 공부해보자

Dev Park
10/17/2022
35 views

서론

앞의 글을 읽었다면 인터페이스에 대해 언급하고 설명해놓은 부분이 있었을 것이다.
그때 간단하게 설명한 인터페이스를 조금 더 자세하게 알아보고, 왜 인터페이스를 써야하는지
그리고 객체와 인터페이스의 차이에 대해서 공부해보자.

인터페이스란?

"클라이언트에게 무슨 메서드를 제공하는지 알려주는 명세 또는 약속"

일단 인터페이스의 정의는 이렇다.
하지만 이렇게만 써놓아서는 정확하게 이해하기 어려울 수 있다. 조금 더 이해하기 쉽게 예를 들어보자면 메뉴판을 생각해보자.

메뉴판에는 손님(클라이언트)에게 제공할 수 있는 여러가지 음식들이 있다.
이 음식을 보고 손님은 무슨 음식을 먹을지 결정한다.
메뉴판과 같이 클라이언트가 인터페이스를 통해 어떠한 기능이 있고 무슨 기능을 사용할지 결정할 수 있다.

객체와 인터페이스의 차이

그럼 한가지 의문이 들 것이다.
객체도 인터페이스와 비슷한 기능을 할 수 있는데 왜 인터페이스를 사용해야하냐는 것이다.
결론부터 말하자면 인터페이스는 특정 기능을 가진 메소드를 명칭해둘뿐 직접적으로 기능을 쓰지 않는다.

왜 인터페이스는 기능을 써놓지 않을까?

객체의 내부 기능이 달라지더라도 외부적으로 인터페이스에 써놓은 메소드 명이 같기때문에 사용자는 사용방법을 새로 알아야 할 필요가 없어진다.
메뉴판에 있는 메뉴의 조리법이 달라지더라도 메뉴 이름은 바뀌지 않기때문에 손님은 무슨 메뉴인지를 알고 시킬 수 있는 것과 같다.
또한 내부 기능이 담긴 메소드와 외부로 나타난 메소드의 종류를 구분해놓았기때문에 유지보수에 유리하다.

위와 같은 장점이 있기때문에 인터페이스와 객체를 구분하여 사용하는 것이다.

추가적으로 객체지향 설계 5원칙에 있는 인터페이스 분리 원칙에 대해서 다시한번 읽어본다면 이해하기 쉬울 것이다.

인터페이스를 사용해야하는 이유?

인터페이스는 클래스같은 객체와 달리 메소드 명만 적혀있을뿐 구체적인 기능이 적혀있지않아 고정된 틀에 얽매이지 않는다.
그렇기에 인터페이스를 사용하면 보다 자유롭고 추상화 된 프로그램을 작성할 수 있게 된다.

또한 인터페이스는 클라이언트에게 필요한 기능만을 모아둔 것이기때문에 클라이언트가 혼란을 가질 가능성이 줄어든다.

마치며

오늘은 인터페이스에 대해서 알아봤다.
객체지향에는 신기하고 생소한 기능이 많은 것 같다. 알면 알 수록 객체지향이라는 것이 무엇을 지향하는 언어인지 알 수 있다. 그렇기에 인터페이스를 구분하여 코딩할 수 있게 된다면 좀 더 객체지향적인 프로그램을 만들 수 있게 될 것이다.