[Java] 인터페이스

2025. 2. 4. 00:38·TIL/Java

인터페이스란?

    • 앞으로 자바를 활용해서 좋은 객체 지향 프로그래밍을 하기 위해서는 바로 자바 코드를 통해 구현하기 보다는 "어떤 기능을 만들어야 할까?" 에 대해서 충분한 고민이 필요하다
    • 로또 기계를 만들려면 로또 기계가 제공하는 기능인 번호 섞기, 복권 결과 출력하기 와 같이 객체가 제공해줄 필수적인 기능들에 대해서 고민해야 한다
    • 인터페이스는 이런 객체에 필요한 필수적인 기능들을 묶어둔 것이라고 이해할 수 있다
    • 인터페이스 작성 문법은 다음과 같다
[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
'TIL/Java' 카테고리의 다른 글
  • [Java] Object 클래스
  • [Java] 추상 클래스
  • [Java] 클래스의 생성자
  • [Java] 자바의 객체 지향 문법
Charlie.han
Charlie.han
백엔드 개발자가 되기 위해 공부한 것들(Java, Spring, SQL, 네트워크, AWS 등)을 기록하고 공유하는 블로그입니다.
  • Charlie.han
    Chalie's Devlog
    Charlie.han
  • 전체
    오늘
    어제
    • 분류 전체보기 (32)
      • TIL (32)
        • Java (20)
        • Spring (2)
        • SQL (5)
        • 알고리즘 (4)
        • 트러블슈팅 (1)
      • WIL (0)
        • 카카오테크 부트캠프 (0)
  • 태그

    sql where
    프로그래머스 소수찾기 자바
    Java
    string
    super()
    static메서드
    다형성
    인텔리제이 한글 깨짐
    프로그래머스 베스트앨범 자바
    인터페이스
    SQL
    데이터베이스
    object
    jdk란?
    프로그래머스 소수찾기
    sql limit
    static 필드
    타입안전열거형
    제네릭 클래스
    프로그래머스 베스트앨범
    자바
    default메서드
    인텔리제이한글
    컬렉션프레임워크
    묵시적형변환
    참조공유
    불변객체
    인스턴스
    프로그래머스
    unsupported characters for the charset 'iso-8859-1'
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Charlie.han
[Java] 인터페이스
상단으로

티스토리툴바