Joslynn의 하루

대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -12일차 노트 필기_interface (인터페이스)_220802 본문

MSA Full-Stack 개발자 양성과정/Java

대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -12일차 노트 필기_interface (인터페이스)_220802

Joslynn 2022. 8. 2. 16:21

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

interface

: class와 유사하지만 class가 아님; // 생성과 상속이 불가

  **주의사항: 인터페이스끼리는 상속 및 다중 상속도 가능

  ex) interface A {  }

: is A의 관계 성립

: interface를 구현(implement)하여 다중상속 같은 효과 얻음;

: interface의 모든 변수는 public static final(상수)이다.

  상수 선언하지 않아도 모든 변수는 자동으로 상수;

: interface의 모든 method는 public abstract이다 // (기능X), 오버라이딩해서 기능 구현할 목적으로 사용;

  abstract 선언 필요 없이 자동으로 추상 method

:  단점 == 불필요한 메소드까지도 모두 overriding해야 함; // 소스가 길어질 수 있음


interface VS abstract class

: 추상클래스는 클래스이므로 1개만 상속 가능하지만 interface는 여러 개를 구현할 수 있음;

: abstract class == 공통의 속성 또는 기능이 존재하면서 일정 틀이 필요할 때;

: interface == 규격서 역할이 더 강함; 기능은 없지만 규격과 같은 틀을 제공해서 적절한 기능을 오버라이딩해서 구현;

  적정한 상황이 되었을때, 필요한 기능의 메소드를 호출해야 함; (이벤트 핸들러)

  ex) 사용자의 액션에 알맞는 메소드 호출 필요;

  버튼 // 사용자가 로그인을 누를때, 취소를 누를 때 등 클릭의 동작은 같지만 그 기능 및 결과가 다를 때;

 ex) interface XxxListener); {

click(); // {}

}

인터페이스를 통해 오버라이딩된 메소드를 호출할 수 있음; 다형성을 이용할 수 있으면서, interface를 통해 메소드를 호출하면 적절한 기능 

 


** 유지보수를 할 때,
이미 운영하고 있는 서비스에 추가하고 싶은 기능이 있을 때;
: interface에 추가시 interface를 구현하고 있는 모든 class에서 메소드 오버라이딩 필요 // 단점;

**java version1.8에 추가된 문법
: interface 안의 메소드에 static이나 defauls 제한자를 추가하면, abstract이 아닌 기능이 있는 메소드를 만들 수 있다.
: 공통의 기능을 미리 정의하고 그대로 사용하고, 다른 기능을 하고 싶은 경우에만 선택적으로 재정의하여 사용한다.
1) static

   : 구현객체 없이 바로 interface 이름, 메소드 이름()하고 접근할 수 있다. 
2) default

    : 반드시 구현객체를 이용해서 호출할 수 있다. 

 

** 익명 구현 객체

: interface를 implements 받은 이름이 없는 객체 // 객체 생성을 위한 class 만들지 않고 바로 구현;

: 재사용하지 않고, 일회성 용도로 사용

: 구현 객체 없이 바로 메소드 오버라이딩;

 

 

참고 블로그: https://limkydev.tistory.com/197

 

Comments