인터페이스

Do_It·2024년 4월 1일

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

인터페이스 특징

순수 추상 클래스의 특징과 같음
인터페이스는 상속이 아니라 구현이라고 한다.

상속 vs 구현

상속은 이름 그대로 부모의 기능을 물려 받는 것이 목적이다. 하지만 인터페이스는 모든 메서드가 추상 메서드이다. 따라서 물려받을 수 있는 기능이 없고, 오히려 인터페이스에 정의한 모든 메서드를 자식이 오버라이딩 해서 기능을 구현해야 한다. 따라서 구현한다고 표현한다.

인터페이스는 이름만 있는 설계도이고, 이 설계도가 실제 어떻게 작동하는지는 하위 클래스에서 모두 구현해야 한다. 따라서 인터페이스의 경우 상속이 아니라 해당 인터페이스를 구현한다고 표현한다.

인터페이스를 사용해야 하는 이유

모든 메서드가 추상 메서드인 경우 순수 추상 클래스를 만들어도 되고, 인터페이스를 만들어도 된다. 그런데 왜 인터페이스를 사용해야 할까?

  • 제약 : 인터페이스의 규약은 반드시 메서드를 구현해야 한는 것이다. 그런데 순수 추상 클래스의 경우 미래에 누군가 그곳에 실행 가능한 메서드를 끼워 넣을 수 있다. 이렇게 되면 추가된 기능을 자식 클래스에서 구현하지 않을 수도 있고, 또 더는 순수 추상 클래스가 아니게 된다. 그러나 인터페이스는 모든 메서드가 추상메서드이기 때문에 이런 문제를 원천 차단할 수 있다.
  • 다중 구현 : 자바에서 클래스 상속은 부모를 하나만 지정할 수 있따. 반면에 인터페이스는 부모를 여러명 두는 다중 구현이 가능하다.

또한 인터페이스를 보면 의도를 파악할 수 있기 때문이다.

좋은 프로그램은 제약이 있는 프로그램이다!!

객체 생성과 인터페이스

객체를 생성하면 객체의 필드 데이터와 메타데이터라는 부분이 생성된다.
메타데이터 안에는 객체가 어떤 클래스의 인스턴스인지에 대한 정보를 포함한다. 이 정보를 사용해서 인스턴스는 내가 어떤 클래스의 객체이고, 또 상위 인터페이스는 어떤 것이 있는지를 인지하는 것이다.

인터페이스 자체가 메모리 상에 실제로 인스턴스화 되는 것이 아니다. 대신, 인터페이스를 구현하는 구체 클래스의 인스턴스가 생성될 때 해당 클래스의 타입으로 메모리에 할당된다.

추상메서드를 호출하는 순간 자바는 실제 오버라이딩 된 구현 메서드를 찾아서 호출하게 된다.

profile
오늘의 노력이 내일의 성장으로 이어지고 있음을

0개의 댓글