728x90
- 추상 메서드는 작동 로직은 없고 이름만 있는 메서드라고 보면 된다.
- public abstract void draw();
- 추상 클래스 안의 메서드를 미완성으로 남겨놓는 이유는 부모(추상) 클래스에서 메서드를 선언부만 작성하고, 실제 내용은 상속받는 클래스에서 구현하도록 하기 위해 일부러 비워두는 개념이다.
- 추상 클래스
- 하나 이상의 추상 메소드를 포함하는 클래스라고 정의하기도 한다.
- 클래스의 선언부에 abstract 키워드가 있다는 말은 안에 abstract method 가 있으니 상속을 통해서 구현해주라는 지침이기도 하다.
- 추상 클래스는 추상 메서드를 포함하고 있다는 것을 제외하고는 일반 클래스와 전혀 다르지 않다.
- 추상 클래스에도 생성자가 있으며, 독립적인 인스턴스 멤버 변수와 메서드도 가질 수 있다.
- 클래스의 일종이라고 하지만 new 생성자를 통해 인스턴스 객체로 직접 만들 수 없다.
- 왜냐하면, 추상클래스는 상속 구조에서 부모 클래스를 나타내는 역할로만 이용되기 때문이다.
- 따라서 반드시 추상 클래스를 자식 클래에 상속시키고, 자식 클래스를 인스턴스화 하여 사용하여야 한다.
- 다만 직접적인 인스턴스화가 불가능하다 뿐이지, super() 메서드를 이용해 추상 클래스 생성자 호출이 가능하다.
- 만일 부모 추상 클래스 생성자 실행에 있어 인자를 주어 제어를 하고 싶다면, 자식 클래스 생성자 메서드 내에서 super() 부모 생성자 호출 메서드를 통해 가능하다.
- 추상 클래스 활용
- 공통 멤버의 통합으로 중복 제거, 코드 재사용성 증대 효과
- 굳이 부모 클래스를 abstract 추상 클래스로 사용해야 하는 이유는 자식 클래스를 업캐스팅해서 다형성을 이용하여 프로그래밍할때 필요성이 나타난다.
- 추상 클래스의 추상 메서드 구현의 강제성을 통한 기능 보장
- 추상 메서드를 통한 강제 구현의 멘토링은 기존 프로그램 스펙에서 수정하거나 기능을 추가할때 일어날 수 있는 문제되는 점을 미리 방지함으로써 보다 안정적이고 구조적으로 프로그래밍 할 수 있게 도와준다.
- 이러한 특성은 interface 에도 똑같이 적용되어 매우 중요하다.
- 규격에 맞는 설계 구현
- 실제 프로젝트에서 Application Architecture 가 설계해놓은 추상 클래스를 상속받으면, 개발자는 프로젝트에서 필요하고 공통적으로 들어가야하는 필드와 메서드를 오버라이딩해서 큰 설계를 생각할 필요없이 구현하면 된다.
- 초기 설계 시간이 절약되고, 구현에만 집중할 수 있다.
- 공통 멤버의 통합으로 중복 제거, 코드 재사용성 증대 효과
정리
- 추상클래스를 상속받아서 미리 정의된 공통 기능들을 구현한다.
- 실체 클래스에서 필요한 기능들을 창의적이게 클래스별로 확장시킴으로써 소스 수정시 다른 소스에 적게 의존하면서, 변화에는 유연하게 만들 수 있다.
- 즉, 미리 규격에 맞게 소스가 구현되어 있기 때문에 해당 규격에 대한 구현부만 수정하면 손 쉽게 기능 수정이 가능하다.
인용
https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4Abstract-%EC%9A%A9%EB%8F%84-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
728x90
'Language > Java' 카테고리의 다른 글
예외 ( Exception ) (0) | 2023.03.01 |
---|---|
IllegalArgumentException, IllegalStateException (0) | 2023.02.26 |
DI(Dependent Injection) 이란? (0) | 2022.12.11 |
Assertion 메소드 공부 (0) | 2022.11.02 |
AssertJ 사용법 공부 (0) | 2022.11.02 |