일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring
- it
- ubuntu
- Oracle
- tool
- 맛집
- Web Server
- 요리
- javascript
- springboot
- IntelliJ
- php
- Spring Boot
- Git
- jenkins
- MySQL
- db
- linux
- Design Patterns
- Spring Batch
- AWS
- jsp
- elasticsearch
- JVM
- devops
- Gradle
- ReactJS
- laravel
- java
- redis
- Today
- Total
아무거나
인터페이스 본문
[인터페이스]
1. 인터페이스란?
- 객체와 객체의 소통 수단
- 작업 명세서 - 앞으로 이렇게 만들어요
- 다형성 - java에서 다형성을 가능하게 함
ex) A -> S (상속)
A a = new A();
S a = new A();
// 위의 상속은 A랑 S밖에 두가지 타입밖에 안되는데
// 만약 인터페이스를 사용한다면 여러가지 타입을 지정할 수 있다.
public interface InterfaceEx {
public static final int CONSTANT = 10;
public void inMethod();
pubiic void inMethod2();
}
- 실제 개발에 적용시키기는 쉽지 않음
- 디자인 패턴이나 프레임워크를 통해 습득하는 것을 권장
- 객체를 부속품화
2. 인터페이스 문법
- 실제 기능이 없다. (추상메소드와 상수만이 존재 한다.)
- 접근제한자 private은 안된다.
- 메소드는 무조건 추상 메소드만 존재
- 객체타입 : 인터페이스는 객체는 아닙니다. 다만, 객체타입으로만 사용된다.
ex) A a = new A(); // 타입은 A
S a = new A(); // 타입은 S
- 구현은 실행 되는 객체의 메소드에서 한다. ( implement하는 클래스에서 오버라이드해서 사용이 되어진다. )
ex) 클래스안에 몇 가지의 기능들을 만들려 할때
먼저 인터페이스를 기능별로 생성 후
그 인터페이스들을 다중으로 implements해서 할 수 있다.
3. 다형성
- 말 그대로 객체가 다양하게 변할 수 있다고 생각하면 된다.
인터페이스를 만들기전 참고할 표)
배우 | 경찰관 | 소방관 | 요리사
| 범인을 찾을 수 있다. | 불을 끌수 있다. | 피자를 만들 수 있다.
| 잃어버린 물건을 찾을 수 있다. | 사람을 구할수 있다. | 스파게티를 만들 수 있다.
(1) 경찰, 소방관, 요리사의 기능을 인터페이스로 구현
(2) 배우는 상황에 따라서 변해야 하기 때문에 3개(경찰관, 소방관, 요리사) 즉, 총 6개의 기능을 재정의를 하여 구현한다.
ex) Actress actress = new Actress(); // 타입이 Actress일 경우는 6개의 기능이 다 가능하지만
예를 들어 PoliceMan actressP = new Actress(); // 타입이 PoliceMan일 경우에는 경찰기능인 2개만 가능하다.
4. 인터페이스와 다중상속
- java는다중상속이 불가한다.
ex) public class ChildClass extends ParentClass1, ParentClass2, ParentClass3 {
// ParentClass1 만 단일상속은 가능한다 그 이상은 안된다.
}
- 다중 구현은 가능하다.
ex) public class ChildClass implements iFunction1, iFunction2, iFunction3 { }
* Main -> AirPlaneToyClass implements Missile, Light
(public interface Missild extends Toy, public interface Light extends Toy)
(public interface Toy)
이런식으로도 상속 및 구현이 가능하다.
5. 인터페이스와 추상클래스
- 공통점
# 추상메소드를 가지고 있다. -> 즉, 추상메소드를 가지고 있어 하위 클래스에서 구현해야 한다.(오버라이딩)
# 데이터 타입이 목적이다. (객체생성이 목적이 아닌 데이터 타입을 정의하는 것이 목적)
# 객체 생성은 anonymose를 이용해야 한다.
* anonymose란?
- 익명 클래스
Test t1 = new Test(){
public int num = 10;
@Override
public int getNum(){
return this.num;
}
};
바로 위의 소스코드랑은 비슷하면서도 다른점이 있다. 다른점은 인스턴스 옆에 블럭이 있다는 점이겠다.
언뜻 보면 new Test()라는 소스코드 때문에 이 인스턴스는 Test의 이름을 가질 것 같지만,
결코 아니다. 이 인스턴스야 말로 정말 어떠한 이름도 없는 인스턴스 인 것이다.
해당 주장이 맞는 주장인지 근거를 제시해보겠다.
먼저, 해당 인스턴스의 블럭안에는 @Override 어노테이션 주석이 존재한다. 즉, 원래의 Test 클래스에
존재하던 getNum 메서드가 아닌 재정의된 메서드 인점,
또한, 이 인스턴스의 this.num을 출력했을 경우 10이 나온다는 점이다.
오히려 이 인스턴스는 Test 클래스를 상속받은 클래스라고 바꿔 말해도 될 것이다.
평소에 자바언어를 사용하는 사용자라면, 상속을 어떻게 쓰는지 알 것이다.
클래스명 extends 상속받을 클래스 구조로 사용하는데 위의 소스 코드는 클래스명이 존재 하지 않고
무명의 어떠한 클래스가 부모클래스로 부터(Test) 상속을 받은 인스턴스 인 것이다.
즉 이름이 없으므로 생성자를 선언 할 수도 없는것이다.
- 차이점
# 상속, 구현 : 추상메소드는 상속을 통한 사용이고, 인터페이스는 구현을 통한 사용입니다.
# 구성요소 차이 - 추상클래스는 일반 클래스와 동일하게 변수, 메소드의 모든 기능을 사용할 수 있지만, 인터페이스는 상수와 추상메소드만이 존재 한다.
# 단일상속, 다중구현 : 추상클래스는 상속이므로 단일 상속만 지원하고, 인터페이스는 다중구현이 가능하다.
'Java & Kotlin > Java' 카테고리의 다른 글
스트레티지 패턴 (0) | 2019.08.12 |
---|---|
싱글턴 패턴(Singleton Pattern) (0) | 2019.08.09 |
추상클래스(abstract) (0) | 2019.08.08 |
super 키워드 (0) | 2019.07.04 |
오버라이드 (0) | 2019.07.04 |