JAVA/기초공부

[JAVA] 인터페이스 (Interfaces)

SoU330 2024. 10. 9. 17:10

 

 

 

자바에서 인터페이스란?

: 클래스가 구현해야 하는 메서드들의 집합을 정의하는 일종의 템플릿

  • 객체의 동작을 명시하는 역할을 한다.
  • 해당 인터페이스를 구현하는 클래스는 그 안에 선언된 모든 메서드를 반드시 구현해야 한다.

 

특징

  • 인터페이스 안에는 기본적으로 구현되지 않은 추상 메서드들이 정의된다. 메서드들은 선언만 되어  있고 실제 구현은 인터페이스를 구현하는 클래스에서 이루어진다.
  • 자바 클래스는 여러 인터페이스를 구현할 수 있다. 이를 통해 다형성을 높이고 클래스가 다양한 행동을 가질 수 있게 한다.
  • 인터페이스 안에 선언된 변수는 암묵적으로 public, static, final 로 간주되며 상수로 동작한다.
  • 인터페이스는 다른 인터페이스를 상속할 수 있으며 여러 인터페이스로부터 상속받아 새로운 인터페이스를 정의할 수 있다.

 

 

 

인터페이스의 필요성

  • 표준화와 일관성 유지 - 인터페이스는 클래스들이 동일한 메서드 시그니처를 가지도록 강제한다.
  • 다형성 지원 - 여러 클래스가 같은 인터페이스를 구현하면 그 클래스들은 해당 인터페이스 타입으로 다룰 수 있다.
  • 유연한 설계 - 서로 다른 클래스들이 상속 관계 없이 동일한 기능을 제공할 수 있다.
  • 다중 구현 - 하나의 클래스가 여러 역할이나 기능을 가질 수 있게 되어 더욱 복잡한 동작을 구현할 수 있다.
  • 의존성 감소 - 한 클래스가 다른 클래스의 구체적은 구현에 의존하지 않고 그 클래스가 구현한 인터페이스에 의존하게 된다.

 

 

 

 

인터페이스와 추상클래스의 비교

목적 동작(메서드) 정의를 강제 공통된 동작 및 상태 공유
상속/구현 가능성 여러 인터페이스 구현 가능 단일 추상 클래스 상속만 가능
메서드 유형 추상 메서드, default, static 메서드 추상 메서드와 구현된 메서드
필드 상수만 허용 (public, static, final) 인스턴스 변수 포함 가능
다형성 높은 유연성 다형성은 제한적

 

인터페이스 - 서로 관련 없는 클래스들이 동일한 동작을 구현하게 하려는 경우에 적합

추상 클래스 - 관련 있는 클래스들 간에 공통된 속성이나 동작을 공유하면서 부분적인 구현을 제공하려는 경우에 적합

 

 

 

 

인터페이스 사용 예

인터페이스 IAnimal

public interface IAnimal {
    String bike(); // 인터페이스 사용 시 추상메소드 취급
}

 

IAnimal을 상속받은 Cat, Dog, Cow

public class Cat implements IAnimal{ // IAnimal 인터페이스를 상속 받음
    public String bike() {
        return "야옹야옹!";
    }
}
public class Dog implements IAnimal{
    public String bike() {
        return "멍멍멍멍!";
    }
}
public class Cow implements IAnimal{
    public String bike() {
        return "음메음메";
    }
}

 

테스트 코드

import java.util.Scanner;

public class InterfaceTest_01 {
    static String answer;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 인터페이스 테스트
        do{
            System.out.print("동물 선택 고양이(0), 강아지(1), 소(2) : ");
            int kind = sc.nextInt();
            IAnimal ia = getBikeKind(kind);
            System.out.println(ia.bike()); // 선택된 동물의 울음소리
            System.out.print("\n계속하시겠습니까? (Y/N) ");
            answer = sc.next();
        } while(answer.equalsIgnoreCase("Y"));
    }

    // 인터페이스 형의 메소드 구현
    public static IAnimal getBikeKind(int kind) {
        IAnimal ia = null;
        switch (kind) {
            case 0 :
                ia = new Cat();
                break;
            case 1 :
                ia = new Dog();
                break;
            case 2:
                ia = new Cow();
                break;
        }

        return ia;
    }
}

-> Cat, Dog, Cow를 IAnimal 인터페이스로 한 번에 다룰 수 있다. bike() 를 실행하더라도 각자 동물에 맞는 울음소리가 출력된다.

 

 

 

 

 

 

 

 

 

 

 

'JAVA > 기초공부' 카테고리의 다른 글

[JAVA] java.lang 패키지 내의 주요 클래스들  (1) 2024.10.13
[JAVA] 예외처리  (0) 2024.10.13
[JAVA] 추상 클래스  (5) 2024.10.09
[JAVA] 형 변환, static, final  (2) 2024.10.09
[JAVA] 접근 제한자  (11) 2024.10.03