군만두의 IT 공부 일지

[스터디4] 04. 인터페이스 본문

프로그래밍/Java

[스터디4] 04. 인터페이스

mandus 2025. 2. 16. 17:33

목차

     

    오늘은 8장 인터페이스에 대해서 정리하려고 합니다. 상수에 필드에 대해서 몰랐던 내용을 알게 된 것 같습니다.

    8장. 인터페이스

    8.1 인터페이스의 역할

    • 인터페이스(interface): 두 장치를 연결하는 접속기
    • 인터페이스는 두 객체를 연결하는 역할을 함.
    • 상속보다 인터페이스를 이용해서 다형성을 구현하는 경우가 많음.

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

    인터페이스는 '*.java' 형태의 소스 파일로 작성되고 '*.class' 형태로 컴파일된다. 물리적 형태는 클래스와 동일하지만, 소스를 작성할 때 선언하는 방법과 구성 멤버가 클래스와 다르다.

    인터페이스 선언

    • class 키워드 대신 interface 키워드를 사용함.
    • 접근 제한자는 dafault, public를 붙일 수 있음.
    • 중괄호 안에는 상수 필드, 추상 메소드, 디폴트 메소드, 정적 메소드, private 메소드, 정적 메소드를 선언할 수 있음.
    interface 인터페이스명 { ... }
    public interface 인터페이스명 { ... }

    구현 클래스 선언

    • 인터페이스에 정의된 추상 메소드에 대한 실행 내용이 구현(작성)되어 있어야 함.
    • implements 키워드: 해당 클래스가 인터페이스를 통해 사용할 수 있음. 인터페이스의 추상 메소드를 재정의한 메소드가 있음.
    // 구현 객체
    public class B implements 인터페이스명 { ... }

    변수 선언과 구현 객체 대입

    • 인터페이스는 참조 타입에 속하므로 인터페이스 변수에는 객체를 참조하지 않는다는 null을 대입할 수 있음.
    • 인터페이스를 통해 구현 객체를 사용하려면, 인터페이스 변수에 구현 객체(번지)를 대입해야 함.
    • 인터페이스 변수에 해당 객체가 대입이 되었다면 변수를 통해 인터페이스의 추상 메소드를 호출할 수 있음.
    • 인터페이스 변수에는 구현한 어떤 객체든 대입이 가능함.
    RemoteControl rc;
    RemoteControl rc = new Television();
    RemoteControl rc = new Television();
    rc.turnOn();

    8.3 상수 필드

    • 인터페이스는 public statioc final 특성(생략 가능)을 갖는 불변의 상수 필드를 멤버로 가질 수 있음.
    • 상수명은 대문자로 작성하고, 서로 다른 단어로 구성되어 있는 경우에는 언더바(_)로 연결하는 것이 관례임.
    • 구현 객체와 관련 없는 인터페이스 소속 멤버인 상수는 인터페이스로 바로 접근해서 상수값을 읽을 수 있음.
    [public static final] 타입 상수명 = 값;
    int MAX_VOLUME = 10;
    
    System.out.println("리모컨 최대 볼륨: " + RemoteControl.MAX_VOLUME);

    8.4 추상 메소드

    • 인터페이스는 구현 클래스가 재정의해야 하는 public 추상 메소드(abstract method)를 멤버로 가질 수 있음.
    • 추상 메소드: 리턴 타입, 메소드명, 매개변수만 기술되고 중괄호 { }를 붙이지 않는 메소드. public abstract를 생량 가능함.
    • 추상 메소드는 객체가 인터페이스를 통해 어떻게 메소드를 호출할 수 있는지 방법을 알려줌. 인터페이스 구현 객체는 메소드의 실행부를 갖는 재정의된 메소드가 있어야 함.
    • 구현 클래스에서 추상 메소드를 재정의할 때, 인터페이스의 추상 메소드는 기본적으로 public 접근 제한을 갖기 때문에 public보다 낮은 접근 제한으로 재정의할 수 없음.
    • 인터페이스 변수를 선언하고 구현 객체가 대입되면, 인터페이스 변수로 추상 메소드를 호출할 수 있음. 대입된 구현 객체의 재정의된 메소드를 실행함.

    8.5 디폴트 메소드

    • 인터페이스에는 완전한 실행 코드를 가진 디폴트 메소드를 선언할 수 있음.
    • 추상 메소드는 실행부가 없지만, 디폴트 메소드는 실행부가 있음. 실행부에는 상수 필드를 읽거나 추상 메소드를 호출하는 코드를 작성할 수 있음.
    • 선언 방법은 클래스 메소드와 동일하고, default 키워드가 리턴 타입 앞에 붙음.
    • 디폴트 메소드는 구현 객체가 필요한 메소드임.
    • 구현 클래스는 디폴트 메소드를 재정의해서 수정할 수 있음. public 접근 제한자를 반드시 붙여야 하고, default 키워드를 생략해야 함.
    [public] default 리턴타입 메소드명(매개변수, ...) { ... }

    8.6 정적 메소드

    • 인터페이스에는 정적 메소드도 선언할 수 있음.
    • 추상 메소드와 디폴트 메소드는 구현 객체가 필요하지만, 정적 메소드는 구현 객체가 없어도 인터페이스만으로 호출할 수 있음.
    • 선언 방법은 클래스 정적 메소드와 동일함. 단, public을 생략해도 가능하다는 차이점이 있음.
    • 인터페이스에 선언된 정적 메소드는 구현 객체 없이 인터페이스명으로 접근해서 호출할 수 있음.
    • 정적 메소드의 실행부를 작성할 때 상수 필드를 제외한 추상 메소드, 디폴트 메소드, private 메소드 등을 호출할 수 없음. 이 메소드들은 구현 객체가 필요하기 때문.
    [public|private] static 리턴타입 메소드명(매개변수, ...) { ... }

    8.7 private 메소드

    • 인터페이스의 상수 필드, 추상 메소드, 디폴트 메소드, 정적 메소드는 모두 public 접근 제한을 갖고 있고 public을 생략해도 외부 접근이 가능함. 인터페이스에서 외부에서 접근할 수 없는 private 메소드 선언도 가능함.
    구분 설명
    private 메소드 구현 객체가 필요한 메소드
    private 정적 메소드 구현 객체가 필요 없는 메소드
    • private 메소드는 디폴트 메소드 안에서만 호출이 가능하지만, private 정적 메소드는 디폴트 메소드뿐만 아니라 정적 메소드 안에서도 호출이 가능함.
    • private 메소드는 디폴트와 정적 메소드들의 중복 코드를 줄이기 위한 용도임.

     

    이 글은 『이것이 자바다』 책을 학습한 내용을 정리한 것입니다.

    '프로그래밍 > Java' 카테고리의 다른 글

    [스터디4] 06. 제네릭  (0) 2025.03.02
    [스터디4] 05. 중첩 선언과 익명 객체  (0) 2025.02.25
    [스터디4] 03. 상속  (0) 2025.02.09
    [스터디4] 02. 클래스  (0) 2025.01.31
    [스터디4] 01. 참조 타입  (0) 2025.01.23
    Comments