Java 클래스 인터페이스

까만호랭·2023년 8월 26일
1

인터페이스

인터페이스란 추상 메소드만으로 이루어진 클래스를 의미하며 상속관계와는 다르게 다중상속이 가능하다.
이때 추상메소드는 구현 내용 없이 메소드만 선언해 놓은 형태로 정의하고 그 인터페이스를 구현받는 클래스가 추상메소드 또한 구현해야한다.

예를 들면, 요리를 시킬때 요리 주제(추상 메소드)만 던져주고 요리주제를 받아 직접 요리를 하는 느낌이라고 보면 된다.
요리주제 알려주는 곳 : 인터페이스 클래스
요리주제를 받아 요리하는 곳 : 인터페이스 클래스를 상속받은 클래스

인터페이스 실습(interface)

public interface Flyer {
	int FAST = 100; //static값, final임 값 못바꿈
	void fly();
	boolean isAnimal();
}

인터페이스를 선언하기 위해 interface를 써줘야 한다.
이때 FAST는 실제로 코드에 대입을 해보면 글자가 기울어져 있다.
이유는 인터페이스 내의 변수는 반드시 static final로 지정되어 있기 때문에 가독성을 주기 위해 이클립스에서는 기울어져서 보인다.
이때 fly(), isAnimal()이라는 메소드가 선언되어져 있다. --> 추상메소드

인터페이스 클래스를 상속받은 클래스(implements)

public class Airplane implements Flyer{
	@Override
	public void fly() {
		System.out.println("커다란 엔진소리와 함께 미세먼지 위 하늘로 날아감");
	}
	
	@Override
	public boolean isAnimal() {
		return false;
	}

}

Airplane클래스가 Flyer 인터페이스 클래스를 상속받았다는 것을 implements를 통해 선언한다.
이때 항상 인터페이스를 구현하는 클래스는 반드시 자신이 구현하는 인터페이스의 모든 추상 메소드를 오버라이딩 를 해야만 한다. (하지않으면 에러 발생)

public class FlyerUtil {
	public static void showData(Flyer f) {
		System.out.println("동물인가요?"+f.isAnimal());
	}
}

여기서 implements라는 키워드가 없이 showData의 파라미터 값에 (Flyer f)라는 값이 들어가 있는 것이 코드에 나와있다.
인터페이스를 구현하는 클래스는 implements 키워드를 사용하여 상속을 명시적으로 선언하지 않아도 된다는 특징이 있기 때문에 가능하다.

(Flyer f)라는 인터페이스 타입으로 다룰 수 있는 이유는 자바에서의 다형성과 인터페이스 특성 때문이다.

⚠️ 이제 Flyer f가 가능한 이유를 알아보자

  1. 인터페이스 구현 : Airplane 클래스가 Flyer 인터페이스를 구현했기 때문에 Flyer 인터페이스가 정의한 메소드인 flyisAnimal 메소드가 Airplane 클래스 내에서 구현되어 있다.
  1. 다향성 활용 : Airplane 클래스의 객체는 Flyer 인터페이스의 메서드를 사용할 수 있으므로, 이 객체를 Flyer 인터페이스 타입인 Flyer 변수로 참조할 수 있다. 이렇게 함으로써 객체의 실제 클래스는 Airplane이지만, 변수의 타입은 Flyer로서 Flyer 인터페이스에 정의된 메서드들만 사용할 수 있다.

즉, Flyer fFlyer 인터페이스의 구현체인 Airplane 객체를 가리키는 변수이다. 이 변수를 통해 Flyer 인터페이스에 정의된 메서드들을 호출할 수 있다. 이것이 가능한 이유는 Airplane 클래스가 Flyer 인터페이스의 구현을 제공하고 있기 때문이다.

(다형성 : 서로 다른 클래스들이 같은 부모 클래스나 인터페이스를 상속하거나 구현하여 하나의 타입으로 다룰 수 있는 개념)

profile
남들과 함께 발자국을 남기는 까만호랭

0개의 댓글