Interface

2024. 7. 31. 01:35·Java 문법정리 (Array부터)

 

인터페이스의 기본 개념

인터페이스는 클래스와 비슷하지만, 객체를 생성할순 없다.

메서드 정의만 가능!

실제 구현은 구현하는 클래스가 제공

 

인터페이스 정의

EX)

public interface Animal {
    void eat();
    void sleep();
}

 

인터페이스는 interface 키워드를 사용하여 정의한다.

메서드의 서명만을 정의

메서드 구현은 x

 

인터페이스 구현

인터페이스를 구현하는 클래스는 implements 키워드를 사용하여 인터페이스를 구현함.

인터페이스에 정의된 모든 메서드를 구현해야 한다.

인터페이스받은 클래스의 메서드는 오버로드를 한다.

public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating.");
    }

    @Override
    public void sleep() {
        System.out.println("Dog is sleeping.");
    }
}

 

Dog 클래스는 Animal 인터페이스를 구현하며, eat()과 sleep() 메서드를 실제로 구현한다. 

 

 

인터페이스의 특징

다중 상속 지원

Java는 클래스에서 다중 상속을 지원하지 않지만, 인터페이스를 통해 다중 상속을 구현할 수 있다. 하나의 클래스는 여러 개의 인터페이스를 구현할 수 있다.

 

public interface Swimmer {
    void swim();
}

public interface Flyer {
    void fly();
}

public class Duck implements Swimmer, Flyer {
    @Override
    public void swim() {
        System.out.println("Duck is swimming.");
    }

    @Override
    public void fly() {
        System.out.println("Duck is flying.");
    }
}

 

Duck 클래스는 Swimmer와 Flyer 두 개의 인터페이스를 구현하고 있다.

 

인터페이스 상속

인터페이스는 다른 인터페이스를 상속할 수 있습니다. 인터페이스를 상속받은 인터페이스는 상속받은 모든 메서드를 구현해야 한다.

public interface Animal {
    void eat();
}

public interface Pet extends Animal {
    void play();
}

public class Cat implements Pet {
    @Override
    public void eat() {
        System.out.println("Cat is eating.");
    }

    @Override
    public void play() {
        System.out.println("Cat is playing.");
    }
}

 

Pet 인터페이스는 Animal 인터페이스를 상속받고, Cat 클래스는 Pet 인터페이스를 구현한다.

 

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

Java 8부터 인터페이스는 메서드 구현을 가질 수 있게 되었으며, 이는 디폴트 메서드와 정적 메서드로 구분된다.

  • 디폴트 메서드는 인터페이스에 기본 구현을 제공하는 메서드이다. 클래스가 이 메서드를 구현할 필요가 없지만, 필요에 따라 오버라이드할 수 있다.
public interface Animal {
    void eat();
    
    default void breathe() {
        System.out.println("Animal is breathing.");
    }
}

 

 

정적 메서드는 인터페이스 자체에 속하며, 구현하는 클래스와는 독립적으로 호출할 수 있다.

public interface Utility {
    static void printMessage() {
        System.out.println("This is a static method in an interface.");
    }
}

 

private 메서드

Java 9부터 인터페이스는 private 메서드를 정의할 수 있으며, 이는 인터페이스의 디폴트 메서드나 정적 메서드에서만 호출될 수 있다.

public interface Example {
    private void helperMethod() {
        System.out.println("This is a private method.");
    }

    default void defaultMethod() {
        helperMethod(); // 사용 가능
    }
}

 

인터페이스 활용

인터페이스는 다음과 같은 상황에서 유용하게 사용된다:

  • 다형성: 인터페이스를 통해 다양한 클래스에서 일관된 방식으로 메서드를 호출할 수 있다.
  • 객체의 구현체 교환: 인터페이스를 사용하면 실제 구현을 교체하더라도 인터페이스를 통해 일관된 방식으로 상호작용할 수 있다.
  • 캡슐화: 인터페이스는 클래스의 구현을 숨기고, 외부에 필요한 메서드만 공개할 수 있다.
  • 콜백 메커니즘: 인터페이스는 콜백 메커니즘을 구현할 때 유용함.

