일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- CS기초지식
- Computer Science
- CS 기초지식
- edwith
- Compute Science
- CS 기초
- WebProgramming
- 이진법
- SW
- ERD
- 삼성청년SW아카데미
- 관계형 데이터베이스
- CS50
- w3schools
- 면접을 위한 CS 전공지식 노트
- java
- 상속
- 예외처리
- til
- 모두를 위한 컴퓨터 과학(CS50)
- 부스트코스
- exception
- SSAFY 9기
- Java Programming
- 모두를 위한 컴퓨터 과학
- ssafy
- 기초프로그래밍
- 데이터베이스 모델링
- 객체지향
- 알고리즘
- Today
- Total
Joslynn의 하루
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -12일차 노트 필기_interface (인터페이스)_220802 본문
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -12일차 노트 필기_interface (인터페이스)_220802
Joslynn 2022. 8. 2. 16:21
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