[JAVA] 인터페이스, 강제성 없애기
인페이스란?
추상 클래스를 고도화 시킨 문법이다.
메서드의 강제성을 주기위해서 사용된다. 인터페이스는 상수와 추상메서드만 사용이 가능하다.
인터페이스는 그 자체를 사용하기 보다는 다른 클래스를 작성하는데 도움을 줄 목적으로 사용이 된다.
다른 클래스에서 지정할 때에는 implements 키워드를 사용한다.
▶ 인터페이스 생성
public interface Pay {
abstract void check();
void touch();
void cancel();
}
생성할때에는 class가 아닌 interface로 생성을하고 메서드를 작성한다.
💡 인터페이스는 추상메서드만 멤버로 가질 수 있기 때문에 추상메서드에 사용되는 abstract가 생략되어 있다.
Pay라는 check(), touch(), cancel() 기능이 있는 인터페이스를 만들었다.
이 메서드를 사용할 클래스는 CheckCard(체크카드) 와 TrafficCard(교통카드) 이다.
▶ 인터페이스 사용
public class CheckCard implements Pay {
@Override
public void check() {
System.out.println("카드 확인");
}
@Override
public void touch() {
System.out.println("카드 인식");
}
@Override
public void cancel() {
System.out.println("카드 취소");
}
}
체크카드의 경우 위의 추상 메서드를 통해 강제성을 주고 출력문까지 작성하였다.
하지만 교통카드의 경우는 cancel()의 메서드는 사용할 수 없게 해야할때의 방법을 살펴보겠다.
이렇게 모든 인터페이스의 메서드를 다 사용하지 않을 수도 있기 때문에 인터페이스의 강제성을 없애기 위해서는 추상클래스를 만들어 인터페이스에서 넘겨 받을 수 있다.
이때 생성된 추상클래스에는 일반 추상메서드들과 목적이 다르고 그 기능을 알기 위해서 클래스 이름 뒤에 Adapter를 붙여구분하도록 한다.
public abstract class PayAdapter implements Pay {
@Override
public void cancel() {}
}
cancel()메서드의 강제성을 없애주기 위해 추상클래스 PayAdapter를 생성해 주었고 이 클래스를 기존의 Pay 인터페이스에 연결해주었다.
public class TrafficCard extends PayAdapter {
@Override
public void check() {
System.out.println("카드 확인");
}
@Override
public void touch() {
System.out.println("카드 인식");
}
}
TrafficCard에 만들었던 PayAdapter를 상속받으면 cancel()메서드의 강제성이 사라져서 사용하지 않아도 오류가 나지 않는다.