일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- DDL
- HTML
- commit
- spring
- 파이썬 파일편집
- Javascript
- js
- 깃
- 스프링
- 자바
- pull
- Push
- 깃허브
- git
- java 상속
- 정렬
- 파이썬 파일 수정
- Algorithm
- sort
- Spring Boot
- nodejs
- java
- SQL
- DML
- 파이썬
- JAVA ERROR
- 파이썬 파일생성
- python pwd
- github
- Python
Archives
- Today
- Total
춘식이를 좋아하는 개발자
[JAVA] 인터페이스(Interface) & 추상화 / 다중 상속 본문
728x90
JAVA 상속의 한계
JAVA, JavaScript에서는 다중상속이 불가능하다! (하나의 부모class만 존재)
(C++은 가능하다.)
하지만 Project가 커지면 커질수록 다중상속은 필요하고, 많이 사용된다.
그렇기 때문에 JAVA에서 제공하는 인터페이스(Interface)로 마치 다중상속을 받은 것처럼 사용할 수 있다.
추상화 개념
공통적으로 사용하는 기능을 따로 정의.
추상 class
abstract keyword로 선언 된 class
추상 class에는 일반 Method와 추상 Method를 정의할 수 있다.
추상 Method는 구현이 목적이 아닌 정의를 목적으로 한다.
추상 class는 인스턴스화(new)할 수 없다.
추상 Method가 있는 class를 상속받으면 무조건 오버라이딩을 해야 함.
추상 class의 한계
class 이기 때문에 다중상속이 어렵다.
인터페이스(Interface)
데이터를 제공하는 규격 (공통 기능을 제공한다.)
인터페이스는 다중 상속을 제공한다.
인터페이스의 상속을 받으면 무조건 오버라이딩을 해야한다.
인터페이스(Interface)의 상속을 implement 로 정의한다.
인터페이스 안에 있는 모든 Method는 추상 Method이다. (public 으로 정의)
Cording
인터페이스가 다음과 같이 정의되었다고 가정해보자.
package 인터페이스;
public interface UserImple {
void 요리를맛보다();
void 요리를평가하다();
}
package 인터페이스;
// 서비스를 제공해주는 기능 제공
public interface ServiceImple {
public abstract void 라면끓이는방법();
void 찌개끓이는방법(); // public abstract 생략가능.
public static void main(String[] args) {
// ServiceImple s = new ServiceImple(); //인터페이스화 불가능
}
}
(인스턴스화가 불가능하다)
위와 같이 정의된 두개의 인터페이스를 하나의 class에서 다중 상속 받을 수 있다.
package 인터페이스;
public class 요리교실 implements ServiceImple, UserImple{
// Interface를 활용해 마치 다중상속을 한 것 처럼 구현할 수 있다.
@Override
public void 요리를맛보다() {
// TODO Auto-generated method stub
}
@Override
public void 요리를평가하다() {
// TODO Auto-generated method stub
}
@Override
public void 라면끓이는방법() {
// TODO Auto-generated method stub
}
@Override
public void 찌개끓이는방법() {
// TODO Auto-generated method stub
}
}
여기서 @Override 는 생략이 가능하나 자동으로 구현되며 Overriding 되었다고 알아보기 쉽게 표기하는 것이 좋다!
728x90
'Study > Java' 카테고리의 다른 글
[Spring] Mybatis에서 Data 가져올 때 VO 와 Map 의 차이점 (0) | 2022.05.12 |
---|---|
[JAVA] 이클립스 북마크(책갈피)하기 (꿀팁!) (1) | 2022.05.11 |
[JAVA] 상속이란? (0) | 2022.05.11 |
[Algorithm] Insertion Sorting (삽입 정렬) (0) | 2022.05.11 |
[JAVA] Flag (플래그) Boolean형 data를 이용한 logic (0) | 2022.05.10 |