인터페이스

이재연·2021년 1월 15일
0

Java Basic

목록 보기
8/15

인터페이스란?

객체의 추상화.
구현체는 없지만 객체를 정의한다.

  • 인터페이스 사용이유

클래스간 결합도를 낮출수있다. 구현체가 아닌 인터페이스를 사용하면 클래스의 내부 사항을 자세히 알지 못해도 되기 때문이다.

표준화가 가능하다. 인터페이스를 보면 어떤 역할을 하는지 알 수 있기 때문이다.

다형성을 통해 유지보수를 쉽게 만든다. 인터페이스의 레퍼런스를 통해 사용하면 클래스를 변경하거나 수정하기 쉽기 때문이다.

정의 방법

interface 예약어를 이용해서 작성한다.

변수는 선언할 수 없다. public static final이 기본 값이며 생략해도 가능하다.

public abstract(추상 메소드)가 기본값이며 생략 가능하다.

interface MyInterface{
	int MY_NUMBER = 777;//public static final이 생략되어있음
	void myMethod();//public abstract가 생략되어있음
}

구현 방법

implemants 키워드를 통해서 구현한다.

인터페이스에 정의된 상수, 메소드를 사용할 수 있다.

추상클래스를 오버라이드 해야한다.

사용 방법

인터페이스를 상속받은 객체가 있다면 인터페이스 레퍼런스를 통해 구현체를 사용할 수 있다.

interface MyInterface{
	void hello();
}

class MyClass implements MyInterface{
	@Override
	void hello(){
		System.out.println("Im class");
	}
}

class MyAnotherClass implements MyInterface{
	@Override
	void hello(){
		System.out.println("Im anthoer class");
	}
}

이런 클래스가 있는 경우

MyInterface myInstance = new MyClass();
MyInterface myAnotherInstance = new MyAnotherClass();
myInstance.hello();// Im class 출력
myAnotherInstance .hello();//Im another class 출력

인터페이스 레퍼런스로 각 구현체에 접근이 가능하다.

상속

인터페이스는 다른 인터페이스를 상속 받을수 있다.

인터페이스간의 상속은 extends 키워드를 사용하며 클래스와 다르게 여러 인터페이스를 extends 할 수 있다.

클래스는 인터페이스를 상속 받을수 있다.

클래스는 implements 키워드를 사용하여 인터페이스를 상속받고 여러개의 인터페이스를 implements 할 수 있다.

interface Pen(){
	void Draw();
}

interface Eraser(){
	void Erase();
}

interface PencilCase extends Pen, Eraser{

}

class MyPencilCase implements PencilCase{
	@Override
	public void draw() {
	}

	@Override
	public void Erase() {
	}
}

기본 메소드(Default Method)

Java 8 부터 도입되었다. 인터페이스에 기본 구현을 가진 메소드를 정의할 수 있다.

@Override를 통해 재정의 할 수 있다. 하지 않는 경우 인터페이스의 구현을 사용하게 된다.

기본 메소드가 생겨서 인터페이스에 새로운 기능을 추가 할 때 마다 상속받은 모든 클래스에서 새로운 기능을 구현하지 않아도 된다.

interface Game{
	public default void play(){
		System.out.println("play game");
	}
}

class StarCraft implements Game{
	
}
StarCraft star = new StarCraft();
star.play();//play game 출력

하지만 다른 인터페이스에서 같은 메소드 시그니처가 정의되어있다면 필수로 구현 해줘야한다.

interface Shirt{
	public default void wear(){
		System.out.println("wear shirt");
	}
}

interface Glasses{
	public default void wear(){
		System.out.println("wear glasses");
	}
}

class Mannequin implements Shirt, Glasses{
	@Override
	public void wear(){
		//구현 해줘야한다.
	}
}

static 메소드

Java 8 부터 도입되었다. 인터페이스에서 함수를 구현할 수 있지만 상속이 불가능하다.

private 메소드

Java 9 부터 도입되었다. 인터페이스에서 함수를 구현할 수 있지만 상속이 불가능하다.

static 메소드와 달리 외부에서 메소드를 호출할 수 없다.

0개의 댓글