예제

아래는 인터페이스를 사용하는 실제 예제이다.

public interface Payment {
    void processPayment(double amount);
}

public class CreditCardPayment implements Payment {
    @Override
    public void processPayment(double amount) {
        System.out.println("Processing credit card payment of " + amount);
    }
}

public class PayPalPayment implements Payment {
    @Override
    public void processPayment(double amount) {
        System.out.println("Processing PayPal payment of " + amount);
    }
}

public class PaymentProcessor {
    public void makePayment(Payment paymentMethod, double amount) {
        paymentMethod.processPayment(amount);
    }
}

public class Main {
    public static void main(String[] args) {
        Payment creditCard = new CreditCardPayment();
        Payment paypal = new PayPalPayment();
        
        PaymentProcessor processor = new PaymentProcessor();
        processor.makePayment(creditCard, 100.00);
        processor.makePayment(paypal, 200.00);
    }
}

 

Payment 인터페이스: 결제 처리 메서드를 정의한다.

CreditCardPayment와 PayPalPayment 클래스: Payment 인터페이스를 구현하여 다양한 결제 방법을 제공한다.

PaymentProcessor 클래스: Payment 인터페이스를 사용하여 결제를 처리한다.

 

 
 
반응형

'Java 문법정리 (Array부터)' 카테고리의 다른 글

동등성, 동일성  (0) 2024.08.09
Enum  (0) 2024.08.01
Calendar(java 8이후는 java.time)  (0) 2024.07.26
기본형 매개변수, 참조형 매개변수  (2) 2024.07.23
return 문  (2) 2024.07.23
'Java 문법정리 (Array부터)' 카테고리의 다른 글
  • 동등성, 동일성
  • Enum
  • Calendar(java 8이후는 java.time)
  • 기본형 매개변수, 참조형 매개변수
wanduek
wanduek
차근차근 쌓아가는 지식
  • wanduek
    완득님의 블로그
    wanduek
  • 전체
    오늘
    어제
    • 분류 전체보기 (194)
      • Onboarding (0)
      • 아티클 (0)
      • SQL 정리 (20)
      • 웹개발 기초정리(프엔) (9)
      • (Java)코테연습 (27)
      • 미니 프로젝트 (9)
        • 자기소개 웹페이지 (5)
        • 수강생 관리 프로그램(Java) (4)
      • GitHub 오류 및 명령어 정리 (7)
      • Java 문법정리 (Array부터) (17)
      • Java로 이용한 기능 (2)
      • Web지식 (12)
        • web3 (6)
        • 네트워크 (6)
      • 인텔리제이 오류 대처 방법 (1)
      • Computer Science (7)
      • Spring (38)
        • 미니 프로젝트(배달) (2)
        • Spring 트러블 슈팅 (3)
        • QueryDSL, JPQL (3)
        • 미니 프로젝트(뉴스피드) (5)
        • 미니 프로젝트(Trello) (2)
      • 개발자 밋업 (1)
      • Docker (2)
      • Redis (1)
      • AWS (6)
        • AWS 트러블 슈팅 (2)
      • Jmeter (2)
      • 우리 지금 만나 (12)
      • Kafka (1)
      • RabbitMQ (2)
        • 트러블 슈팅 (1)
      • STOMP (2)
      • WebSocket (3)
        • 트러블 슈팅 (2)
      • Node.js (2)
      • Elastic Search (2)
      • Nginx (1)
      • 퍼블엘 (2)
      • openresty (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    git
    ㅏㄷ
    where
    백앤드개발자 #초심자
    groupby
    fetch
    github
    json
    jquery
    SQL
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
wanduek
Interface
상단으로

티스토리툴바