(제대로 이해했나 스스로 예제 만들어보기)
(추상클래스와 인터페이스 차이 있다. 혼동하기 말기)
추상 클래스 : 클래스들의 공통요소들을 뽑아 상속구조로 이용. abstract, extends 키워드 사용
공통 요소들을 조상 클래스로 주고 이를 각각 상속받아 사용하는 식.(상속받는 메서드들은 메서드 오버라이딩으로 재정의)
구현 클래스들은 상속받을 이 abstract 메서드들을 다 재정의해야할 의무가 있고,
어차피 오버라이딩해서 사용할거니까 조상 클래스의 메소드 내 구현부는 의미가 없어짐.
-> 구현부는 세미콜론으로만 남겨버림
추상 클래스는 객체 생성이 불가(직접 사용할 일이 없으므로) 하나, 자식타입을 참조하여 객체 생성하는건 맞음
스스로 객체 생성해 사용하는게 아닌 자식 클래스를 생성해 사용한다
추상 메서드가 반드시 있어야 하는건 아니다. 이때 추상클래스로 선언 안해도 가능
추상메서드를 하나라도 가지고 있으면 추상클래스로 선언되어야 한다
추상 메서드 + 구현된 메서드 동시에 포함 가능
클래스/메서드에 둘다 abstract 키워드 붙인다.
Vehicle v = new Vehicle(); => X
Vehicle v = new DieselSUV(); => O
인터페이스: 접점, 표준을 가짐, 최고 수준의 추상화 단계 클래스.
JDBC같은 드라이버가 인터페이스의 예시라고 할수있음
구현 키워드는 implements, is-a 관계 중에서도 is able to 관계라 표현.
클래스는 일반적으로 단일상속을 원칙으로 하는 반면(extends), 인터페이스는 다중상속이 가능해서 유연하다
선언하는건 클래스 선언이랑 비슷한데,원칙이
모든 멤버변수들은 다 public final static(생략가능)
모든 메서드는 다 public abstract(생략가능)
구현된 메서드를 가질수 없다(추상 메서드와 차이점)
인터페이스가 인터페이스를 상속받을수도 있는데 이때는 extends를 쓴다(이때도 다중상속 가능)
interface Fightable{
int fire();
}
왜 인터페이스를 쓸까??
1. 구현을 강제로 표준화처리 함으로써
2. 간접적 클래스 사용
3. 관계없는 클래스들 간 인터페이스를 통해 관계 부여 가능 ->다형성 확장
(이미 각기 다른 클래스로부터 상속받은 두 자식 클래스를 묶을수있다)
4. 단일 상속만 가능하다는 특징을 갖는 추상 클래스에 비해 관계확장이 자유롭고 느슨, 유연하다
=> 손쉬운 모듈 교체(JDBC를 생각해보자)
5. 독립적 프로그래밍을 통한 개발기간 단축 (프론트 - 백 사이 인터페이스 정의 생각해보자)
default method: 인터페이스에 선언된 구현부가 있는 일반 메서드.
(원래 자바에서는 인터페이스에 구현부있는 메서드 허용 안했음, 자바 8부터 도입)
이게 뭐냐??
예를들어, 나중에 인터페이스에 새로운 기능을 추가해야 할 일이 생겼을때,
상속받은 클래스들 하나하나에 다 이 기능을 구현하기 빡셀수있다.
이때 반드시 구현할 필요가 없는 이 default method를 정의해놓으면 개별적으로 다 구현할필요없이 사용가능
static method: 호다닥 넘어가서 설명 제대로 못들음;
객체를 Object로 한번에 관리하면 편할수는 있지만, 이중 특정 데이터를 추출할때 반드시 형변환이 필요하다는 단점.
실행시 잘못될수 있음.
-> 제너릭 타입
클래스 타입/메서드/객체생성 시 쓸수있음
1. 추상 클래스 관련하여 틀린걸 고르시오
1 - 추상 클래스는 추상 메서드를 최소한 1개 이상 포함한다
2- 추상 클래스에서는 구현된 메서드 포함이 가능하다
3- 추상 클래스 내의 abstract 메서드들은 반드시 자식 메서드에서 구현해야한다
4- 추상클래스 내의 abstract 내의 구현부는 의미가 없다
5- abstract 키워드를 통해 추상 메서드를 상속받은 클래스를 구현한다
2. 인터페이스 사용과 관련하여 맞는것을 고르시오
1- 클래스를 직접 사용함으로써 모듈 간 의존도를 낮출 수 있다
2- 아무런 관계가 없는 클래스들 간의 관계를 생성하기 용이하다
3- 추상 클래스와 마찬가지로, 단일 상속을 지원하여 관리에 용이하다
4- 초반에 default 메서드를 한번 정의해놓고,상속받는 메서드들에서 오버라이딩함으로써 사용가능하다
5- 구현을 강제로 표준화 처리하지 않아 유연한 사용이 가능하다
3. 다음 코드의 일부분을 보고, printInfo 메서드가 받을 수 있는 매개변수 타입을 숫자 타입으로 한정하도록 빈칸을 채우시오
public class GenericBox<T> {
private T some;
public T getSome() {
return some;
}
}
public void printInfo(GenericBox_________ box){
System.out.println(box.getSome());
}
4. 제너릭 타입을 붙일 수 있는 요소들을 나열하시오.
5. 인터페이스를 통한 상속 관계를 어떤 관계라고 표현하는지 쓰시오
'JAVA' 카테고리의 다른 글
상속, 오버라이딩, I/O, 생성자, 예외처리 등 복습한거 (0) | 2023.08.07 |
---|---|
[JAVA] OOP - Encapsulation(작성중) (0) | 2023.07.20 |
0719 자바 Inheritance, Constructor (0) | 2023.07.19 |
[JAVA] BufferedReader/BufferedWriter 사용하기 (0) | 2022.07.18 |