[TIL] java 인터페이스

빼곰·2022년 12월 13일
0

문제

  • 자바 문법중 인터페이스에 대한 개념과 사용방법에 대해 알아보기

Interface란?

  • 사전적 의미
    : 결합부,접속기 --> 사용자간 통신이 가능하도록 해주는 디바이스나 프로그램.

큰틀에서 본다면 자바에서의 인터페이스 개념도 사전적 의미와 비슷하다. 사용자간 컴퓨터과 통신을 할때 표준과 규격이 매우 중요하다고 할 수 있는데 만약 어떤 회사에서 가전 제품을 만들어 판매한다고 하자. 그 기업은 외국기업이고 우리나라에 제품을 판매하려고 한다. 그때 우리나라에 맞는 표준과 규격이 있을 수 있다. 그것들에 맞게 만들지 않으면 판매 할 수 없다. 우리나라에 판매하려면 우리나라 판매 규격과 표준을 지켜야 한다.( ex. 일본의 110v가전제품 -> 우리나라의 220v가전제품)

"이러한 규격을 인터페이스라고 할 수 있고, 인터페이스는 하나의 표준화를 제공하는 것이라 할 수 있다."

추상 클래스 VS 인터페이스

  1. 인터페이스는 추상 클래스와 거의 비슷하지만 추상화 정도가 더 높다(더 엄격하다). 따라서, 일반 메서드, 멤버 필드(변수)를 가질 수 없다. --> 가장 큰 차이점

  2. implement
    표준화 및 규격을 인터페이스로 제공하다는 것은 어떤 클래스가 해당 인터페이스를 사용(상속)한다면 인터페이스에 선언되어져 있는 메서드를 구현해야 한다.

    사전적 의미처럼 인터페이스는 시행,구현의 뜻을 가지는 implements를 extends대신 사용하는데
    추상 클래스와 같이 매서드의 구체적인 내용은 기술되어져 있지 않으므로 인터페이스를 상속받은 클래스에서 재정의(오버라이딩)하여 사용해야한다.

  1. 상속 vs 구현
    클래스와 인터페이스 이 둘의 가장 큰 차이점중 하나는 '상속'이다.
    자바 클래스는 단일 상속만 가능하지만, 인터페이스는 다중 상속이 가능하다. A,B-->(,)콤마로 구분한다. 그러나 인터페이스에서 상속이라는 표현을 쓰지 않고 구현의 의미를 강조하는 implements 키워드를 사용하여 다중 상속을 구현한다.

장점

  • 인터페이스를 이용하면 메서드의 추상적인 "선언"과 그 메서드들을 구체적인 "구현" 부분으로 분리시킬 수 있다.--> 매우 큰 장점
    ex) 하청을 주는 대기업(갑)은 하청업체(을)에 인터페이스만 제공 --> 각 하청업체(을)들이 이를 준수하여(=상속 받아)개발.
  • 분업화된 시스템을 구축하여 갑과 을이 독립적으로 프로젝트 개발으 해나갈 수 있다. -->매우 큰 장점

우선순위(extends vs implements)

extends와 implements는 동시에 쓸 수 있다. 이때 항상 extends키워드를 먼저 오도록 쓴다.
예시) class Student extends Person implements A,B

  • 코드 구현을 통해 인터페이스 알아보기
    Person 클래스(부모) / A인터페이스(부모) / B인터페이스(부모) / Student클래스(자식) /
    메인 클래스(메인 메서드가 포함)
  1. 클래스와 인터페이스 생성

  2. 인터페이스 추상 메서드 구현

  3. 자식 클래스 구현(추상 메서드 재정의)

  4. 객체 생성 및 메서드 호출

<출력문>
씻다.
공부하다.
놀다.
엄마에게서 10000원 용돈을 받았습니다.
5000원 금액을 지출했습니다.
[지출용도는 --> 편의점]
[아빠-->50000원 입금완료]

인터페이스에서 변수 대신 상수 지정

추상 클래스와 달리 인터페이스에서는 변수(멤버 필드),일반메서드를 가질 수 없다. 대신
변수를 상수로 지정해주면 된다.--> public static final을 붙여주면 됨.

인터페이스내 모든 멤버 필드(변수)는 public static final이여야 함 --> 생략이 가능.
생략해도 컴파일러가 public static final를 붙인다. 그래서 붙이지 않아도 에러가 나지 않지만 항상 상수인 것이다!

  • 상수 필드 사용하기(출력)
System.out.println(s1.aaa);
System.out.println(s1.bbb);

객체를 통해 호출 할 수도 있고

System.out.println(Allowance.aaa);
System.out.println(Allowance.bbb);

static final이니까 객체를 생성하지 않아도 Allowance에 접급하여 호출 할 수도 있다.

인터페이스 메서드

인터페이스내 모든 메서드는 public abstract 이어야 함 --> 동일하게 생략 가능!
얼핏 보면 일반 메서드 같지만 추상 메서드로 자동 컴파일 된다. 그래서 구체적인 내용이 들어 있으면 안된다. 메서드명만 선언되어 있어야 한다.

profile
개발 블로그

0개의 댓글