인터페이스란?
- 앞으로 자바를 활용해서 좋은 객체 지향 프로그래밍을 하기 위해서는 바로 자바 코드를 통해 구현하기 보다는 "어떤 기능을 만들어야 할까?" 에 대해서 충분한 고민이 필요하다
- 로또 기계를 만들려면 로또 기계가 제공하는 기능인 번호 섞기, 복권 결과 출력하기 와 같이 객체가 제공해줄 필수적인 기능들에 대해서 고민해야 한다
- 인터페이스는 이런 객체에 필요한 필수적인 기능들을 묶어둔 것이라고 이해할 수 있다
- 인터페이스 작성 문법은 다음과 같다
[public] interface interfaceName{
변수타입 필드명
메서드 선언
}
인터페이스의 특징
- 인터페이스의 모든 필드는 기본적으로 public static final로 선언이 된다
- 인터페이스의 모든 메서드는 기본적으로 public abstract로 선언된다
- abstract 메서드란 추상을 뜻하는 키워드로 메서드의 이름과 매개변수에 대해서만 정해두고 본문인 블록{ }은 선언하지 않은 메서드를 말한다
- abstract 메서드의 경우 인터페이스를 구현한 클래스에서 모두 오버라이딩을 해주어야 한다
- 인터페이스의 구현은 다음과 같이 이루어진다
- 상속과 달리 하나의 클래스가 여러개의 인터페이스를 구현할 수 있다
public interface CarPlay {
void playMusic();
}
public class Car implements CarPlay{
String fuel;
public Car(String fuel) {
this.fuel = fuel;
}
@Override
public void playMusic() {
System.out.println("음악을 틉니다");
}
}
default 메서드
- 자바 8 이상부터는 모든 인터페이스의 메서드가 public abstract 으로 고정되지 않고 default로 설정할 수 있게 되었다
- 기본적으로 default 메서드는 abstract 메서드가 코드 블록 {}을 적지 않는 것과 다르게 코드 블록{}을 작성해주어야 한다
- 왜 인터페이스의 본질에 맞지 않게 이렇게 바뀌었을까? 다음 예를 이해해보자
- 기가 막힌 인터페이스를 개발해내서 오픈소스로 공개했다
- 많은 사람들이 인터페이스를 구현해서 잘 사용하고 있다
- 디버깅을 하다보니 결함이 발견되어 인터페이스에 메서드가 하나 더 추가되어야 한다
- 오픈소스 버전을 업데이트했다. 사람들도 따라서 업데이트했더니 인터페이스를 구현한 클래스에 에러가 발생했다
- 인터페이스를 수정해도 기존 인터페이스를 구현한 클래스에 영향을 주지 않고 새로운 기능만을 제공하기 위해서 추가된 기능이다
static 메서드
- 자바 8 이상부터 제공한다
- 말 그대로 static 메서드이다. 인터페이스를 구현하지 않아도 인터페이스명.메서드명 으로 활용할 수 있는 메서드를 선언할 수 있다
'TIL > Java' 카테고리의 다른 글
[Java] Object 클래스 (1) | 2025.02.04 |
---|---|
[Java] 추상 클래스 (1) | 2025.02.04 |
[Java] 클래스의 생성자 (0) | 2025.02.03 |
[Java] 자바의 객체 지향 문법 (0) | 2025.02.03 |
[Java] 클래스의 필드와 메서드 (1) | 2025.02.01 |