[Java] 인터페이스에 대해 알아보자!

코아·2024년 7월 7일

인터페이스란?

객체지향프로그래밍의 중요한 특성 중 하나인데,
구현체 클래스들이 필수로 구현해야 하는 추상 자료형이다. 즉, 객체의 사용 방법을 가이드라인한 것이라고 할 수 있다.

상수와 추상 메소드로만 이루어져 있고, 구현된 코드가 없기 때문에 인터페이스로 인스턴스도 사용할 수 없다.

인터페이스에서는 어떤 메소드들이 있어야 하는지 선언만 하고, 실제 메소드의 구현은 구현 클래스에서 이루어진다.

인터페이스의 특징

  • 다중 상속 가능 : 인터페이스는 구현된 메소드가 없이 껍데기만 존재하여, 클래스 상속 시 발생했던 모호함이 없다.

  • 추상 메소드와 상수만 사용 가능 : 인터페이스에서는 구현 소스를 만들 수 없다.

  • 생성자 사용 불가 : 인터페이스 객체가 아니므로 생성자를 사용할 수 없다.

  • 메소드 오버라이딩 필수 : 구현체는 인터페이스의 추상 메소드를 모두 오버라이딩해야 한다.

사용법

interface 인터페이스이름 {
	
    타입 상수명 = 값; //상수
    
    타입 메소드명(); //추상메소드
}

사용 예시이다.

interface RemoteControl {
	
    //상수
    int MAX_VOLUME = 10;
    int MIN_VOLUME = 0;
    
    //추상메소드
    void turnOn();
    void turnOff();
}

여기서 상수 필드는 public static final이 생략되어있다.

지금까지 인터페이스의 개념과 사용법에 대해 알아보았다. 그렇다면 인터페이스는 왜 사용하는 걸까?

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

(= 개발 코드가 직접 객체의 메소드를 호출하면 되는데, 중간에 왜 인터페이스를 둘까?)

코드를 수정하지 않고 사용하는 구현 객체를 손쉽고 빠르게 변경할 수 있기 때문이다.

  • 코드의 큰 변경없이 구현 객체를 교체하면서 프로그램의 실행 결과와 리턴값이 다양해지는 다형성을 가진 프로그래밍이 가능하다.
  • 한 메소드를 수정하였을 때, 다른 메소드도 수정해야 하는 결합도를 낮춘, 변경에 유리한 유연한 개발이 가능
  • 표준화가 가능하다. 클래스의 기본틀을 제공하여 개발자들이 일관되고 정형화된 개발을 할 수 있다. 문서화의 역할도 가능하다.
  • 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있어 개발 시간이 단축된다.

클래스는 다중 상속이 안되는데, 인터페이스는 왜 가능할까?

클래스는 이미 구현된 메소드가 있을 수 있기 때문에 다중 상속이 불가능하지만,
인터페이스는 선언만 할 뿐 구현된 메소드가 없기 때문에 오버라이딩해서 쓰면 돼서 메소드를 얼마든 상속 받아도 아무런 문제가 발생하지 않는다.

profile
https://ldyble.tistory.com/ 에서 블로그 이전하였습니다.

0개의 댓글