반응형
추상클래스
클래스가 미완성이다. → 멤버의 개수에 관계된 것이 아니라, 미완성 메서드(추상 메서드)를 포함하고 있다는 의미
💡 추상 클래스로 인스턴스 생성할 수 없다. 추상 클래스는 상속을 통해서 자식 클래스에 의해서만 완성된다.
추상 클래스로 어떤 시스템의 전반적인 틀을 잡아주고 상속할 때 자식 클래스에서 완성시키면 훨씬 효율적이다.
- 클래스 앞에 ‘abstract’를 붙여준다. (abstract class 클래스이름{})
- 클래스 선언부 ‘abstract’를 보고 추상메서드가 있구나 상속을 통해서 구현해야 되구나 쉽게 알 수 있다.
- 추상 클래스는 추상 메서드를 포함하고 있는 것을 제외하고는 일반 클래스와 동일함(생성자가 있고 멤버변수와 메서드도 가질 수 있다.)
추상메서드
선언부만 작성하고 구현부는 작성하지 않은 채로 둔 메서드
- abstract 리턴타입 메서드이름();
- 실제 내용은 상속받는 클래스에서 구현하도록 비워둔다 ({} → (X))
- 추상클래스로부터 상속받는 자식클래스는 오버라이딩을 통해서 부모의 추상클래스의 추상메서드를 모두 구현해야 한다.
- 상속받은 추상메서드 중 하나라도 구현하지 않는다면, 자식클래스 역시 추상클래스로 지정해야 된다.
여러 클래스에 공통적으로 사용될 수 있는 클래스를 바로 작성하기도 하고, 기존의 클래스의 공통적인 부분을 뽑아서 추상클래스로 만들어 상속하는 경우도 있다.
💡 상속이 자식 클래스를 만드는데 부모 클래스를 사용하는 것이라면, 추상화는 기존의 클래스의 공통부분을 뽑아내서 부모 클래스를 만드는 것이라고 할 수 있다.
추상화 ↔ 구체화
상속계층도를 따라서 내려갈수록 클래스는 점점 기능이 추가되어 구체화 정도가 심해진다.
반대로 올라갈수록 클래스는 추상화의 정도가 심해진다고 할 수 있다.
- 내려갈수록 세분화, 올라갈수록 공통요소만
상속을 통해서 공통부모가 같아 배열을 통해서 쉽게 다룰 수 있다.
abstract void move(int x,int y); 라는 추상메서드가 부모클래스에 존재하고 자식클래스들이 오버라이딩을 통해서 구현했다고 하자
공통부모로 배열을 만들어 그때 만들어진 참조타입.move()를 호출할 때 부모의 move가 호출되는게 아니라 각각 구현된 자식클래스들의 move가 호출된다.
- Object클래스에는 move가 정의되어 있지 않기 때문에 배열은 담을 수 있어도 move호출은 못한다.
반응형
'책 > Java의 정석' 카테고리의 다른 글
[java] 내부 클래스(inner class)와 익명 클래스(anonymous class) (0) | 2023.02.04 |
---|---|
[java] 인터페이스 && default 메서드와 static 메서드 (0) | 2023.02.04 |
[java] 제어자(modifier) (2) | 2023.02.04 |
[java] import문 (0) | 2023.02.04 |
[java] 패키지(package) (0) | 2023.02.04 |