JAVA/공부

[JAVA] 인터페이스, 강제성 없애기

도하루박 2022. 9. 18. 16:57
반응형
인페이스란?

추상 클래스를 고도화 시킨 문법이다. 

메서드의 강제성을 주기위해서 사용된다. 인터페이스는 상수와 추상메서드만 사용이 가능하다.

인터페이스는 그 자체를 사용하기 보다는 다른 클래스를 작성하는데 도움을 줄 목적으로 사용이 된다.

다른 클래스에서 지정할 때에는 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()메서드의 강제성이 사라져서 사용하지 않아도 오류가 나지 않는다.

반응형