일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- array
- JDBC
- driver
- Transaction
- 상속
- Annotaion
- 오라클
- Join
- 자바
- Serializable
- Reader
- Connection
- 다이얼로그
- 조회
- InputStream
- swing
- DB
- where
- statement
- 16bit
- DB연동
- 예외처리
- set
- java
- stream
- 난수
- Oracle
- 8bit
- transient
- select
- Today
- Total
오버플로
[Java] Interface 본문
★오늘은 Java의 꽃,, Interface★
Interface
- 구현클래스(자식클래스)에서 반드시 구현해야 할(Override) 일(method)의 목록을 정의한 것
<구조>
interface
상수(Constact) (*final 선언)
abstract method
*default method
*default method : JDK1.8에서부터 method body({})가 있는 default method가 추가됨
: interface 내에서 업무를 구현하여 제공할 필요가 있을 때 사용
: 이 method도 당연히 구현 클래스에서 객체화가 진행된 후 호출할 수 있음
<특징>
- 다중 상속 효과 (여러 개의 인터페이스를 한 클래스에서 구현 가능)
- 약결합을 구현하여 객체 간의 유연성 향상
- 인터페이스는 생성자를 가질 수 없음 (객체화 불가)
- 인터페이스끼리 상속 가능 (여러개 가능)
- 인터페이스는 인스턴스 변수가 존재하지 않으므로 구현클래스의 *객체 크기에 영향을 주지 않음
*객체 크기 : heap에 적재되는 인스턴수 변수의 총 크기
- FunctionalInterface : interface가 abstract method를 반드시 하나를 가져야 하는 경우
: 편하게 사용하기 위해 Lambda식이 JDK1.8에서부터 지원됨
<객체다형성>
- is a 관계의 객체화 가능 (부모가 자식의 주소를 저장하는 것)
> 인터페이스는 객체화가 될 수 없지만, 구현한 클래스의 객체주소를 저장할 수 있음
> 부모클래스, 부모인터페이스의 method를 호출하면 자식이 구현한 method가 최우선적으로 호출됨
(부모쪽은 abstract method라서 원래 동작하지 않아야 하지만 객체다형성으로 가능해짐)
- interface를 매개변수로 받는 method가 있을 때,
이 인터페이스를 구현한 class들은 모두 interface를 parameter로 하는 곳에 할당 가능함
> 구현한 클래스의 객체명으로 할당함
> 어느 클래스를 할당 하냐에 따라 값이 다 다르게 나올 수 있음 (구현 내용이 다 다를 수 있으니까)
★ 원 method 생성자의 입장에서는 부모의 기능만 잘 알고 있으면
그것을 어떻게 구현했는지
상세 내용을 알지 않고도
부모의 이름으로 다양한 기능들을 호출할 수 있게 됨 ★
<구현 방법>
- 인터페이스 생성 문법)
접근지정자 interface 인터페이스명 [extends 부모인터페이스명,,,] { }
> 접근지정자 : public – 패키지 외부에서 접근 가능, default(package) – 패키지 내부만 가능
> 인터페이스명은 낙타체로 작성 (첫 글자 대문자!)
- 인터페이스를 클래스에서 구현할 때)
접근지정자 class 클래스명 [extends 부모클래스명] [implements 구현인터페이스명,,]
- abstract method 문법) – abstract 생략 가능 / body({}) X
1) abstract 생략 : 접근지정자 반환형 method명(매개변수,,,);
2) abstract 명시 : 접근지정자 abstract 반환형 method명(매개변수,,,);
> 접근지정자 : public, protected, default
- default method 문법) – body O
접근지정자 default 반환형 method명(매개변수,,,) { 업무 구현 };
> 접근지정자 : public, protected, default
# 오늘의 코딩 #
package test;
/**
* 날기 위한 일의 목록 정의
* 추진력, 양력이 필요
* @author user
*/
public interface Fly {
/**
* 추진력
* @return
*/
public String drivingForce();
/**
* 양력
* @return
*/
public String upwardForce();
}//interface
- 날기 위한 간단한 interface를 작성해보았다. 모두 abstract method
package test;
/**
* Fly interface를 구현하고 사용할 class
* @author user
*/
public class Superman implements Fly {
String name = "";
public Superman() {
name = "Clark";
}// Superman
/**
* interface의 abstract method 구현<br>
* 추진력<br>
*/
@Override
public String drivingForce() {
return "팔을 하늘로 뻗기";
}// drivingForce
/**
* interface의 abstract method 구현<br>
* 양력<br>
*/
@Override
public String upwardForce() {
return "슈퍼 망토";
}// upwardForce
public static void main(String[] args) {
Superman man = new Superman();
System.out.println(man.name + "의 추진력:" + man.drivingForce());
System.out.println(man.name + "의 양력:" + man.upwardForce());
}// main
}// class
- Fly interface를 구현하고 사용할 class 작성!
# 출력 결과 #
Clark의 추진력:팔을 하늘로 뻗기
Clark의 양력:슈퍼 망토
>> 잘 나오는 거 확인 ㅎㅎ 나중엔 extends까지 더해서 다중 상속해볼 예정!
'Java' 카테고리의 다른 글
[Java] Date Class / SimpleDateFormat Class / Locale Class (0) | 2021.08.01 |
---|---|
[Java] StringTokenizer (0) | 2021.07.30 |
[Java] Math Class (0) | 2021.07.29 |
[Java] Inner Class / Nested Class / Local Class / Anonymous Inner Class (0) | 2021.07.27 |
[Java] Overloading / Overriding / Annotaion / Abstract Class (0) | 2021.07.26 |