class와 같은 하나의 파일, 형태의 일종이다.
예를 들어, 우리가 TV를 만든다고 할 때 가장 먼저 이 기능만은 꼭 넣겠다, 반드시 필요한 기능을 고민해본다고 하자.
이러한 꼭 필요한 기능들에 대해 구현하지는 않고, 일단은 기능만 선언하여 저장하고 있는 구조 및 형태를 interface라 한다.
쉽게 말하면 명세서와 같은 개념이다.
interface는 하나의 형태일 뿐이다.
확장자는 기존과 같은 .java이다.
객체나 클래스를 만들때 어떤 기능을 넣어야 하는가, 단순한 명세서를 구현하는 것이 핵심이다.
위와 같이 간략한 TV기능 명세서가 주어졌을떄, 아래와 같이 interface를 구현할 수 있게 된다.
public interface TV{
public void turnOn();
public void turnOff();
public void changeVolume(int volume);
}
class를 선언할 때와 형태는 동일한데, 특히 부모 클래스에서 추상 메소드를 선언하는 것처럼 정의하여주면 된다.
※ 형태는 class와 같은 구조로 선언, interface 형태로 정의한다.
상수도 같이 선언해줄 수 있다.
public int MAX_VOLUME = 100;
기존 상수형은 FINAL 키워드를 사용해야 했었는데, 이 키워드가 없어도 된다는 점에서 차이가 있다.
public final int MAX_VOLUME = 100;
이 interface는 아직까지는 자체적인 인스턴스를 가지고 있지 않은 상태이다.
인스턴스가 있는 클래스를 인터페이스 명세서대로 구현하면 된다.
package javastudy
public class TV implements TV{
public void turnOn(){
..};
public void turnOff(){
..};
...
인터페이스를 클래스로 구현하는 것은 implements inteface 이다.
그 후 일반적인 클래스 선언과 메소드 사용하듯이 구현하면 된다.
public class TVTest{
public void main(String[] args){
TV tv = new TV();
tv.turnOff();
}
}
인터페이스는 하나의 객체가 가져야 하는 기능들을 간략하게 명세, 즉 하나의 type으로써는 작용할 수 있다.
또한 인터페이스의 가장 중요한 점 중 하나로, 동일 인터페이스를 가지는 여러 개의 비슷한 객체를 구현할 수 있다는 점을 기억하자.
프로그래머스 강의 - 인터페이스
https://programmers.co.kr/learn/courses/5/lessons/240