[Java] 7장 인터페이스

1. 인터페이스(Interface)

Java에서 인터페이스는 클래스가 구현해야 하는 메서드의 집합을 정의하는 일종의 계약으로, 인터페이스는 다중 상속을 지원하며, 코드의 재사용성과 유연성을 높이는 데 중요한 역할을 합니다. 인터페이스는 interface 키워드를 사용해 정의합니다. 인터페이스는 메서드의 시그니처(이름, 매개변수, 반환 타입) 만을 포함하고, 구현(바디)은 포함하지 않습니다.

interface Soccer {
    void dribble(); // 드리블 
    void kick(); // 슛 
    void handle(); // 펀칭
    void success(); // 펀칭 성공공
}

 


2. 인터페이스 구현하기

인터페이스를 구현하는 클래스는 implements 키워드를 사용하여 인터페이스의 모든 메서드를 구현합니다.

class Player implements Soccer {

    @Override
    public void dribble() {
        System.out.println("드리블");
    }

    @Override
    public void kick() {
        System.out.println("슈팅");
    }

    @Override
    public void handle() {
        System.out.println("플레이어어가 스로인");
    }

    @Override
    public void success() {
        System.out.println("골인!");
    }
}

class Keeper implements Soccer {

    @Override
    public void dribble() {
        System.out.println("골키퍼가 공을 잡고 서있습니다");
    }

    @Override
    public void kick() {
        System.out.println("골키퍼가 공을 멀리 보냅니다!");
    }

    @Override
    public void handle() {
        System.out.println("펀칭");
    }

    @Override
    public void success() {
        System.out.println("골키퍼가 펀칭했습니다.");
    }
}

3. 인터페이스 사용하기

인터페이스를 사용하려면 다양한 클래스의 객체를 동일한 타입으로 처리할 수 있습니다. 이를 통해 다형성을 구현할 수 있습니다.

public class Main {

    public static void main(String[] args) {
        Soccer player = new Player();
        Soccer keeper = new Keeper();
        player.dribble(); // 드리블
        player.kick(); // 슈팅

        keeper.handle(); // 펀칭
        keeper.kick(); // 공을 멀리 보냄
        }
}

4. 인터페이스의 특징

  • 다중 상속 지원: 클래스는 여러 인터페이스를 구현
  • 추상 메서드: 인터페이스 내의 모든 메서드는 기본적으로 추상적(구현이 없고 바디가 없음)
  • 상수: 인터페이스 내에서 선언된 변수는 자동으로 public, static, final임, 즉 상수로 취급
interface Constants {

    int MAX_SPEED = 120; // public static final 생략 가능 
}

5. 디폴트 메서드와 정적 메서드

Java 8부터 인터페이스는 디폴트 메서드와 정적 메서드를 지원합니다.

  • 디폴트 메서드: 인터페이스 내에서 기본 구현을 제공 
interface Animal {

    void makeSound();

    default void sleep() {
        System.out.println("동물이 잠을 자고 있음");
    }
}
  • 정적 메서드
// 정적 메서드
interface Utility {

    static void printHello() {
        System.out.println("Hello");
    }
}

// 사용 
Utility.printHello(); // Hello

 

 

GitHub - Koras02/java-bloging: https://thinky.tistory.com/category/Back-End/Java

https://thinky.tistory.com/category/Back-End/Java. Contribute to Koras02/java-bloging development by creating an account on GitHub.

github.com

 

LIST

'Back-End > Java' 카테고리의 다른 글

[Java] 9장 컬렉션 프레임워크  (0) 2025.03.25
[Java] 8장 try-catch 문  (0) 2025.03.18
[Java] 6장 상속과 다형성  (0) 2025.03.06
[Java] 5장 클래스와 객체  (0) 2025.03.02
[Java] 4장 메서드 작성  (0) 2025.02.26