자바 인터페이스 interface

728x90

인터페이스

 

특징:

  • abstract의 클래스는 interface로 변경이 가능하다
  • interface는 다수의 상속이 가능하다
  • interface는 interface끼리의 상속이 가능하다. 이 때 interface끼리의 상속은 extends를 사용한다.
  • interface로 바꾸는 경우는 다형성 + extends대신 implements를 사용하여 상속한다.
  • interface로 선언을 해주는 경우는 기능에 대한 팀원과의 분업 혹은 회사간의 분업으로 인한 특정 기능이 공유되어야 할 때 사용된다.
  • 인터페이스를 상속받은 클래스는 반드시 그 메서드를 구현해야 한다.

 

인터페이스를 통한 기능의 구현 후 main 메서드 안에서 실행하는 예제

 

회사 내의 1)회사원의 이름과 사원번호를 받아서 저장해주는 메서드와 2)저장받은 메서드를 사원번호와 대조하여 맞으면 회사원의 이름을 출력하는 메서드

 

코드 설명:

1. 조건문을 부합시킬 목적으로 사용하기 위한 공백의 인터페이스를 생성한다.

2. TestOne, TestTwo의 클래스를 생성하여 기본 멤버변수를 선언한 후 생성자를 생성해 값을 초기화시켜준다. 

3. TestOne에만 interface를 implements로 상속받아 TestPrintMain의 클래스에 메서드의 조건문에 부합시키게 만든다.

    - TestPrintMain메서드의 instanceof 사용

4. 마지막으로 TestMain클래스에서 TestPrintMain 메서드를 사용하면 조건문이 부합하는 클래스만 overriding이 된다.

 

interface TestScoreAbove {
//	인터페이스 조건문에 쓸 공백 인터페이스
}

class TestPrintMain {
	
	public static String filterPrint(Object obj) {
		if(obj instanceof TestScoreAbove) {
			return obj.toString();
		}
		return "인터페이스 조건 확인 불가";
//		instanceof를 통해 조건문, 즉 interface를 상속받은 클래스만 본인의 toString을 오버라이딩
//		할 수 있게되고 상속받지 않은경우 "조건 확인 불가" 라는 문구를 출력
	}
}

public class TestOne implements TestScoreAbove{
	int KOR;
	int ENG;
	int MaTH;
//	조건문을 위한 멤버변수와 생성자를 통한 초기화
	
	public TestOne(int kOR, int eNG, int maTH) {
		KOR = kOR;
		ENG = eNG;
		MaTH = maTH;
	}
	@Override
	public String toString() {
		if(KOR>10) {
			return "점수 확인: " + KOR;
		}
		return "점수 낮음";
	}
//	오버라이딩을 할 toString
}

class TestTwo{
	int KOR;
	int ENG;
	int MaTH;

	public TestTwo(int kOR, int eNG, int maTH) {
		KOR = kOR;
		ENG = eNG;
		MaTH = maTH;
	}
	@Override
	public String toString() {
		if(KOR>10) {
			return "점수 확인: " + KOR;
		}
		return "점수 낮음";
	}
}
class TestMain{
	
	public static void main(String[] args) {
		TestOne t1 = new TestOne(50, 40, 80);
		TestTwo t2 = new TestTwo(30, 40, 80);
		
//		각각의 개체를 선언하고 instanceof를 적용한 메서드를 통해 출력하게 되면 
//		인터페이스를 상속받은 클래스는 본인의 toStirng을 오버라이딩하여 출력하게 된다.
		
//		출력문:
//		점수 확인: 50
//		인터페이스 조건 확인 불가
		
		System.out.println(TestPrintMain.filterPrint(t1));
		System.out.println(TestPrintMain.filterPrint(t2));
	}
}
728x90