반응형

지금까지는, 인터페이스의 문법이나, 선언, 구현, 다형성 등에 대해서 배웠다.
이런 것들은 이런것들은 인터페이스의 개념적인 것들이 아니다.

단순히, 자바에서 인터페이스를 어떤식으로 쓰는지, 문법적인 부분에 대한 설명이었다.

지금부터는 인터페이스의 개념과 장점에 대해서 알아보자.

 

인터페이스의 장점

  • 두 대상(객체) 간의 '연결, 대화, 소통'을 돕는 '중간 역할'을 한다.

 

핵심적인 인터페이스 의미는 것은, 
두 대상(객체)간의 중간역할을 하는 것이다.

interface = inter(사이) + face(얼굴, 대상)

어떤 두 대상이 직접 소통할 수도 있겠지만,
중간에서 소통을 도와주는 역할을 인터페이스가 한다.

 

예를 들어서, 어떤 기계가 있다.
기계에는 톱니바퀴도 있고, 모터도 있다.

이 기계를 사람이직접 조작하려면 쉽지 않다.

그래서 이 기계에 껍데기(interface)를 씌운다.
이 껍데기를 통해서 조작이 기계에 전달 될 수 있게 한다.
이렇게 하면 훨씬 편할 것이다.

 

그래서 우리가 일반적으로 많이 보는 기계의 껍데기가 interface(인터페이스)이다.

 

인터페이스의 또 다른 예는, 컴퓨터다.
컴퓨터라는 하드웨어를 사람이 직접 다루려면 쉽지 않다.
항상 기계를 사람이 다루는 것은 쉽지 않다.
왜냐하면, 기계와 사람은 서로 사용하는 언어가 다르기 때문이다.

그래서 나온 것이 윈도우OS같은 GUI이다. (Graphic User Interface)
GUI도 인터페이스다.
사람이 직접 컴퓨터를 다루기 힘드니까, GUI를 제공하면 화면만 클릭하면 그 명령이 컴퓨터에 전달된다.

그리고 GUI의 장점은, 컴퓨터의 하드웨어가 바뀌어도, 인터페이스만 바뀌지 않으면, 
사용하는데 불편함이 없다.

그런데 만약에 이러한 인터페이스가 없으면, 우리가 간신히 해당 기계의 사용법에 익숙해졌는데, 
다른 기계로 바뀌면 그 기계의 사용법을 새로 배워야 한다.

즉, 인터페이스가 있으면, 변경에 유리하다.

 

인터페이스의 또다른 장점

  • 선언(설계)와 구현을 분리시킬 수 있게 한다.

 

이렇게 클래스 B가 있을 때, 이클래스를 인터페이스를 이용하면, 분리시킬 수 있다.

우선, B클래스의 메서드를 멤버변수로 갖는 인터페이스 I를 선언한다.
인터페이스에는 B클래스의 메서드의 선언부만 떼어온다.  즉 추상메서드로 만든다.

그리고 B클래스가 인터페이스 I를 구현하도록 한다.

이렇게 하면, 원래 B클래스에 껍데기 + 알맹이가 있던 것을,
인터페이스에 껍데기만 만들고, B클래스에서 껍데기만 있던 것을  알맹이까지 완성시킴으로서 
알맹이와 껍데기를 분리시키는 효과를 낸다.

기존의 B클래스와 인터페이스를 구현한 B클래스는 거의 같은 클래스다.
단지, 새로 정의한 인터페이스를 후의 B클래스에서 구현한 것 뿐이다. 

즉, 인터페이스를 사용하면, 변경에 유리하고, 유연한 코드가 된다.

 

인터페이스의 또다른 장점

  • 인터페이스 덕분에 B가 변경되어도 A는 안바꿀 수 있게 된다.(느슨한 결합)

 

A가 B를 직접 사용할 때(A가 B에 의존), 
B대신에 C로 바꾸고 싶다면, A도 코드를 변경해야 한다.
A의 코드 변경이 불가피하다.(강한 결합)

그런데 이렇게  중간에 인터페이스가 끼어들면,
A클래스는 인터페이스하고만 관계가 있다. B클래스와는 직접적인 관계가 없다.
이 A라는 클래스는 껍데기(인터페이스)만 사용하기 때문에,
알맹이가 B여도, 알맹이를 C로 바꿔도, A클래스를 코드를 변경할 필요가 없다. 
A클래스입장에서는 알맹이가 바뀐것 조차 모르게 된다.

즉, 인터페이스를 사용하면, 변경에 유리한 코드가 된다. (느슨한 결합)

 

 

위에서 예시로 든 그림을 코드로 표현한 것이다.

A클래스가 B클래스가 직접 사용한다는 것은, A클래스가 B클래스의 메서드를 호출하는 것이다.
A라는 클래스의 객체를 만들고, 메서드에 B를 넣어준 것이다.
이것이 좌측의 직접적인 관계의 두 클래스 코드이고,

그런데 이렇게 작성하기보다는,
우측 코드처럼 수정하면, 
B클래스의 껍데기와 알맹이를 분리해서,
인터페이스는 껍데기, 인터페이스를 구현한 B클래스는 알맹이를 분리해서 갖게 된다.

B클래스의 메서드를 추상 메서드로 갖는 인터페이스를 작성해서 껍데기,

인터페이스를 구현한 B클래스는 알맹이이다.

그러면, A클래스도 바뀌어야 한다.
B를 사용하는게 아니라, I를 사용해야 한다.

그러면, A클래스는 더이상 B클래스와 관계가 없다.
A는 하고만 관계가 있다.

이때는, B를 C로 변경해도 A는 변경할 필요가 없다.

좌측코드는(직접적인 관계) B를 바꾸면 A도 바꿔야한다.

우측코드는 인터페이스를 사용한 간접관계로서 B를 바꿔도 A는 바꾸지 않아도 된다
이것이 인터페이스의 장점이다.

 

반응형

'JAVA' 카테고리의 다른 글

디폴트 메서드와 static메서드  (0) 2022.04.07
인터페이스의 장점 (2)  (0) 2022.04.07
인터페이스와 다형성  (0) 2022.04.06
인터페이스의 선언, 상속, 구현  (0) 2022.04.06
추상 클래스의 작성 (2)  (0) 2022.04.05