[Java] 자바 인터페이스(Interface)란?

2022. 7. 5. 00:18·Java/자바 이론

자바는 단일 상속이 원칙이다.

하지만 다중 상속을 지원하기 위해서 인터페이스가 존재한다. 

인터페이스는 오로지 상수(final) 와 추상 메서드만 갖을 수 있다.

(추상 클래스보다 더 추상화 정도가 높다.)


인터페이스 특징

 

1. 인터페이스의 구조

interface 인터페이스명{
	public static final int a = 3; // 필드는 상수
	public abstract void disp();   // 추상 메서드만 존재
}

 

상수와 추상 메서드 만으로 구성이 되어있다. 생략하면, 컴파일러가 자동으로 삽입해준다. 

모든 필드 : public static final       (*필드는 선언과 동시에 초기화 되어야 한다.)

모든 메서드 : public abstract      (상속받는 자식은 오버라이딩이 강제된다.)

 

 

2. 다중상속을 지원한다.

자식 클래스는 여러 개의 인터페이스를 상속 받을 수 있다.

class MyPet implements Cat, Dog { //implements interface1, interface2

 

 

3. 생성자 생성 불가능

디폴트 생성자와 매개변수 생성자 모두 생성이 불가능하다.


인터페이스의 상속과 구현

 

추상 클래스와 마찬가지로 인터페이스에서는 객체를 생성할 수 없다.

자식 클래스를 만들고, 오버라이딩하여 구현한다.

(추상 클래스와 마찬가지로 익명 이너 클래스로도 구현이 가능하다.)

* 인터페이스명.super.메서드명()  을 통해서 기본 메서드에 접근이 가능하다. 

interface A{
	final static int a=0; //상수 필드
	
	public abstract void disp(); //추상 메소드
}

interface B{
	final static int a=0;  
	
	public abstract void disp1();
}

interface C extends A, B { // 다중상속 가능
	final static int a = 0; 

	public abstract void disp2(); 
}

 


디폴트 메서드 & 정적 메서드

 

원래 인터페이스는 상수와 추상 메서드만 존재할 수 있다고 했다.

하지만 자바8 버전부터 디폴트 메서드와 정적 메서드를 사용할 수 있도록 되었다.

인터페이스에서 디폴트 메서드를 허용하는 이유는 '하위 호완성' 때문이다. 기존 인터페이스를 확장해서 새로운 기능을 추가하기 위해서 추상 메서드를 하나 더 정의하면 기존에 인터페이스를 사용하고 있던 모든 코드를 수정해야 하기 때문에 불편하다.

디폴트 메서드는 추상 메서드가 구현 클래스에서 실체 메서드로 구현되어야 한다는 제약을 없애준 편의 메서드로 볼 수 있다.

 


인터페이스의 장점

 

인터페이스를 사용하면 다중 상속이 가능할 뿐만 아니라 다음과 같은 장점을 가질 수 있습니다.

 

1. 인터페이스는 메서드의 틀을 미리 만들어 개발자 간의 의사소통 혼선을 줄일 수 있다.

2. 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능하다.

3. 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있다.

4. 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능하다.

 


참고 문헌 : Do it! 자바 완전정복

 

http://www.tcpschool.com/java/java_polymorphism_interface

 

'Java > 자바 이론' 카테고리의 다른 글

[Java] 자바 쓰레드(Thread) & 동기화  (0) 2022.07.06
[Java] 자바 내부 클래스 4종류 (Inner Class)  (0) 2022.07.05
[Java] 추상 클래스와 추상 메서드 (abstract)  (0) 2022.07.04
[Java] 메서드 오버로딩과 오버라이딩  (1) 2022.06.30
[Java] 자바 super 키워드 & super() 메서드  (0) 2022.06.30
'Java/자바 이론' 카테고리의 다른 글
  • [Java] 자바 쓰레드(Thread) & 동기화
  • [Java] 자바 내부 클래스 4종류 (Inner Class)
  • [Java] 추상 클래스와 추상 메서드 (abstract)
  • [Java] 메서드 오버로딩과 오버라이딩
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Front-End (39)
        • Next (5)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    React Native Chart
    next-intl
    오블완
    쓰레드
    리액트 네이티브
    Express
    티스토리챌린지
    REST API
    react
    node.js
    Spring
    포스트맨
    JDBC
    상속
    서블릿
    스택
    자바 스프링
    오라클
    자바
    IS-A
    JSP
    Python
    DI
    react-native-chart-kit
    그리디
    큐
    Java
    자바스크립트
    React Native
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[Java] 자바 인터페이스(Interface)란?
상단으로

티스토리툴바