[Java] 인터페이스(Interface)

🌈 m1naworld ·2022년 6월 29일
0

자바를 잡아! 👻

목록 보기
8/19
post-thumbnail

인터페이스란,

극단적으로 동일한 목적 하에 동일한 기능을 보장하게 하기 위함. (쉽게 규격과 비슷한 개념❗️)

어떻게?

자바의 다향성을 이용하여 개발 코드 수정을 줄이고 유지보수성을 높힘.


인터페이스는 JAVA8 이전까지는 오로지 상수(Public static final), 추상메소드(public abstract)만 선언이 가능 했지만, JAVA8부터 디폴드메소드, 정적메소드가 추가되여 구현 강제성 안에 유연함을 더함.

인터페이스 선언

클래스와 달리 인터페이스의 모든 필드는 'pubic static final' 및 제어자는 'public'으로 모든 인터페이스에 공통으로 적용되는 부분이므로 생략이 가능함. 이렇게 생략된 제어자는 컴파일 시 자바 컴파일러가 자동으로 추가해 줌.

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

	(public static final) 타입 상수명 =;
    
    (public) abstract 타입 메소드명(매개변수목록);
    
    (public) default 타입 메소드명(매개변수목록){
    // 구현부
    }
    
    (public) static 타입 메소드명(매개변수){
    // 구현부 
    }
    
}
  • 상수: 인터페이스에서 값을 정해줄테니 함부로 바꾸지 말고 제공해주는 값만 참조 가능 (절대적)
  • 추상메소드: 가이드만 줄테니 추상메소드를 오버라이딩해서 재구현해라 (강제적)
  • 디폴드메소드: 인터페이스에서 기본적으로 제공해주지만, 맘에 안들면 각자 구현해서 써라 (선택적)
  • 정적메소드: 인터페이스에서 제공해주는 것으로 무조건 사용, 오버라이딩x (절대적)

+) 추상클래스와 비교

추상 클래스: 없거나 하나 이상의 추상 메소드를 가지고 있는 클래스
추상 메소드: 아직 구현되어 있지 않은 abstract로 정의된 메소드

추상클래스와 인터페이스는 상속받는 클래스 혹은 구현하는 인터페이스 안에 있는 추상 메소드를 구현하도록 강제함.

추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함 될 수 있으나 인터페이스는 상수, 추상메소드, 디폴드메소드, 정적메소드만을 추가할 수 있음.

❗️ 존재 목적이 다름
추상 클래스를 상속 받은 클래스는 슈퍼 클래스의 기능을 이용하거나 확장하기 위해서 사용되고, 다중 상속의 모호성 때문에 하나만 상속 가능함.
인터페이스는 해당 인터페이스의 구현을 강제함으로써 구현 객체의 같은 동작을 보장하기 위함.




자바에서는 클래스를 통한 다중 상속을 지원하지 않으나 인터페이스를 통해 다중 상속을 한 것처럼 사용 가능. 상속 관계의 경우와는 다르게 인터페이스의 객체는 생성되지 않으나 인터페이스명을 자료형으로 하여 구현체의 객체를 참조할 수 있음. 이를 통해 다향성을 구현함.

인터페이스 구현

인터페이스는 추상 클래스와 마찬가지로 자신이 직접 인스턴스를 생성할 수는 없음.
따라서 인터페이스가 포함하고 있는 추상 메소드를 구현해 줄 클래스를 작성해야 함.

class 클래스명 implements 인터페이스명{

}

자바에서는 다음과 같이 상속과 인터페이스 구현을 동시에 할 수 있음.

class 클래스명 extend 상위클래스명 implements 인터페이스명{

}

*인터페이스는 인터페이스로부터만 상속 받을 수 있으며, 여러 인터페이스를 상속받을 수 있음.

+) 클래스를 이용하여 다중 상속을 하면 메소드 출처의 모호성 등의 문제가 발생할 수 있음.


❗️❗️인터페이스 장점

  1. 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능
  2. 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있음
  3. 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능

Ref.
Limky 삽질블로그, TCPSCHOOL.COM

profile
개발자로 사는 내 삶은 즐거워 👾

0개의 댓글