[Java] 인터페이스(Interface) 사용법 및 예제 ( 인터페이스를 사용하는 이유)
자바 인터페이스를 만들고 사용하는 방법에 대해 알아 본다. 대규모 프로젝트에서는 수많은 개발자들이 개발을 하게 된다. 소스 코드의 난잡화 방지라고 해야할까… 분류를 하자면 대분류라고 치고, 번역기를 개발한다고 하면, 어떤 개발자는 영어, 어떤 개발자는 한글을 개발한다고 치면, 대분류 차원에서는 번역이라는 큰 틀에서 개발을 하지만 서로 다르게 구현하게 된다. 이럴경우 개발자마다 클래스명, 메소드명이 다른 현상이 생기고 나중에 유지보수가 힘들어지게 된다. 이를 방지하기 위해 implements할 인터페이스를 만든다. 또한 자바는 C언어처럼 다중 상속을 클래스단에서는 지원하지 않는다. 하지만 인터페이스를 사용하면 다중 상속이 가능하다.
■인터페이스 생성하기
인터페이스는 본문 즉, 코드 내용은 없고, 메소드 선언만 있다. 세탁기 프로그램을 만들어 보자.
package edu.sample;
public interface WashingMachine {
public void startButtonPressed();
public void pauseButtonPressed();
public void stopButtonPressed();
public int changeSpeed(int speed);
}
package edu.sample;
public interface dryCouse {
public void dry();
}
■인터페이스를 사용해보자
package edu.sample;
public class LGWashingMachine implements WashingMachine{
@Override
public void startButtonPressed() {
System.out.println("세탁기가 빨래를 시작하였습니다.");
}
@Override
public void stopButtonPressed() {
System.out.println("세탁기가 빨래를 중지하였습니다.");
}
@Override
public void pauseButtonPressed() {
System.out.println("세탁기가 빨래를 일시 중지하였습니다.");
}
@Override
public int changeSpeed(int speed) {
int rtnSpeed = 0;
switch(speed) {
case 1:
rtnSpeed = 20;
break;
case 2:
rtnSpeed = 50;
break;
case 3:
rtnSpeed = 100;
break;
}
return rtnSpeed;
}
}
implements를 사용하여 LGWashingMachine 클래스 선언시 인터페이스 사용을 선언한다. 인터페이스로 선언했던 메소드를 오버라이드 하여 메소드 본문에 들어갈 코드를 구현하면 된다.
■인터페이스 테스트
package edu.sample;
public class TestWashingMachine {
public static void main(String[] args) {
LGWashingMachine washinMachine = new LGWashingMachine();
washinMachine.startButtonPressed();
System.out.println("세탁기의 속도는 " + washinMachine.changeSpeed(3));
}
}
■ 인터페이스 다중상속 예제
package edu.sample;
public class LGWashingMachine implements WashingMachine, dryCouse{
@Override
public void startButtonPressed() {
System.out.println("세탁기가 빨래를 시작하였습니다.");
}
@Override
public void stopButtonPressed() {
System.out.println("세탁기가 빨래를 중지하였습니다.");
}
@Override
public void pauseButtonPressed() {
System.out.println("세탁기가 빨래를 일시 중지하였습니다.");
}
@Override
public int changeSpeed(int speed) {
int rtnSpeed = 0;
switch(speed) {
case 1:
rtnSpeed = 20;
break;
case 2:
rtnSpeed = 50;
break;
case 3:
rtnSpeed = 100;
break;
}
return rtnSpeed;
}
@Override
public void dry() {
System.out.println("세탁기 완료되어 건조하기 시작하였습니다.");
}
}
인터페이스는 공용 컴포넌트나 유틸 개발에 아주 효과적이다.