자바 인터페이스에 대하여(클래스와 차이, 사용법)

V_브이_v·2024년 12월 6일
2

자바스터디

목록 보기
1/4
post-thumbnail

0. 인터페이스 사용 예시

인터페이스 정의

interface Calculator {
    int add(int x, int y); // 추상 메서드
    int subtract(int x, int y); // 추상 메서드
    default int multiply(int x, int y) { // Java 8 이후 default 메서드
        return x * y;
    }
    static int divide(int x, int y) { // Java 8 이후 static 메서드
        return x / y;
    }
}

인터페이스 구현체

class SimpleCalculator implements Calculator {
    @Override//컴파일 단계에서 오탈자를 예방합니다
    public int add(int x, int y) {
        return x + y;
    }

    @Override
    public int subtract(int x, int y) {
        return x - y;
    }
}

사용 코드

public class Main {
    public static void main(String[] args) {
        Calculator calc = new SimpleCalculator();
        
        System.out.println("Addition: " + calc.add(10, 5)); 
		// 구현된 메서드 호출
        System.out.println("Subtraction: " + calc.subtract(10, 5)); 
		// 구현된 메서드 호출
        System.out.println("Multiplication: " + calc.multiply(10, 5)); 
		// default 메서드 호출
        System.out.println("Division: " + Calculator.divide(10, 5)); 
		// static 메서드 호출
    }
}

출력 결과

Addition: 15
Subtraction: 5
Multiplication: 50
Division: 2

1. 인터페이스란 무엇인가?

인터페이스는 메서드의 규칙을 정의하는 JAVA의 문법입니다.

즉, 무엇을 해야하는지에 대한 규칙만 적혀있다고 생각하면 됩니다.

쉽게 인터페이스는 메서드 시그니처(이름, 매개변수, 반환값 등)와 상수를 가지고
구현체(클래스)와 계약을 맺는다라고 이해해봅시다.

인터페이스에는 계약의 규칙을 적어놓고
실제 계약을 구현하는 코드는 인터페이스를 implements한 클래스(구현체)에서 작성합니다.

  • 인터페이스는 메서드의 설명만 가질 수 있고 실제 구현을 가질 수 없습니다
    구현부가 없는 추상 메서드만 가질 수 있습니다.
    (JAVA 8 부터는 default와 static 메서드로 일부 구현 가능)

  • 인터페이스는 상수만 가질 수 있습니다.
    인터페이스의 필드는 기본적으로 public static final로 선언되며, 수정이 불가능합니다.

  • 인터페이스는 이것을 구현하는 클래스가 강제적으로 필요함
    (implements 키워드 사용)

  • 클래스는 다중 상속이 불가능하지만 인터페이스는 다중 구현이 가능합니다
    (상속은 2명의 아버지에게 받을 수 없지만 계약은 2명이상의 사람과 가능)

  • 인터페이스를 구현할 때는 정의된 메소드를 반드시 구현해야합니다


2. 클래스와 인터페이스를 구분해서 사용하는 이유

  • 역할이 다릅니다
    • 클래스는 구현을 포함하여 특정 기능을 제공합니다
    • 인터페이스는 메서드 이름과 매개변수 같은 규칙만 정의 하고 실제 구현은 이를 구현하는 클래스가 담당합니다.
  • 확장성이 좋습니다
    • 인터페이스를 사용하면 다양한 클래스에서 동일한 메서드 시그니처를 강제할 수 있습니다.
    • 이렇게 하면 서로 다른 구현을 가진 객체를 동일한 방식으로 다룰 수 있습니다.
구분클래스인터페이스
구현 여부구현된 메소드 포함구현되지 않은 추상 메소드 만 포함
상속한번에 하나의 클래스만 상속가능여러 인터페이스 동시에 구현 가능
객체 생성 가능 여부객체를 생성할 수 있음생성자 메소드가 없으므로 객체 생성 불가
필드멤버 변수와 상수 모두 포함 가능상수만 포함
사용목적기능 구현 및 확장규약 제공 및 구현 강제

인터페이스도 객체이지만 구현하는 생성자가 없으므로 객체를 생성할 수 없습니다.


3. 그렇다면? 추상클래스를 사용하면 되지, 왜 인터페이스를 사용하는 걸까요?

추상클래스 & 인터페이스


4. 인터페이스 사용 방법

Java에서는 클래스가 인터페이스를 구현하기 위해 implements 키워드를 사용합니다.

  • implements 키워드를 통해 클래스는 인터페이스에 정의된 메서드를 반드시 구현해야 합니다.
  • 한 클래스에서 여러 인터페이스를 동시에 구현할 수 있습니다.
  • 이를 통해 다중 상속의 제한을 우회하고 유연한 설계를 가능하게 합니다.

구조

interface 인터페이스이름 {
    // 추상 메서드 선언
    반환타입 메서드이름(매개변수);
}

class 클래스이름 implements 인터페이스이름 {
    // 인터페이스에 정의된 메서드를 반드시 구현해야 함
    @Override
    반환타입 메서드이름(매개변수) {
        // 메서드 구현
    }
}

예제

interface Animal {
    void sound(); // 동물 소리
    void eat();   // 먹는 행동
}

class Dog implements Animal {
    @Override
    public void sound() {
        System.out.println("멍멍!");
    }

    @Override
    public void eat() {
        System.out.println("강아지가 밥을 먹습니다.");
    }
}

위 코드에서

  • Animalsoundeat 메서드를 정의한 인터페이스입니다.
  • Dog 클래스는 Animal 인터페이스를 구현하여 각 메서드를 실제로 정의했습니다.

인터페이스와 구현 클래스는 계약이행의 관계입니다.

  • 인터페이스는 “이 클래스가 반드시 이러한 메서드를 가져야 한다”는 규약(계약)을 정의합니다.
  • 구현 클래스는 “그 계약을 이행”합니다.
profile
지속가능한 사회적 가치의 현실화

1개의 댓글

comment-user-thumbnail
2024년 12월 6일

저도 처음 인터페이스를 공부할 때 추상 클래스가 있는데 이걸 왜 써야되지 싶어서 따로 찾아봤던 기억이 나네요! 잘 보고 갑니다~

답글 달기