loading
본문 바로가기
Language/Java

[ Java ] 10. 인터페이스 ( interface )

by NeuLyeo 2023. 11. 9.

[ Java ] 10. 인터페이스 ( interface )


 

 

📚 Table of Contents

     

     

     

     

     

    01. 인터페이스

     

    인터페이스도 추상 클래스와 비슷하게 다른 클래스를 작성하는데 도움을 주는 목적으로 작성한다.

     

    다만 인터페이스는 추상 클래스보다 추상화 정도가 높아

    추상 클래스와 다르게 구현부가 있는 일반 메서드, 일반 변수 멤버 등을 가질 수 없다.

     

    즉, 인터페이스는 구현된 게 아무것도 없는 기본 설계도라고 할 수 있다.

     

    인터페이스 또한 인스턴스를 생성할 수 없다.

     

    // 인터페이스 선언
    접근제어자 interface 인터페이스이름 {
    
        public static final 타입 상수이름 = 값;
    
        ...
    
        public abstract 메소드이름(매개변수목록);
    
        ...
    
    }
    
    // 인터페이스 구현
    class 클래스이름 implements 인터페이스이름 { ... }

     

     

    모든 멤버 변수는 public static final, 즉 상수이다.


    public static final은 자동으로 컴파일 시 생성되므로 생략가능 하다.

     

    모든 메서드는 public abstract, 즉 추상 메서드이다.


    마찬가지로 public abstract는 생략 가능하다.

     

    다만, Java 8에서부터는 다음과 같이 디폴트 메서드와 정적 메서드를 사용할 수 있다.

     

     

    디폴트 메서드 :

    public interface Default{     
            // 디폴트 메소드 : 실행 내용까지 작성 가능
            public default void 메서드(){
    
                ... // 구현 내용
    
            }
    }

     

     

    정적 메서드 :

    public interface Static{   
            // 정적 메소드
            public static void 메서드(){
                ... // Static.메서드() 와 같이 호출 가능
            }
     }




     

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

     

      추상클래스 인터페이스
    다중상속 불가능 가능
    추상 메서드 0개 이상 전부
    일반 메서드 가능 불가능. 다만 Java8부터는 디폴트, 정적 메서드 구현 가능
    필드 일반 변수, 상수 모두 가능 상수(static final)만 가능
    상속 키워드 extends implements
    접근 제어자 제한 없음 public
    공통점 1. 인스턴스를 생성할 수 없다.
    2. 상속받은 클래스는 반드시 추상 메서드를 구현해야 한다.

     

     

     




    추상클래스

    • 사람 is kind of 포유류
    • 포유류 is kind of 생물체
    • 조류 is kind of 생물체

     

     

    명확한 계층 구조 추상화

    추상 클래스는 이를 상속받을 각 객체들의 공통점을 찾아 추상화시켜 놓은 것으로,

    상속 관계를 타고 올라갔을 때 같은 부모 클래스를 상속하며 부모 클래스가 가진 기능들을 구현해야 할 경우 사용한다.

     

     

    중복 멤버 통합

    추상 클래스를 이용하면 중복 멤버 변수의 통합이 가능하다.

     

    인터페이스는 일반 멤버 변수를 선언하지 못하고 상수만 선언할 수 있기 때문에

    이러한 중복 멤버 변수의 통합이 불가능하다.

     

    static final 상수를 선언한다면 각 클래스에서 값의 변경이 불가능할 것이다.



    인터페이스

    • 박쥐 is able to 날기
    • 독수리 is able to 날기
    • 사람 is able to 수영
    • 펭귄 is able to 수영

     

     

    자유로운 관계 묶음

    인터페이스는 상속 관계를 타고 올라갔을 때 다른 조상 클래스를 상속하더라도, 같은 기능이 필요할 경우 사용한다.

     

    클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용한다.

     

     

    다중 상속이 필요한 경우