Java | 인터페이스

Lumpen·2025년 4월 12일
0

Java

목록 보기
16/38

인터페이스

자바는 순수 추상 클래스를 더 편하게 사용할 수 있는
인터페이스를 제공한다

순수 추상 클래스

public abstract class Animal {
	public abstract void sound();
}

인터페이스

public interface Animal {
	void sound();
}

인터페이스는 순수 추상 클래스와 같지만
약간의 편의 기능이 추가된다

  • 인터페이스의 모든 메서드는 모두 public, abstract 로 생략하여 사용한다
  • 인터페이스는 다중 구현(상속)을 지원한다
  • 인터페이스의 멤버 변수는 public, static, final 이 포함되어 있다고 간주된다
  • 인터페이스의 멤버 변수는 상수이기 때문에 변수명 작성 시 대문자를 언더스코어로 구분한다
  • 인터페이스는 모든 기능을 상속받아 쓰는 것이 아니라 구현해야 하기 때문에 구현으로 표현한다

클래스 상속 관계는 UML 에서 실선을 사용하지만
인터페이스 구현 관계는 점선을 사용한다

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

인터페이스도 클래스와 마찬가지로
인터페이스를 구현한 자식 클래스 생성 시 함께 메모리에 생성되어
클래스와 같이 동작한다
추상 클래스와 순수 추상 클래스, 인터페이스 모두 편의 기능과 제한에 차이가 있을 뿐
프로그램 코드, 메모리 구조상에서는 같다
인터페이스도 모두 자바에서는 .class 로 다루어진다

인터페이스는 순수 추상 클래스에 편의 기능과 제한이 추가된 것으로 생각하면 된다

인터페이스는 메서드의 이름만 있는 설계도이고
이 설계도가 어떻게 작동할지는 하위 클래스에서 모두 구현해야 한다
그래서 인터페이스는 구현한다고 표현한다

상속과 구현은 표현이 다르지만 자바 입장에서는 똑같다
일반 상속 구조와 동일하게 작동한다

인터페이스 사용 이유

모든 메서드가 추상 메서드인 경우 순수 추상 클래스를 만들어도 되지만
다음과 같은 중요한 기능이 추가되어 있기 때문에 인터페이스를 사용하는 편이 좋다

  • 제약: 추상 클래스의 경우 일반 메서드를 작성할 수 있어, 기능을 자식 클래스에서 구현하지 않을 수도 있다 인터페이스는 모든 메서드가 추상 메서드이기 때문에 좋은 제약이 추가된 것이다
  • 다중 구현: 자바에서 클래스 상속은 부모를 하나만 지정할 수 있지만 인터페이스는 다중 구현이 가능하다

인터페이스 - 다중 구현

클래스가 다중 상속을 지원하지 않는 이유는 다이아몬드 문제가 발생하기 때문이다
다중 상속을 허용하면 양 부모중 어떤 곳의 메서드를 사용해야할지 불분명해지는 문제가 발생한다

인터페이스는 모두 추상 메서드로만 이루어져 있기 때문에
모든 메서드를 오버라이딩 해야한다
오버라이딩 된 함수의 경우 자식의 메서드가 호출된다
다중 구현을 허용해도 다이아몬드 문제가 발생하지 않는다

다중 구현을 하면 구현을 제공한 모든 인터페이스가
자식과 함께 메모리에 생성된다

profile
떠돌이 생활을 하는. 실업자, 부랑 생활을 하는

0개의 댓글