인터페이스 Interface

Jiwon·2024년 1월 8일
0

인터페이스란?

사전적 의미로는 두 장치를 연결하는 접속기를 말한다.

자바에서는 인터페이스를 통해 여러 개의 객체가 서로의 가지고 있는 필드나 메소드를 사용할 수 있도록 한다.

인터페이스를 이용함으로써 자바에서 다형성을 구현한다. (상속보다 인터페이스를 더 많이 활용한다. 특히 spring!)

인터페이스 선언

public interface 인터페이스명 {
		// 상수 필드
		// 추상 메소드
		// 디폴트 메소드
		// 정적 메소드
		// ...	
}

추상 클래스는?

public abstract class 추상클래스명 {
		// 필드
		// 생성자
		// 메소드
}
  • 추상 클래스는 class이기 때문에 키워드에 class가 들어간다.
  • 추상 클래스를 상속받은 클래스는 생성자를 선언해야 한다.
  • 추상 클래스 내부에 선언된 메소드는 내용이 있을 수도, 없을 수도 있다.
    • 내용이 있다면 일반 메소드로 선언하고,
    • 내용이 없다면 abstract키워드를 붙혀서 추상 메소드로 구현해야 한다.
      • 추상 메소드는 상속 받은 클래스에서 무조건 구현해야한다.
👩‍💻 **[실습코드]** `package com.lec.interfa;` : 인터페이스 상속 받아 클래스만들기

인터페이스 구현 클래스 선언

public class B implements 인터페이스명 {
	... 
}
  • 인터페이스에서 선언한 추상 메소드를 재정의 해야 한다.

인터페이스의 상수 필드

[public static final] 타입 상수명 =;
  • 인터페이스 내부에 선언된 필드(변수)는
    무조건 상수가 된다. → 키워드를 생략해도 자동으로 적용된다.
  • 상수이기 때문에 이름은 대문자로만 작성해야 한다.

디폴트 메소드

[public] default 리턴타입 메소드명(매개변수, ...) { ... }
  • 인터페이스에서는 추상 메소드의 선언부만 선언할 수 있지만,
    디폴트 메소드를 사용하여 내용을 구현할 수 있다.
  • 디폴트 메소드를 구현할 때는 default 키워드를 리턴 타입 앞에 적어야 한다.
  • 인터페이스를 구현한 클래스에서 디폴트 메소드를 오버라이딩(재정의)할 수 있다.
    • 오버라이딩 주의할 점
      1. public 접근자를 반드시 붙힌다.
      2. default 키워드를 생각한다.
  • 자바 8부터 디폴트 메소드를 사용할 수 있게 되었다.
👩‍💻 **[실습코드]** `package com.lec.interfa2;` : 추상메소드, 디폴트 메소드, 정적 메소드

매개 변수 타입이 인터페이스라면?

아래 코드처럼 express메서드가 정의되어 있을 때, 이 메서드의 매개변수로 가능한 것이 무엇일까?(=‘Emotion 인터페이스타입의 매개변수로 가능한 것이 무엇인가?’)

interface Emotion {
	void  situation(int x, int y);
}

void express(Emotion e) {
	/* 내용 생략 */
}
  • 한 가지는 null 이며,
  • Emotion 인터페이스를 구현한 클래스 또는 그 자손의 인스턴스이다.
profile
작은 개발 기록

0개의 댓글