웹개발/JAVA

추상화(Abstract) - Interface

bergerac 2025. 2. 28. 09:11

1. 인터페이스란?

**인터페이스(Interface)**는 객체가 어떤 방식으로 동작해야 하는지를 정의하는 추상 타입입니다. 인터페이스는 다음과 같은 특징을 가집니다.

  • 추상 메서드와 상수만 포함된 특수한 클래스
  • 모든 메서드는 추상 메서드 (abstract)이며, 실제 구현은 인터페이스를 구현한 클래스에서 담당한다.
  • 모든 필드는 상수 (public static final)로 선언됨
  • 다중 구현 가능: 한 클래스에서 여러 인터페이스를 동시에 구현할 수 있음
  • 객체의 행동(행위)을 정의하는 역할을 수행

2. 인터페이스 특징

 1) 메서드: 모든 메서드는 public abstract 으로 선언!
 2) 변수(필드): 모든 변수는 public static final 로 선언!
>> 키워드 생략 가능

 

3. 인터페이스 구현

1) class file 만들기

intellij 의 경우 새로운 class 를 만들 때 interface로 만들어주면 Interface를 만들 수 있다.

interface PlayingCard {
}

 

 

2) 인터페이스 명명규칙:  upper camelCase로 선언하기(대문자 사용)

public static final int SPADE=4;
public static int DIAMOND =3;
public final int HEART = 2;
int CLOVER = 1;

다음과 같이 명명할 시에는 UpperCameCase로 선언해 주어야 하며, 인터페이스에는 상수만 들어갈 수 있다.

 

3) Implements(구현하다)

 Class에서 Interface를 활용하고자 할 때에는 다음과 같이 활용한다.

class 클래스명 implements 인터페이스명
class Card implements PlayingCard {
}

 

4) 인터페이스(Interface)에서 메서드(Method) 활용법

'default를 필수적으로 사용해야한다.

default void defaultMethod(){
    System.out.println("Default Method");
}

만약 다음과 같이 default를 생략하게 된다면 오류가 뜨게 된다.

 

5) 인터페이스 구현 방법

class Card implements PlayingCard {

    private String cardNumber;
    private String cardkind;

    Card(String cardNumber, String cardkind) {
        this.cardNumber = cardNumber;
        this.cardkind = cardkind;
    }//인터페이스 안의 추상메서드를 구현한 클래스 메서드는 public지정이 필수적이다

    @Override
    public String getCardNumber() {
        return cardNumber;
    }

    @Override
    public String getCardKind() {
        return cardkind;
    }

    //default method 재정의
    @Override
    public void defaultMethod(){
        System.out.println("card class에서 재정의된 default 메서드");

    }
}

 

6) 예제- 인터페이스를 활용한 Main Method

public class B_Interface {
    public static void main(String[] args) {
        PlayingCard.Card card = new PlayingCard.Card("7","HEART");

        System.out.println(card.getCardNumber());
        System.out.println(card.getCardKind());

        card.defaultMethod();

        PlayingCard.staticMethod();

        System.out.println(PlayingCard.CLOVER);
        System.out.println(PlayingCard.HEART);
        System.out.println(PlayingCard.DIAMOND);
    }
}

'웹개발 > JAVA' 카테고리의 다른 글

API -JavaTime Package  (1) 2025.03.02
API - Java.lang Package  (2) 2025.03.01
추상화(Abstract)-abstract class  (0) 2025.02.27
클래스 형(ClassType)변환  (0) 2025.02.26
Collection- Map Interface  (0) 2025.02.25