클래스에 꼭 해야 일을 정해주는 기능
어떤 클래스에 대해 반드시 구현해야 할 의무를 부여 해 줄수 있습니다.
인터페이스를 지정한 클래스는 해당 인터페이스 내의 함수를 명시하지 않으면 오류가 발생합니다.
(abstract로 추상화 한 클래스는 인터페이스 내 모든 함수를 구현하지 않아도 됨)
이렇게하면 꼭 해야되는 일을 빠지지 않고 수행 할 수 있게 해주고, 지정된 일은 꼭 수행하니 일관성을 유지 할 수 있습니다.
Human 이라는 클래스를 만들고 사람이 매일 수행해야 할 루틴을 인터페이스로 만들어 보겠습니다.
// Human.java
public class Human {
private String name;
private String age;
}
이제 OneDayRoutin 이라는 인터페이스 파일을 만들어보겠습니다.
매일 기본적으로 씻고, 일하기, 운동하기라는 간단한 메서드를 넣어보겠습니다.
안씻고, 일안하고, 운동안하는 놈은 사람새기가 아닙니다.
인터페이스는 class 대신 interface를 적어주면 됩니다.
//OneDayRoutin.java
public interface OneDatRoutin {
void takingShower();
void workingJob();
void exercising();
}
근데 일반적인 함수와 달리 뭔가 허전하죠?
메서드를 선언하고 난뒤에 {} 안에 로직을 적어주어야 할 것 같은데 오류가 발생지 않습니다.
함수명만 적어주어도 기초적인 인터페이스 작성이 완료 됩니다.
세부 실행내용도 인터페이스를 부여받는 클래스에 함께 부여합니다.
이제 Human 이라는 클래스에 인터페이스를 부여해 보겠습니다.
방법은 클래스명에 implement 인터페이스 명을 적으면 됩니다.

인터페이스를 부여하는 순간부터 인터페이스 내의 메서드를 클래스 내부에 구현하지 않으면
구현하라고 빨간 줄이 뜹니다.
인터페이스 내부의 메서드는 하나도 빠짐 없이 구현해야 빨간 줄이 사라집니다.
하나하나 코드로 적어주어도 되지만 인텔리제이의 경우 Implement methods를 클릭하거나 단축키로 구현 항목들을 자동으로 생성해 줄 수 있습니다.

빨간 줄이 사라졌죠?
부모로부터 상속받았다는 뜻의 @override 어노테이션도 같이 생성되었습니다.
일단 코드야 어찌 되었든 이상태로도 실행은 문제가 없습니다.
아무 조건이 없는 한 각 메서드에 어떤 로직을 실행하든 구현만 해주면 오류가 없습니다.
실행을 확인하기 위해 각 임무완료 상태를 println으로 나타내는 코드를 적어주고 human 객체를 생성하여 실행해 보겠습니다.
// Human.java
public class Human implements OneDayRoutin{
String name;
int age;
// OneDayRoutin 인터페이스의 메서드 구현
@Override
public void takingShower() {
System.out.println(name+ "이 샤워 완료 ");
}
@Override
public void eatLunch() {
System.out.println(name+ "이 식사 완료 ");
}
@Override
public void goToSleep() {
System.out.println(name+ "이 취침 완료 ");
}
// 생성자
public Human() {
this.name =name;
}
}

객체 하나를 생성해서 메서드를 실행 해 보았습니다.
클래스내에 구현만 해준다면 어떤 로직을 내부에서 실행하든, 순서를 바꾸든, 실행을 해주지 않든 오류는 발생하지 않네요.
이상 간단하게 인터페이스에 구현에 대해 알아보았습니다.