인터페이스

김민혁·2022년 1월 24일
0

정의

  • 서로 다른 두 시스템, 장치, 소프트웨어 따위를 서로 이어 주는 부분, 또는 그런 접속 장치

종류

  • GUI - Graphic User Interface
    • 프로그램과 사용자 사이의 접점
    • ex. 사용자는 호출, 리턴, 메서드드 선언부만 가지고 프로그램은 구현부를 가지고 있다.
  • JDBC 인터페이스
    • db vendor들이 인터페이스를 보고 dirver를 각각 만듬

작성

  • 최고 수준의 추상화 단계
    • 모든 메서드가 abstract 형태
    • JDK 8에서는 default method와 static method 추가
  • 형태
    • 클래스와 유사하게 interface 선언
    • 멤버 구성
      • 모든 멤버 변수는 public static final 이며 생략 가능
      • final이기 때문에 인스턴스 변수가 올수 없고 초기화를 해야한다.
      • 모든 메서드는 public abstract 이며 생략가능

인터페이스 상속

  • 클래스와 마찬가지로 인터페이스도 extends를 이용해 상속이 가능
  • 클래스와 다른 점은 인터페이스는 다중 상속이 가능
    • 헷갈릴 메서드 구현 자체가 없다.(구현부가 없기 때문에 다중 상속이 가능)
  • 인터페이스 또한 추상 클래스 처럼 참조 변수로는 사용할 수 있다.

구현과 객체 참조

  • 클래스에서 implements 키워드를 사용해서 interface 구현
  • implements한 클래스는
    • 모든 abstract 메서드를 override해서 구현하거나
    • 구현하지 않을 경우 abstract 클래스로 표시해야함
  • 여러개의 interface implements 가능

필요성

  • 구현의 강제로 표준화 처리
    • abstract 메서드 사용
  • 인터페이스를 통한 간접적인 클래스 사용으로 손쉬운 모듈 교체 지원
  • 서로 상속의 관계가 없는 클래스들에게 인터페이스를 통한 관계 부여로 다형성 확장
  • 모듈 간 독립적 프로그래밍 가능 -> 개발 기간 단축
  • interface 상속은 UML에서 점선 화살표로 표시

default method

  • 인터페이스에 선언된 구현부가 있는 일반 메서드
    • 메서드 선언부에 default modifier 추가 후 메서드 구현부 작성

      • 접근 제한자는 public으로 한정됨(생략 가능)
      interface DefaultMethodInterface{
      	void abstractMethod();
      
        default void defaultMethod() {
            System.out.println("이것은 기본 메서드입니다");
        } 
      			}
  • 필요성
    • 기존에 interface 기반으로 동작하는 라이브러리의 interface에 추가해야 하는 기능이 발생
    • 기본 방식으로라면 모든 구현체들이 추가되는 메서드를 override해야 함
    • default 메서드는 abstract가 아니므로 반드시 구현해야 할 필요는 없어짐
  • default method의 충돌
    • jdk 1.7이하의 java에서는 interface method에구현부가 ㅇ벗으므로 충돌이 없었음
    • 1.8부터 default method가 생기면서 동일한 이름을 갖는 구현부가 있는 메서드가 충돌
    • method 우선 순위
      • super class의 method 우선: super class가 구체적인 메서드를 갖는 경우 default method는 무시됨
      • interface간의 충돌: 하나의 interface에서 default method를 제공하고 다른 interface에서도 같은 이름의 메서드(default 유무와 무관)가 있을 때 sub class는 반드시 override해서 충돌 해결!!

static method

  • interface에 선언된 static method
    • 일반 static 메서드와 마찬가지로 별도의 객체가 필요 없음
    • 구현체 클래스 없이 바로 인터페이스 이름으로 메서드에 접근해서 사용 가능
profile
학생

0개의 댓글