JAVA-20

이강민·2021년 10월 8일
0

JAVA 기초 1

목록 보기
20/20
post-thumbnail

인터페이스

여기서는 간단하게 기능만을 알아볼 것이다. 간단한 구조와 사용방법까지 알아보고 JAVA1 기초를 끝내도록 하겠다.

인터페이스란?

추상클래스를 고도화 시킨 문법이며, 반드시 추상 메서드와 상수만 선언해야 한다.
다른 클래스에서 인터페이스를 지정할 때에는 implements를 사용한다.(다중으로 지정 받을 수 있다.)지정된 인터페이스가 가지고 있는 추상 메서드들을 반드시 재정의 해야한다.
단, 인터페이스를 받은 클래스를 다시 다른 클래스에서 상속 선언하면 원하는 메서드만을 사용 할 수 있다.

인터페이스 사용 구조

클래스로 선언하지 않고 인터페이스로 선언하며, 마찬가지로 추상 메소드와 숫자형과 불리언형 타입만을 선언 할 수 있다. 이 인터페이스를 상속하기 위해서는 extends가 아닌 implements(구현)을 사용하며 아래의 선언은 클래스이름2가 클래스이름1의 기능을 구현한다라고 생각하면 된다.
일반 클래스상속과 마찬가지로 추상메서드로 선언되면 무조건 값을 받아 사용해야한다.
하지만 Adaptor를 이용하면 원하는 값만 상속 받을 수 있다.

Adaptor 사용 방법

인터페이스를 선언하는 것은 위와 같다. 이 인터페이스를 구현하는 클래스를 만들 때 abstract(추상) 을 붙여서 선언하면 원하는 메소드를 재정의 할 수 있고 만약 다른 클래스가 이 추상클래스를 상속받으면 마치 원하는 메소드만을 사용할 수 있는 것처럼 보인다.
인터페이스를 구현하는 클래스가 추상클래스로 선언되고 모든 메소드를 재정의하면 이를 Adaptor라고 한다. 이 Adaptor를 통해서 상속받은 모든 클래스들은 이제 추상메소드에 얽메혀있지 않고 원하는 메소드를 재정의할 수 있다.(이미 종전의 클래스에서 재정의하여 오류가 나지 않음, 만약 종전의 클래스에서 재정의 항목을 누락하면 이후 클래스에서 빠진 메소드를 재정의해야 오류가 나지 않음)

코드작성해보기(Army)

  1. Soldier라는 이름의 인터페이스를 만들고 추상메소드를 만들자. 그리고 일부 공통사항으로 상수를 변수선언하였다.
package day20;

public interface Soldier {
	int arms = 2;
	final static int leg = 2;
	
	abstract void eat(); 
	void work();
	void play();
	void sleep();
	void salute();
	
}
  1. 상병(Corporal)이라는 이름으로 이 인터페이스를 구현(implements)해보자. 그럼 모든 메소드를 재정의해야 오류가 나지 않을 것이다.
package day20;

public class Corporal implements Soldier{

	@Override
	public void eat() {
		System.out.println("메뉴를 물어보고 먹는다");
		
	}

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println("일병에게 맡긴다");
		
	}

	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("전화하다가 청소시간이 지나간다.");
	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub
		System.out.println("근무 없으면 개꿀");
	}

	@Override
	public void salute() {
		// TODO Auto-generated method stub
		System.out.println("목례하다가 간부에게 경례");
	}

}
  1. 병장이라는 클래스는 모든일을 하지 않는다. 오직 취침뿐... 그럼 병장을 위해서 Army라는 Adaptor를 만들어보자(Adaptor는 abstract class로 선언하고 implements 한다.)
package day20;

import java.awt.event.MouseAdapter;

//Adapter

public abstract class Army implements Soldier {

	@Override
	public void eat() {}
	
	@Override
	public void work() {}

	@Override
	public void sleep() {}

	@Override
	public void salute() {}
    
   	@Override
	public void salute() {}

}
  1. 병장을 위해서 Army가 모든 일을 해주었다. 병장은 매일 자기만 한다. 자기 메소드만 받아보자. 역시 병장은 잠만자도 오류가 나지 않는다.
package day20;

public class Sergeant extends Army{
	
	@Override
	public void sleep() {}
}

끄읕

profile
AllTimeDevelop

0개의 댓글

관련 채용 정보