인터페이스

  • 메서드가 모두 추상 메서드인 순수 추상 클래스를 더 편리하게 사용할 수 있도록 기능을 제공
  • class 가 아닌 interface 키워드를 사용한다.
  • interface 는 모두 추상 메서드 이기 때문에 메서드에 abstract 키워드 생략 가능하다.
public interface InterfaceAnimal {
	void aound();
	void move();
}

⇒ 위와 같이 사용한다.

인터페이스 특징

  • 인터페이스 메서드는 모두 public, abstract 이다. ⇒ 생략이 권장 된다.
  • 인터페이스는 다중 구현 (다중 상속) 을 지원한다.
  • 자기 자신의 객체 생성이 불가능 하다.
  • 구현 시 모든 메서드를 오버라이딩 해야 한다.
  • 주로 다형성을 위해 사용된다.
  • 인터페이스의 자식 클래스는 뭔가 부모 인터페이스의 모든 것을 사용해야 하기 때문에 상속이 아니라 구현 이라고 표현한다. (메모리 구조는 상속과 같다)
  • 구현 하는 자식 class 에서 implemets 라는 키워드를 사용 하여 구현 받는다.

 

⎈ 인터페이스의 메서드의 접근 제어자가 기본 public 인 이유?

  • 인터페이스는 보통 여러 군데에 사용한다는 전제 하에 만들어 지기 때문에 public 이 기본으로 되어있다.

 

인터페이스의 멤버 변수

  • 인터페이스의 멤버 변수는 public, static, final 태그가 모두 포함되어 있다고 간주하고 사용된다.
  • static final 태그를 붙여 정적이면서 고칠 수 없는 상수로 만든다.

 

인터페이스의 메소드를 오버라이딩 한 메소드 호출 방식

⇒ 추상 class 의 추상 method 를 오버랑이딩 호출 과 같은 방식이다.

 

상속 VS 구현

  • 상속 (클래스)
    • 이름 그대로 부모의 기능을 물려 받는 것을 목적으로 사용한다.
    • 부모의 기능 (메서드) 의 바디부위가 존재하고 그것을 자식이 가져다 사용하는 느낌
  • 구현 (인터페이스)
    • 모든 기능 (메서드)이 추상 메서드 이기 때문에 바디 부위가 없는 메서드를 자식이 전부 오버라이딩해 구현 해낸다는 느낌

⇒ 상속과 구현은 사람이 표현하는 단어만 다를 뿐 자바 입장에서 의 메모리 구조는 같고, 동일하게 작동한다.

 

인터페이스 사용 이유?

  • 제약 : 인터페이스의 메서드를 반드시 구현해 내야한다는 것을 알려주기 위해, 그리고 인터페이스 내에 추상 메서드가 아닌 구현 메서드를 작성하는 실수를 막기 위해 사용한다.
  • 다중 구현 : 상속은 자식이 1개의 부모만 받을 수 있지만 구현은 여러개의 인터페이스를 부모로 구현 할 수 있다.

+ Recent posts