다형성의 개념에 대해 설명할 수 있다.
하나의 인스턴스가 여러 타입을 가질 수 있는 것. 상속을 기반으로한 기술이다.
다형성의 장단점을 설명할 수 있다.
같은 동작을 하는 메소드를 새로운 객체가 생길때 마다 작성하지 않아도 된다.
여러 타입의 객체를 하나의 타입으로 관리할 수 있으므로 유지보수가 쉽고 결합도가 낮으며 확장성이 좋다.
동적 바인딩에 대해 설명할 수 있다.
컴파일 당시에는 해당 타입의 메소드와 정적으로 연결되어 있다가
런타입 당시 (실행시) 실제 객체가 가진 오버라이딩 된 메소드로 바인딩이 바뀌어 동적으로 동작하는 것을 의미한다.
동적바인딩은 상속 관계로 이루어져 메소드 오버라이딩이 되어 있어야 한다.
하나의 메소드 호출로 각기 다른 객체의 다른 메소드를 동작시키는 것.
Parent p = new Child();
p.method();
타입 형변환에 대해 이해할 수 있다.
타입 형변환은 업캐스팅과 다운캐스팅이 있다.
업캐스팅은 부모 타입으로 형변환(묵시적으로 가능)
다운 캐스팅은 자식 타입으로 형변환이기 때문에 명시적으로만 가능하다.
((하위클래스)레퍼런스명).메소드();
instanceof 연산자의 사용 목적을 이해하고 활용할 수 있다.
해당 클래스 타입이 맞을 때에만 해당 클래스 타입으로 형변환 하는 연산자,
래퍼런스 변수가 어떤 클래스의 타입인지 확인하는 용도이다.
클래스 타입이 맞으면 true 아니면 false를 반환하여 보통 if문으로 사용된다.
if(레퍼런스 instanceof 클래스타입) {
//true일때 처리할 내용, 해당 클래스 타입으로 down casting
}
객체 배열에 다형성을 적용하여 사용할 수 있다.
다형성과 객체 배열을 이용하면 여러 인스턴스를 하나의 레퍼런스 변수로 연속 처리가 가능하다.
Car[] car new Car[5];
car[0] = new Sonata();
car[1] = new Avante();
car[2] = new Moning();
for (Car c : car ) {
c.move();
}
매개변수에 다형성을 적용하여 사용할 수 있다.
묵시적 형변환을 이용해서 매개변수가 다행한 자식클래스 자료형을 받아줄 수 있다,
만약 다형성을 이용하지 않는다면, 자식클래스 타입마다 코드를 작성해줘야 한다.
Animal 클래스를 매개변수로 받는 메소드에 Animal 클래스를 상속받은 자식클래스인 Rabbit을 매개변수로
인스턴스를 생성하여 묵시적 형변환을 이용해 전달하는 방식이다.
Animal a = new Animal();
a.cry(new Rabbit()); //인스턴스를 생성하면서 바로 매개변수로 전달하는 방식
Rabbit rabbit = new Rabbit(); //인스턴스를 레퍼런스 변수에 담아서 전달하는 방식
a.cry(rabbit); //묵시적 형변환
리턴 타입에 다형성을 적용하여 사용할 수 있다.
묵시적 형변환을 이용해서 메소드에서 리턴되는 다향한 자식클래스 자료형을 받아줄 수 있다.
return new Rabbit() ;
추상클래스와 추상메소드에 대해 설명할 수 있다.
추상클래스란 미완성 클래스로 내용이 작성 되지 않은 클래스이다.
추상클래스를 상속받은 하위 클래스가 이를 오버라이딩 하는 것을 강제화 한다.
추상클래스의 문법적 특징에 대해 설명할 수 있다.
추상 메소드는 메소드의 선언부만 있고 {} 구현부가 없다.
반드시 abstract 키워드를 메소드 헤드에 작성해야 한다.
추상클래스는 필드와 생성자를 가질 수 있지만 인스턴스 생성은 불가능 하다.
일반적인 메소드도 가질 수 있다. 추상메소드는 0개 이상 가질 수 있다.
추상메소드가 없는 경우 abstract키워드를 작성하여 인스턴스 생성을 막기 위해 사용한다.
추상클래스의 사용 목적에 대해 설명할 수 있다.
추상메소드를 오버라이딩하도록 강제하거나 추상클래스만을 만들어 인스턴스 생성을 막게 한다.
extends 키워드를 사용한 추상클래스 상속은 단일 상속만이 가능하다.
인터페이스에 대해 설명할 수 있다.
인터페이스는 추상 클래스보다 강제성이 더 강한 형태로 추상메소드와 상수 필드를 가진다.
다중 상속이 가능하다.
인터페이스의 문법적 특징에 대해 설명할 수 있다.
인터페이스는 생성자를 가질 수 없으며 인스턴스 생성이 불가능 하고, 다중 인터페이스가 사용 가능하다.
인터페이스 안에 작성된 메소드는 묵시적으로 public abstract이다.
인터페이스의 메소드를 오버라이딩 하는 경우 접근제한자를 반드시 public으로 해야한다.
static메소드는 작성 가능하다(오버라이딩은 불가능하다). default 키워드 작성 시 non-static메소드도 작성 가능하다.
implements 키워드를 사용한다.
인터페이스의 사용 목적에 대해 설명할 수 있다.
추상클래스보다 강제성이 강하고, 일관된 인터페이스를 제공하며 다중 상속이 가능하다.
인터페이스와 추상클래스를 각각 설명하고 공통점과 차이점에 대해 설명할 수 있다.
아래 표를 참고한다.
구분 | 추상클래스 | 인터페이스 |
상속 | 단일 상속 | 다중 상속 |
구현 | extends 사용 | implements 사용 |
추상 메소드 | abstract 메소드 0개 이상 | 모든 메소드는 abstract |
abstract | 명시적 사용 | 묵시적으로 abstract |
객체 | 객체 생성 불가 | 객체 생성 불가 |
용도 | 참조 타입 | 참조 타입 |
부족했던 부분
1. 추상클래스와 인터페이스의 구문 중 메소드의 자세한 사용 방법 미숙지.
static 메소드와 non-static메소드 사용 가능한 점.
2. 추상클래스와 인터페이스 각 사용 용도를 명확하게 설명하지 못함.
'백엔드 과정 > Java' 카테고리의 다른 글
[Java] 제네릭 개념 복습 (0) | 2022.01.24 |
---|---|
[Java] API 개념 복습 (0) | 2022.01.24 |
[Java] 상속 개념 복습 (0) | 2022.01.15 |
[Java] 객체 배열 개념 복습 (0) | 2022.01.15 |
[Java] 클래스와 객체 개념 복습 (0) | 2022.01.14 |