일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- systemd-resolved
- ssh tunneling
- 국비지원교육
- 패스트캠퍼스
- ARP
- dns forward
- L2 통신
- k8s
- 내일배움카드
- CoreDNS
- 메가바이트스쿨
- PV
- PVC
- Spring boot
- RDB
- linux dns
- linux domain
- reclaim
- MegabyteSchool
- DNS
- Layer 2
- 127.0.0.53
- 개발자취업부트캠프
- MariaDB
- L2 통작
- Today
- Total
hoonii2
[Java] 05. Interface 본문
Interface 는 Abstract 와 유사한 기능을 하지만 아래의 차이점이 있다.
1. Abstract
: 필드 선언 시 'static' , 'final' 을 사용할 수 없다
: method 를 작성할 때 'public', 'protected', 'private' 을 선언할 수 있다.
: extend 를 통해 abstract 이든 아니든 Class 를 한 개만 extend 할 수 있다.
: abstract method 는 실행 구문을 포함하지 않는다.
2. Interface
: 모든 필드는 자동으로 'public, 'static', 'final' 이 된다.
: 선언하는 모든 method 는 'public' 이 된다.
: 몇 개 든지 Interface 를 implement 할 수 있다.
: Interface 를 'public' 으로 지정하지 않으면 동일한 패키지에 정의된 클래스에서만 해당 Interface 에 접근할 수 있다.
: Interface 내에서 'default' or 'static' 으로 지정하지 않는 method 는 abstract 가 암묵적으로 지정되므로 abstract 를 따로 지정할 필요가 없다. (사용할 수는 있지만 불필요한 코드)
즉, Interface 내에 암묵적으로 abstract 메소드를 사용 시 ( 그냥 인터페이스 내에서 메소드 사용 시 Abstract 매소드가 된다 ) 실행 구문 없이 이를 Implement 하는 Class 에서 실행문을 작성할 수 있다.
그러면 Abstract 와 Interface 를 굳이 나눌 필요가 있을까?
1-1. Abstract 를 사용하는 경우
- 밀접한 관련이 있는 여러 클래스 간 코드를 공유하는 경우
- Abstract Class 를 상속하는 Class 와 많은 공통 메소드 또는 필드가 있거나 public 이외의 액세스 한정자 (ex, protected, private) 가 필요한 경우
- static/final 하지 않은 메소드를 정의하고자 하는 경우
1-2 Interface 를 사용하는 경우
- 관련없는 여러 클래스가 이를 구현하는 경우 ( ex, Comparable, Cloneable )
- 특정 데이터 유형의 동작을 지정하고자 하지만 이를 사용하는 Class 의 목적과 공통인지 관심이 없는 경우
- 다중 상속을 활용하고자 하는 경우
하지만 보통 Interface 를 사용하고 Abstract 가 불필요한가에 대한 Stackoverfow 토론도 있다. (https://stackoverflow.com/questions/7202616/java-abstract-interface)
Java abstract interface
Consider an example (which compiles in java) public abstract interface Interface { public void interfacing(); public abstract boolean interfacing(boolean really); } Why is it necessary fo...
stackoverflow.com
3. Default / Static Interface
: 미리 생성되어 사용중인 Interface 에 추가적인 메소드를 추가하고자 하는 경우 사용한다.
: 실행 구문을 인터페이스 내에 작성할 수 있어 기존 Interface 를 Implement 하는 Class 들에 수정사항을 필요로 하지 않으며 추가되는 메소드를 자유롭게 사용할 수 있게 된다.
4. Functional Interface
: 인터페이스 내에 Abstract 메소드가 하나만 있는 인터페이스를 의미한다
: @FUnctionalInterface 어노테이션으로 의미를 지정 및 검사를 할 수 있다.
: 3 번의 내용으로 해당 인터페이스 내에 Default/Static 메소드를 구현해도 Abstract 메소드가 한 개만 있다면 문제없이 동작한다.
: 람다 표현식으로 함수형 인터페이스를 인스턴스로 생성하여 간단하게 사용할 수 있다
'개념 공부 > (개발) 01. Java' 카테고리의 다른 글
[Java] 07. Lambda Expression (0) | 2022.12.09 |
---|---|
[Java] 06. Local Class / Anonymous Class (0) | 2022.12.02 |
[Java] 04. Primitive/Reference Data Type, Wrapper Class (0) | 2022.11.18 |
[Java] 03. JVM 메모리 구조 (0) | 2022.10.07 |
[Java] 02. JVM 컴파일 (0) | 2022.09.30 |