✔추상 클래스
1. 추상 클래스(Abstract Class)
- 하나 이상의 추상 메서드를 포함하는 클래스. 공통 모듈을 추출해 구현하고 세부적인 조정이 필요한 부분은 추상 메서드로 구현.
추상 메서드
: 구현부없이 선언부만 남긴 메서드. abstract
키워드 사용.
- 자손 클래스에서 반드시 재정의되어야 하므로 구현이 무의미한 메메서드에 적용
- 재사용성 상승 : 상속 관계를 통해 공통 모듈의 중복 최소화 -> Overriding을 통해 재정의
public abstract class Parent{
public abstract void p(){};
}
public class Child1 extends Parent{
public void p(){
System.out.println("Child1");
}
}
public class Child2 extends Parent{
public void p(){
System.out.println("Child2");
}
}
2. 추상 클래스 특징
- abstract 클래스는 상속 전용의 클래스.
- 추상 메서드(구현부가 없는 메서드)가 있으므로 객체 생성 불가.
- 추상 클래스에는 abstract 키워드를 추가하여 객체를 생성할 수 없음을 명시
- 상위 클래스 타입으로 자손 클래스 참조 가능.(다형성)
- 조상 클래스에서 상속받은 abstract 메서드를 재정의하지 않는 경우
- 클래스 내부에 abstract 메서드가 있는 상황이므로 자식 클래스 또한 추상 클래스로 선언되어야 한다.
- 구현의 강제를 통해 프로그램 안정성 향상
- interface에 있는 메서드 중 구현할 수 있는 메서드를 구현해 개발의 편의 지원.
✔인터페이스
1. 인터페이스(Interface)
- 인터페이스 : 서로 다른 두 시스템 장치. 소프트웨어 등을 서로 이어 주는 부분.
- GUI(Graphic User Interface) : 프로그램과 사용자 사이의 접점.
- JAVA의 인터페이스
- 최고 수준의 추상화 단계 : 일반 메서든는 모두 abstract 형태
- JDK 8에서 default method와 static method 추가.
- 형태
- 클래스와 유사하게 interface 선언.
- 멤버 구성
- 모든 멤버 변수는 public static final이며 생략 가능.
- 모든 메서드는 public abstract 이며 생략 가능.
- 상속 : 인터페이스끼리의 상속.
- 클래스와 마찬가지로
extends
를 이용해 상속.
- 클래스와 다른 점은 인터페이스는 다중 상속이 가능.
- 구현과 객체 참조
- 클래스에서
implements
키워드를 사용하여 구현
- implements한 클래스
- 모든 abstract 메서드를 재정의 또는 abstract 클래스 명시.
- 여러개의 interface implements 가능.
- 다형성은 조상 클래스 뿐 아니라 조상 인터페이스에도 적용.
interface P{
void a();
}
class Impl implements P{
publicc void a(){
System.out.println("인터페이스 구현.");
}
}
class Main{
public static void main(String[] args){
P test = new Impl();
test.a();
}
}
2. 인터페이스 필요성
- 구현의 강제로 표준화 처리(abstract 메서드와 비슷.)
- JDBC(Interface) -> MySql, Oracle 등 벤더 별 interface 구현 Class
- 어떤 DB를 쓰던지 똑같은 Java 코드로 실행할 수 있다.
- 인터페이스를 통한 간접적인 클래스 사용으로 손쉬운 모듈 교체 지원
- 서로 상속의 관계가 없는 클래스들에게 인터페이스를 통한 관계 부여로 다형성 확장
- 다형성의 기본은 클래스이지만, 이미 상속을 한 상태라면 인터페이스로 추가할 수 있다.
- 모듈 간 독립적 프로그래밍 가능 -> 개발 기간 단축
- 먼저 구조만 구현한 뒤, 모듈 간 독립적으로 필요한 부분 구축해나갈 수 있다.
3. (Default / Static) 메서드
Default Method
: 인터페이스에 선언된 구현부가 있는 일반 메서드.
- 선언부에
default
키워드 추가 후 구현부 작성
- 기본 접근 제한자 : public default
- 필요성 : interface에 추가해야하는 기능 발생
- 기존 방식 : implements한 모든 클래스에서 재정의 진행 필수.
- default : abstract가 아니므로 반드시 구현해야할 필요가 없음.
- default의 추가로 기존의 추상 클래스 역할이 줄어들게 되었다.
Static Method
: 일반 클래스의 static 메서드와 동일하게 사용.
- 구현체 클래스 없이 바로 인터페이스 이름으로 메서드 접근하여 사용 가능.
- default method간의 충돌!!!!
- JDK 1.7 이하의 java에서는 interface method에 구현부가 없으므로 충돌이 없엇음.
- 1.8부터 default method가 생기면서 동일한 이름을 갖는 구현부가 있는 메서드가 충돌.
- method 우선 순위
- super class의 method 우선 : super class가 구체적인 메서드를 갖는 경우 default method는 무시.
- interface간의 충돌 : 하나의 interface에서 default method를 제공하고 다른 interface에서도 같은 이름의 메서드(default 유무와 무관)가 있을 때 sub class는 반드시 override해서 충돌 해결.