본문 바로가기

Java

[Java] Interface. - 아주 간단한 테스트 프레임웍 만들어보기 1 -

Java책을 보면서 공부를 하면
Interface에 대한 내용을 볼 수 있습니다.

제 기억으로 처음 자바를 공부하는 입장에서 가장 기억에 남았던 것은
인터페이스는 내용 없는 메서드 정의가 가능하고, 이것을 구현하는 클래스들은
만드시 그 메서드의 내용을 구현해야 한다. (추상 클래스는 여기서 논외로 하겠습니다.)
라는 것이었습니다.

그리고 나오는 예제들이 TV나 그런거였고..
여기서 다형성과 캐스팅에 대한 얘기들도 같이 나옵니다.

그렇게해서 Interface를 공부했는데..
그렇게 공부를 하고 몇 년이 지나도록 업무에 있으면서
도무지 이 Interface가 왜 좋은지 이해를 못 하고 있었습니다.

Interface로 메서드를 정의하고
그것을 구현하는 클래스들이 항상 같은  메서드를 갖도록 한다.

이것이 사람/동물 이런 관계로 OOP를 설명하는 책의 내용과 맞물려서
관련이 있는 is-a 관계가 성립하는 클래스들끼리 인터페이스를 정의해서 사용하는구나..
싶었는데.. Cloneable이나 Comparable 같은 것을 보면 또 그렇지도 않습니다.

최근에 부사수(2년차)에게 검색에서 리스트 2개를 가져와서
비교하는 테스트 프로그램을 만들라고 하였습니다. Junit 같은 것을 사용해도 되는데
좀 더 기본적인 것들을 가르쳐주고 싶어서 일단 마음대로 구현해보라고 하였습니다.

그러는 와중에 나온 것들을 정리하면 좋겠다 싶어서 여기다가 정리해봅니다.

후배가 처음 가져온 소스는 main 메서드를 사용해서
작성한 프로그램이었습니다.



Tester.java

기능은 잘 작동하는데 좀 더 가르쳐주기 위해서
테스트를 수행하는 메서드를 하나의 클래스로 다시 만들라고 하였습니다.
그리고 결과를 print하지말고 boolean으로 return하여 테스트를 통과했는지 못 했는지를 나타낼 수 있도록
네이밍을 다시 하라고 하였습니다.

그래서 아래와 같은 클래스가 만들어졌습니다.

ProductListsCompareTester.java

실행은 아래처럼 될 것 입니다.
Tester.java
이 상태에서 이번에는 검색을 한 다음 그 정렬순서가
점수에 맞게 되었는지 확인하는 테스트케이스를 더 만들어보라고 하였습니다.
ProductRankScoreTester.java

사용은 아래와 같이 될 것 입니다.
Tester.java

이렇게 해서 두개의 테스터 클래스가 생겼습니다.
ProductListsCompareTester와  ProductRankScoreTester 이렇게 두개의 클래스가 생긴거죠..

물론 같은 이름의 메서드를 사용하도록 제가 유도를 하기는 하였지만..
이렇게 하고 나서 후배에게 "공통되는 메서드를 인터페이스로 빼서 인터페이스를 만들고
저 Tester 클래스들을 인터페이스를 상속하게 하여 구현하면 어떨까? 라고 물어보고 그렇게 작업을 해보라고 하였습니다.

이제 한번 인터페이스를 활용해보려고 합니다.