반응형

인터페이스의 장점

 

  • 개발 시간을 단축할 수 있다.

 

이 그림에서는  A가 B를 사용한다. 
그래서, A가 코드를 작성하려면 B가 먼저 만들어져 있어야 한다.
그래서, B가 완성될 때까지 A는 기다려야 한다.

그러면, 아무래도 개발 시간이 더 걸릴 것이다.

 

그런데, 이 그림에서는 A는 I를 사용하면 된다.
B가 개발되지 않았어도 I만 있으면 된다.
즉, 껍데기만 있으면 된다.

앞서, 추상클래스에서 배웠듯, 추상 메서드를 호출할 수 있다.
인터페이스는 추상 메서드 집합이므로 B가 완성이 되지 않았더라도,
A는 I(인터페이스)를 이용해서 코드를 작성할 수 있다.

추상 메서드지만, 이 메서드가 완성되어 있다고 가정하고 사용하는 것이다.

그리고 B는 I(인터페이스)에 있는 추상 메서드를 구현하면 된다.

그래서 인터페이스를 사용하면 개발 시간을 단축할 수 있다.

 

  • 변경에 유리한 유연한 설계가 가능하다.

 

변경에 유리하다는 것은, 인터페이스의 중요한 장점중 하나이다.

B를 없애고 C를 대신 집어넣을 수 있는것,  그리고 그렇게 해도 A를 변경하지 않아도 된다는 것.

 

  • 표준화가 가능하다.

 

인터페이스의 또다른 장점으로는 "표준화가 가능하다"라는 장점이 있다.
나중에 JDBC라는 것을 배울텐데,
옛날에는 자바 애플리케이션을 개발할 때, 데이터베이스를 이용한 프로그래밍을 많이했다.
데이터베이스라는 것은, 데이터를 담아 놓고 여러사람이 쓸 수 있게 하는 것이다.
데이터 베이스 종류가 여러개가 있는데,
자바 애플리케이션이 오라클이라는 데이터베이스에 맞게 프로그램을 짜놓았다고 가정해보자.
그런데, 오라클이 라이센스 가격을 올려서 회사가 그 비용을 감당할 수 없어서, 다른 데이터 베이스를 사용해야 한다고 판단했다.
그래서 다른데이터 베이스를 사용하려고 개발을 하려고 하면, 기존의 자바 어플리케이션을 많이 변경해야 했다.

앞서 설명한 예시처럼, A가 B에 의존적일 때, A가 B를 사용하다가, C를 사용해야 하면, A도 많이 수정해야 한다는 것과 일맥상통하다.

그래서 이러한 문제를 어떻게 해결하기로 했냐면,
중간에 JDBC라는 인터페이스를 두기로 한 것이다. (인터페이스 집합)
JDBC는 Java에서 제공하는 표준이다.

그래서, 데이터 베이스 회사들도 JDBC인터페이스 표준에 맞게 개발을 하고, 

자바 어플리케이션을 개발하는 사람들은, JDBC만 있으면, JDBC가 바뀌지 않는 한, 자바 어플리케이션을 변경할 일이 없다.

이러한 장점이 있고, 인터페이스를 통해 표준화를 한 것이다. 

 

  • 서로 관계없는 클래스들을 관계를 맺어줄 수 있다.

 

예를 들어서 클래스들의 상속계층도가 그림과 같다고 했을 때, 
어떤 기계를 수리하는 메서드를 작성하려고 한다.
SCV, Tank, Dropship이 기계이다.

이렇게 오버로딩해서 메서드를 만들면, 기계가 3개이므로 메서드 3개를 만들어야 한다.

 

그런데, 이것을 다형성을 이용해서 만들 방법은 없을까? 라고 생각을해서 매개변수를 GroundUnit으로 해보았는데,
이곳에 들어올 수 있는게, SCV, Tank는 가능한데,  기계가 아닌 Marine도 들어올 수 있다. 문제가 있다.
이 메서드만 1개만 있으면 기계들을 수리할 수 있을까 했는데, Marine이 들어와서 문제다.
그리도 또 다른 문제는,  공중유닛인 Dropship도 수리할 수 없다. 왜냐하면 GroundUnit또는 자손만 들어올 수 있기 때문이다.

즉, 문제는Marine이 들어와서 문제고, Dropship이 못들어와서 문제다.

 

이걸 해결하려면, 우리가 수리할 기계들끼리 관계를 맺어주면 된다.
SCV, Tank, Dropship한테 Repairable이라는 인터페이스를 구현하도록 하면 된다.
Rerpariable은 인터페이스이므로 내용은 아무것도 구현된 것은 없다.
그러나, Rapairable 인터페이스를 구현하도록 하면,
SCV, Tank, Dropship 이 3개가 전부  Rpairable을 구현했다는 공통점이 생긴다.

즉, Repairable의 자손이 된 것이다.(엄밀히 부모는 아니지만..)

인터페이스는 상속 제약이 없다.
어떤 상속계층도에 있는 클래스라도 인터페이스를 구현할 수 있다.

 

이렇게 하면, 위에서 3개 기계의 각각의 메서드를 여러개 작성하는 대신에, 이 메서드만 있으면 된다.

repair메서드의 매개변수는 Repairable이다. 즉 인터페이스를 매개변수로 갖고 있다.
앞서 공부했던, 내용을 떠올려 보자.
매개변수에 인터페이스가 들어갔다는 것은,
매개변수에는 Repariable인터페이스를 구현한 클래스들의 인스턴스만 올 수 있다는 것이다.

즉, SCV, Tank, Dropship만 들어올 수 있다는 것이다.

이렇게 인터페이스는 서로 관계없는 클래스들을 관계를 맺어준다. 라는 장점이 있다.

 

반응형

'JAVA' 카테고리의 다른 글

내부 클래스의 종류, 특징, 선언  (0) 2022.04.07
디폴트 메서드와 static메서드  (0) 2022.04.07
인터페이스의 장점 (1)  (0) 2022.04.06
인터페이스와 다형성  (0) 2022.04.06
인터페이스의 선언, 상속, 구현  (0) 2022.04.06