티스토리 뷰

개발/Java

[Java] 인터페이스

Ikhyeon IT 2023. 6. 15. 16:41

목표

자바의 인터페이스에 대해 학습하세요.

학습할 것 (필수)

  • 인터페이스 정의하는 방법
  • 인터페이스 구현하는 방법
  • 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
  • 인터페이스 상속
  • 인터페이스의 기본 메소드 (Default Method), 자바 8
  • 인터페이스의 static 메소드, 자바 8
  • (optional) 인터페이스의 private 메소드, 자바 9

인터페이스와 추상 클래스를 사용하는 이유

  • 설계시 인터페이스와 추상클래스를  미리 선언해두면 개발시 기능 구현에만 집중할 수 있다. 즉 개발자는 비즈니스 로직에만 집중할 수 있게 된다.
  • 공통의 인터페이스와 추상 클래스를 선언해두면, 선언과 구현을 구분할 수 있다.

인터페이스 정의하는 방법

public interface move {
	
    // public static final 생략 가능
    public static final int speed = 5;  
	
    // public abstract 생략 가능
    public abstract void move();
}
  • public static final, public abstract 는 생략이 가능하다.
  • 편의상 생략하는 경우가 많고, 이는 컴파일 시점에 자동으로 추가해준다.

추상클래스와 인터페이스의 차이점

  • 추상클래스의 extends -> 클래스를 확장한다는 의미 
  • 인터페이스의 implements -> 인터페이스를 구현한다는 의미

인터페이스의 상속

인터페이스는 추상클래스와 다르게 다중 상속이 가능하다.

하지만 아래와 같이 메서드명은 같으나 리턴타입이 다르다면 컴파일 오류가 발생한다.

public class person implements move, move2 {
    @Override
    public int move() {  // 컴파일 오류 발생 
    }
}

public interface move {
    void move();
}

public interface move2 {
    int move();
}

 

그럼 왜 Java에서는 Interface만 다중상속이 가능할까?

하나의 부모클래스(Person)를 구현한 Human1과 Human2가 있다고 생각해보자

Human1과 Human2는 부모인 Person의 메서드를 상속받아 사용할 수 있다.

하지만 2개의 부모클래스 Person1, Person2를 다중 상속 받는다고 하였을 때,

Human1은 Person1과 Person2의 메서드를 사용할 때 동일한 이름의 메서드가 있다면

어떤것을 사용해야할지 컴파일러는 구분할 수 없다. 그렇기 때문에 클래스에서 다중상속을 지원하지 않는다.

하지만 Interface같은 경우에는 메서드를 구현하지 않고 재정의해서 사용하기 때문에 

다중상속으로 메서드명이 겹치더라도 두개 다 빈 껍데기의 메서드이기 때문에 문제가 되지 않는다.

그렇기 때문에 Interface는 다중상속을 지원한다.


인터페이스의 기본 메서드 (Default Method) , Static 메서드

원래는 인터페이스에 추상 메서드만 선언할 수 있었는데, JDK 1.8부터 디폴트와 static 메서드를 지원한다.

 

기본 메서드는 이미 구현한 인터페이스를 수정할 일이 생겼을때

기존에는 인터페이스의 새로운 메서드를 추가하면

이 인터페이스를 구현한 클래스에서 모두 구현을 해주어야 했다. -> 하지 않으면 컴파일에러 발생

이를 해결하고자 기본 메서드가 생겼다.

 

인스턴스 메서드는 인스턴스 없이 수행할 수 있는 작업을 정의할 수 있는 것이라 볼 수 있다.

 

 기본 메서드 충돌 규칙

  1. 여러 인터베이스의 기본 메서드 간의 충돌  - 인터페이스를 구현한 클래스에서 기본 메서드를 오버라이딩 해야 한다.
  2. 기본 메서드와 조상 클래스의 메서드 간의 충돌- 조상 클래스의 매서드가 상속되고, 기본 메서드는 무시된다.

 

 


참고

자바의정석

 

자바의 정석 기초편 - YES24

교육현장에서 뒤쳐지는 학생들을 위해 쓰고, 학생들에게 직접 검증받고 호평받은 책. 코딩을 처음 배우는 사람도 자바를 쉽게 배울수 있게 도와준다.

www.yes24.com

https://junior-datalist.tistory.com/213

 

[Java] 자바의 다중상속 (feat. 인터페이스와 추상클래스)

알고 시작해야 할 내용 1. 자바에서 클래스의 다중 상속은 불가능하다. 2. 하지만 인터페이스의 다중 상속은 가능하다. why? 인터페이스와 추상클래스를 공부하던 중, 자바의 다중상속 이란 개념

junior-datalist.tistory.com

https://devlog-wjdrbs96.tistory.com/39

 

[JAVA] 다중 상속(multiple inheritance) 이란?

예전에 자바 공부를 할 때는 다중상속 이라는게 잘 이해가 되지 않아 살짝 두려운 내용이었지만, 지금 자바 공부를 다시 하고 있을 때는 이해가 되어서 글로 정리를 해보려 한다. ( 예전엔 이게

devlog-wjdrbs96.tistory.com

 

'개발 > Java' 카테고리의 다른 글

[Java] 예외 처리  (0) 2023.06.20
[Java] 패키지  (0) 2023.06.14
[Java] 상속  (0) 2023.06.08
[Java] 클래스  (0) 2023.06.07
[Java] 제어문  (0) 2023.06.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함