#추상메서드(abstract method)
#추상클래스(abstract class)
#추상클래스를 사용하는 이유?
#훅(Hook)메서드
#추상 클래스와 템플릿 메서드 패턴
#final 예약어는 언제 사용하는가?
자식 클래스에서 반드시 오버라이딩 해야 사용할 수 있는 메소드를 의미
선언부만 존재하며 구현부는 작성되지 않는다 → 작성되지 않은 구현부를 자식클래스에서 오버라이딩하여 사용
→ 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함
ex) 모듈처럼 중복되는 부분이나 공통적인 부분은 미리 다 만들어진 것을 사용하고, 이를 받아 사용하는 쪽에서 자신에게 필요한 부분만 재정의해 사용함으로 생상성 향상과 배포 용이
abstract 반환타입 메소드이름();
선언부만 있고 구현부가 없다는 의미로 선언부 끝에 바로 세미콜론(;) 추가
하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스라고 한다
추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 함
즉, 반드시 사용되어야 하는 메소드를 추상클래스에 추상메소드로 선언해 놓으면 이 클래스를 상속받는 모든 클래스에서는 이 추상메소드를 반드시 재정의해야 한다
abstract class 클래스이름 {
...
abstract 반환타입 메소드이름();
...
}
추상 클래스는 동작이 정의되어 있지 않은 추상 메소드를 포함하고 있으므로, 인스턴스를 생성할 수 없다
추상 클래스는 먼저 상속을 통해 자식 클래스를 만들고, 만든 자식 클래스에서 추상 클래스의 모든 추상 메소드를 오버라이딩하고 나서야 비로소 자식 클래스의 인스턴스를 생성할 수 있다
즉, 생성자와 필드, 일반 메소드도 포함할 수 있습니다.
자식 클래스에서 추상메소드를 반드시 구현하도록 강요하기 위해서
상속받은 자식 클래스에서는 메소드들이 완전히 구현된 것으로 인식하고 오버라이딩하지 않을 수 있기 때문이다
(추상 클래스로 객체를 생성하려면 자식 클래스를 작성해야 하며 추상메소드들을 오버라이딩해야 한다)
이는 추상 클래스를 사용해 유지보수의 편의성을 높이기 위함이고 최소한의 수정으로 원하는 객체를 사용할 수 있게 되어 유지보수성이 좋아진다
어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴
-장점
코드 중복 감소
자식 클래스의 영할을 감소시키면서 핵심 로직 관리 용이
객체 추가 및 확장 쉽게 가능
-단점
추상메소드가 많아지면 클래스 관리가 복잡
추삭클래스와 구현클래스간 복잡성 증대
AbstractClass
ConcreteClass
hook메서드
- 선택적으로 오버라이딩할 수 있는 메서드
위키백과에서 설명하는 final (Java) 정의와 예제는 다음과 같다.
the final keyword is used in several contexts to define an entity that can only be assigned once.
final 키워드는 엔티티를 한 번만 할당합니다. 즉, 두 번 이상 할당하려 할 때 컴파일 오류가 발생하여 확인이 가능합니다.
☝ Java에서의 final은 Immutable/Read-only 속성을 선언하는 지시어입니다. **클래스, 함수, 변수가 변하지 못하도록 의도하고 싶다면 final로 선언하자.**썸네일: oneook