인터페이스

  • 인터페이스 : 개발 코드와 객체가 서로 통신하는 접점 역할
  • 개발 코드가 인터페이스의 메소드를 호출 → 인터페이스는 객체의 메소드를 호출
  • 인터페이스를 통해 개발 코드를 수정하지 않아도 사용하는 객체를 변경하는 방법을 통해 실행 내용과 리턴값을 다양화 할 수 있다.

 

https://velog.io/@jaeseok-go/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4

 

인터페이스 선언

  • 인터페이스의 물리적 형태는 클래스와 동일하다. 그러나 소스를 작성할 때 선언하는 방법에 클래스와 차이가 있다.
  • 인터페이스 이름은 클래스 이름을 작성하는 방법과 동일하다. ( 첫 글자를 대문자로 나머지는 소문자로)
  • 인터페이스는 class 키워드 자리에 interface 키워드를 사용한다.

  • 인터페이스는 상수 필드와 추상 메소드만을 구성 멤버로 갖는다.
  • 인터페이스는 객체로 생성할 수 없기 때문에 생성자를 가질 수 없다.

 

 

https://link2me.tistory.com/1742

 

상수 필드 선언 

  • 인터페이스는 데이터를 저장할 수 없기 때문에 상수 필드만 선언할 수 있다.
  • 상수 필드는 기본적으로 public static final 특성을 갖는다.
  • 관례적으로 필드 이름은 모두 대문자로 작성해야 하며, 선언 시 초기값을 대입해야 한다.

추상 메소드 선언

  • 인터페이스로 호출된 메소드는 객체에서 실행되므로 추상 메소드로 선언한다.
  • public abstract가 생략되고 메소드 선언부만 있는 추상 메소드 형태이다.
  • 구현 클래스는 반드시 추상 메소드를 재정의해야 한다.

 

 

인터페이스 구현

  • 인터페이스에서 객체의 메소드를 호출할 때, 객체는 인터페이스에 정의된 추상 메소드와 동일한 메소드 이름, 매개 타입, 리턴 타입을 가진 실체 메소드를 가지고 있어야 한다.
  • 이런 객체를 인터페이스의 구현(implement)객체라고 하고, 구현 객체를 생성하는 클래스를 구현 클래스라고 한다.

 

① 구현 클래스

  • 보통의 클래스와 동일한데, 클래스 선언부에 implements 키워드를 추가하고 인터페이스 이름을 명시한다.
  • 그리고 인터페이스에 선언된 추상 메소드의 실체 메소드를 선언해야 한다.
  • 주의점 : 인터페이스의 모든 메소드는 기본적으로 public 접근 제한을 갖기 때문에, public보다 낮은 접근 제한으로 작성할 수 없다.
  • 인터페이스로 구현 객체를 사용하려면 다음과 같이 변수를 선언하고 구현 객체를 대입해야 한다.

 

② 다중 인터페이스 구현 클래스

 

https://velog.io/@00yubin00/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4Interface

 

  • 객체는 그림과 같이 다수의 인터페이스 타입으로 사용할 수 있다.
  • 구현 클래스는 모든 인터페이스의 추상 메소드에 대해 셀체 메소드를 작성해야 한다. 

 

인터페이스 사용

  • 클래스를 선언할 때 인터페이스는 필드, 생성자 또는 메소드의 매개 변수, 생성자 또는 메소드의 로컬 변수로 선언될 수 있다.
  • 인터페이스가 필드 타입으로 사용될 경우 : 필드에 구현 객체를 대입할 수 있다.
  • 인터페이스가 생성자의 매개 변수 타입으로 사용될 경우 : new 연산자로 객체를 생성할 때 구현 객체를 생성자의 매개값으로 대입할 수 있다.
  • 인터페이스가 로컬 변수 타입으로 사용될 경우 : 변수에 구현 객체를 대입할 수 있다.
  • 인터페이스가 메소드의 매개 변수 타입으로 사용될 경우 : 메소드 호출 시 구현 객체를 매개값으로 대입할 수 있다.
  • 대입이 된 후에는 재정의된 구현 객체의 메소드를 호출할 수 있다.

'Coding > Java' 카테고리의 다른 글

[25] JAVA 중첩 클래스/ 중첩 인터페이스  (0) 2022.12.09
[24] JAVA 타입 변환과 다형성  (0) 2022.12.06
[22] JAVA 추상클래스  (0) 2022.12.03
[21] JAVA 타입변환과 다형성  (1) 2022.12.02
[20] JAVA 상속  (0) 2022.11.30

+ Recent posts