개발 공부

추상클래스/템플릿 메서드 패턴 본문

JAVA/배운 후

추상클래스/템플릿 메서드 패턴

규율 위에 자유 2023. 5. 11. 12:40

추상클래스

 
추상클래스는 인스턴스가 될 수 없다.
추상클래스를 상속받는 자손이 인스턴스가 된다.
 
abstract 키워드를  사용하여 클래스를 정의한다.
추상클래스는 보통 1개 이상의 추상 메소드를 가진다.
(추상 메소드가 없어도 오류가 발생하진 않는다.)
publick abstract class 클래스명

 

부모가 가지고 있는 추상메소드는 자식에서 반드시 구현을 해줘야 한다.
 
템플릿 메서드 패턴

 

추상클래스가 많이 쓰이는 경우 중 하나가 템플릿 메서드 패턴
 
특징
 
어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴
 
즉, 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화 할 때 유용하다.
다른 관점에서 보면 동일한 기능을 상위 클래스에서 정의하면서 확장/변화가 필요한 부분만 서브 클래스에서 구현할 수 있도록 한다.
 
예를 들어, 전체적인 알고리즘은 상위 클래스에서 구현하면서 다른 부분은 하위 클래스에서 구현할 수 있도록 함으로써 전체적인 알고리즘 코드를 재사용하는 데 유용하도록 한다.
 
 
package com.example.util.fw;
/*
Controller의 종류는 여러개
초기화 -같은코드
실행 -다른코드
종료코드-같은코드
*/
public abstract class Controller {
//protected는 같은 패키지거나 상속받은(오버라이딩) 경우 접근 가능
/* public void init(){
System.out.println("초기화 코드");
}*/
protected final void init(){
System.out.println("초기화 코드");
}
protected final void close(){
System.out.println("마무리하는 코드");
}
/*public void close(){
System.out.println("마무리하는 코드");
}*/
protected abstract void run();// 매번 다른코드
 
//내가 가지고 있는 메소드 호출
//어떤 순서를 가지고 있다. = 템플릿 메소드
public void execute(){
this.init(); //this.생략가능
this.run();
this.close();
 
}
}
 
 
package com.example.util.myproject;
 
import com.example.util.fw.Controller;
 
public class FirstController extends Controller {
@Override
protected void run() {
System.out.println("나만 별도로 동작하는 코드 1111");
 
}
}
 
 
package com.example.util.main;
 
import com.example.util.fw.Controller;
import com.example.util.myproject.FirstController;
 
public class ControllerMain {
public static void main(String[] args) {
Controller c1 = new FirstController();
c1.execute();
}
}
 
출력값
초기화 코드
나만 별도로 동작하는 코드 1111
마무리하는 코드
 
public > protected 같은 패키지거나 상속받은(오버라이딩) 경우 접근 가능
abstract  반대인 기능 final (오버라이딩 금지 )

'JAVA > 배운 후' 카테고리의 다른 글

스캐너  (0) 2023.05.26
변수  (0) 2023.05.26
오버로딩 /오버라이딩  (0) 2023.05.04
자바 메모리 구조  (0) 2023.05.04
메소드3  (0) 2023.05.04