JAVA-인터페이스

춤추는개발자·2022년 9월 27일
0

Java 정리

목록 보기
40/59

인터페이스?

  • 자바는 메소드 출처의 모호성 때문에 클래스를 통한 다중 상속을 허용하지 않습니다.
  • 동일한 목적 하에 동일한 기능을 수행하도록 강제하는 것이 인터페이스 역할 입니다.
  • 인터페이스는 다중 상속을 지원 합니다.
  • 추상 클래스에는 추상 메소드,생성자,일반 메소드,필드,를 포함 하는데 인터페이스는 추상 메소드와 상수만을 포함 할 수 있습니다. JAVA8 부터는 디폴트 메소드,정적 메소드도 포함 가능 해졌습니다.

인터페이스 문법

접근제어자 interface 인터페이스이름 {

타입 상수명 =; // 상수 

타입 메소드명(); // 추상 메소드 

default 타입 메소드명(매개변수...){ // 디폴트 메소드
구현 코드 }

static 타입 메소드명(매개변수...){ /// 정적 메소드 
구현 코드 }

인터페이스 선언 방법은 클래스 선언과 같습니다. 접근제어자와 함께 interface 키워드를 사용하여 선언 해주면 됩니다.
인터페이스의 모든 필드는 타입 앞에 public static final 이어야 하고, 모든 추상 소드는 타입 앞에 public abstract가 붙어야 합니다.
하지만 인터페이스에 공통적으로 들어가야 하는것이기 때문에 생략을 해도 됩니다. 만약 적지 않았다면 컴파일시에 컴파일러가 자동으로 추가해 컴파일 할 것 입니다.

인터페이스 구현

인터페이스는 추상 클래스와 같이 직접 인스턴스를 생성할 수는 없습니다.
따라서 인터페이스가 포함되어 있는 추상 메소드를 구현해줄 클래스를 작성해야만 합니다.
자바에서 인터페이스는 클래스를 통해 구현하는 법

class 클래스이름 implements 인터페이스이름{
    }

만약 구현할 때 모든 추상 메소드를 구현하지 않는다면 abstract 를 사용하여 추상 클래스로 만들어 줘야 합니다.

class 클래스이름 extends 상위클래스이름 implements 인터페이스이름{
   }

자바에서는 위와 같이 상속과 구현을 동시에 할 수도 있습니다.

디폴트 메소드는 왜 있는 것일까?

프로그램이 완성되어 서비스중에 새로운 기능을 추가해야 되는 상황이 생기게 됬다고 가정해보자. 하지만 이 기능은 회사마다 상황에 따라 만들어야 할수도,또 당장 만들지 등에 의해서 회사마다 달라질 수 있다. 근데 이 기능을 인터페이스에 추상 메소드로 추가하면 클래스에 인터페이스 추상 메소드를 구현한 모든 회사들은 강제적으로 추상 메소드를 구현 해야하고 그렇지 못한다면 컴파일 에러가 나서 서비스가 그 회사의 프로그램이 멈추게 되어 버리는 상황이 발생하기 때문에 이런 추가적이고 선택적인 기능들을 위해 디폴트 메소드가 필요하다.

인터페이스의 장점

  1. 대규모 프로젝트에서 일관되고 정형화된 개발을 위한 표준화가 가능합니다.
  2. 클래스의 작성과 인터페이스 구현을 동시에 할 수 있어 개발 시간을 단축 할 수 있습니다.
  3. 클래스와 클래스간의 관계를 인터페이스로 연결하면, 동일한 동작을 구현 할 수 있다.

추가

일반적으로 인터페이스나 추상 클래스는 객체를 생성 할 수 없다. 그 이유는 메소드의 구현체가 존재하지 않기 때문이다. 하지만 익명 객체로 객체를 생성할 수 있다. 이것은 나중에 알아보도록 하자.

0개의 댓글