1. abstract -- 추상적인, 미완성의
1) 클래스 앞에 붙을 때 : 클래스 내에 추상 메서드가 존재하는 클래스임.
2) 메서드 앞에 붙을 때 : 선언부만 존재하고 구현부가 없는 추상 메서드 임.
2. 추상 클래스란?
1) 개념
- 완성되지 않은 설계도와 같음.
- 인스턴스를 생성할 수 없음.
=> 상속을 통해서 자손클래스에서 추상메서드를 다 구현해야 비로소 인스턴스 생성할수 있음.
- 추상 메서드(선언부만 존재)를 최소 1개 이상 포함하고 있는 클래스임.
- 다른 클래스를 작성하는데 도움을 줄 목적으로 이용됨.
3. 추상 메서드란?
1) 메서드의 선언부만 있고, 구현부(정의부, 몸통)이 없는 메서드를 말함.
public abstract void power(String name);
2) 자손마다 다르게 구현될 것이라고 예상될때 사용함.
3) 추상클래스를 상속받는 자손클래스는 조상의 추상 메서드의 구현부를 완성해야
인스턴스를 생성할 수 있음. 일부만 구현하는 경우도 있음.
4. 추상 클래스의 작성
1) 공통적으로 사용될 것이라고 예상되는 것을 모아서 하나의 추상클래스로 만듦.
2) 코드 중복 제거됨.
3) 한곳에서 관리가 됨.
4) 오류가 줄어듦.
5. 인터페이스(interface)의 개념
1) 일종의 추상클래스이긴 하나 멤버의 주류가 추상메서드임.
2) 객체사용 설명서임.
3) 인터페이스의 멤버
- 추상 메서드 -- 인터페이스의 본질
- 상수 (static final) -- 부수적 개념
- static 메서드
- default 메서드
- private 메세드
4) 생성자가 없음. => 인스턴스를 만들수 없음.
5) 클래스 작성에 도움을 줌.
6) 표준을 제시하여, 그 규칙에 맞게 구현하도록 함.
6. 인터페이스 작성
1) class 대신 interface를 사용함.
public interface A {
int a = 10; //static final 속성 생략됨
void method(); //abstract 속성 생략됨
}
2) 상수는 static final 속성을 지니고 있으며,
추상메서드는 abstract 속성을 지님. 생략 가능 (컴파일러가 알아서 추가해줌)
3) 인터페이스도 클래스와 동일하게 상속이 가능함. (다중상속 가능)
4) 다형성 개념이 적용됨.
5) 클래스 상속은 extends를 사용하는데 인터페이스는 implements 를 사용함.
6) 구현클래스는 반드시 인터페이스에 선언되어 있는 추상 메서드를 재정의 해야 함.
7. 인터페이스의 여러가지 요소
1) 상수
2) 추상 메서드
3) 디폴트 메서드 (java 8이후)
- 구현을 가지는 메서드.
- default 키워드 사용
- 구현하는 클래스에서 재정의 할수 있음.
4) 정적 메서드 (java 8이후)
- 인스턴스 생성과 상관없이 인스턴스 타입으로 사용할수 있는 메서드.
5) private 메서드 (java 9이후)
- 인터페이스를 구현한 클래스에서 사용하거나 재정의 할수 있음.
- 인터페이스 내부에서만 사용하기 위해 구현하는 메서드.
- default메서드나 static메서드에서 사용함.
8. 여러 인터페이스 구현하기, 인터페이스의 상속하기
1) 여러 인터페이스 구현
- 자바의 인터페이스는 구현 코드가 없으므로 하나의 클래스가 여러 인터페이스를 구현 할수 있음.
- 디폴트 메서드가 중복 되는 경우는 구현 하는 클래스에서 재정의하여야 함.
- 여러 인터페이스를 구현한 클래스는 인터페이스 타입으로 형변환되는 경우 해당 인터페이스에 선언된 메서드만 사용가능 함.
2) 인터페이스의 상속
- 인터페이스 사이에도 상속을 사용할수 있음.
- extends 키워드를 이용
- 인터페이스는 다중 상속이 가능하고
구현 코드의 상속이 아니므로 타입 상속이라고 함.
3) 클래스 상속과 인터페이스 구현 함께 사용
- 프레임워크나 라이브러리 사용하는 경우에는 클래스 상속과 인터페이스 구현을
같이 사용하는 경우가 많음.
'Web > Java' 카테고리의 다른 글
Java(18) - Class 클래스 (0) | 2022.01.28 |
---|---|
Java(16) - Object 클래스 (0) | 2022.01.28 |
Java(14) - 다형성 (0) | 2022.01.28 |
Java(13) - review2 (0) | 2022.01.28 |
Java(12) - 상속과 오버라이딩 (0) | 2022.01.28 |
댓글