728x90
추상 클래스를 가장 많이 쓰는 경우 : 템플릿 메소드 패턴
- when? controller를 만드는데 종류가 여러개인 상황
- recommend? 사용자는 무조건 초기화 -> 실행 -> 마무리의 순서로 작동시키기 원한다
- 사용자가 특정 메소드에 접근하지 않게 하여 controller 오작동을 막아야 한다
1,2번 : 종류가 여러개지만 작동 순서가 같은 controller의 structure
필수 작동 순서
초기화 - 같은 코드
실행 - 다른 코드
마무리 - 같은 코드
무조건 위와 같은 순서로 동작되는 controller 템플릿을 만든다
3번 : 사용자의 controller에 대한 메소드 접근을 제한시킨다
(최초부모클래스인) controller abstract class의 접근 제한자를 변경시킨다.
메소드를 선언할 때 public 대신에 protected를 사용한다. -> main 클래스(사용자가 이용하는) 의 특정 메소드 접근을 막는다
- protected를 사용하면 다른 패키지에 있는, 즉 main패키지에서 구동되는 main class들은 protected 메소드에 접근할 수 없다.
- 단, protected는 같은 package거나 상속받았을 경우(overiding을 위해) 접근이 가능하다
(프로그래머 입장) 자식 클래스를 생성하다가, 별도로 동작하면 안되는 메소드에 접근하는 실수를 막기 위해서는?
final을 붙여준다.
protected final void 메소드명()
오버라이딩을 하지 못하게 막는 것이다.
구현
Controller의 abstract 부모 클래스 생성
package com.example.fw;
public abstract class Controller {
// protected는 같은 package거나 상속받았을 경우 접근이 가능하다
protected final void init(){ // 오버라이딩 못하도록 final을 적어줌
System.out.println("초기화 하는 코드");
}
protected final void close(){
System.out.println("마무리 하는 코드");}
protected abstract void run(); //매번 다른 코드 - 강제로 오버라이딩 하게 만듦
// 내가 가지고 있는 메소드를 호출한다
// 어떤 순서를 가지고 있다.
// 이런 메소드를 템플릿 메소드 라고 한다.
public void execute(){ // 사용자가 호출할 수 있는 메소드
this.init();
this.run();
this.close();
}
}
https://soo324.com/entry/7-java-%ED%8C%A8%ED%82%A4%EC%A7%80
7. java 패키지
패키지 클래스는 패키지를 이용하여 관련된 클래스들을 관리한다. 자바에서 패키지는 폴더와 거의 같은 기능을 제공한다고 생각하면 된다. 클래스를 만들다보면 개수가 매우 많아진다. 클래스
soo324.com
protected, final 사용됨
첫번째종류 controller 생성
package com.example.myproject;
import com.example.fw.Controller;
public class FirstController extends Controller {
@Override
protected void run() { // 추상메소드는 오버라이드 해주어야 한다.
System.out.println("별도로 동작하는 코드 111111");
}
}
자식 메소드는 부모의 메소드를 overriding 가능하다. 단, 부모클래스에서 final 처리 된 것은 못 건드린다.
Controller main 구현
package com.example.main;
import com.example.fw.Controller;
import com.example.myproject.FirstController;
public class ControllerMain {
public static void main(String[] args){
Controller c1 = new FirstController();
c1.execute();
}
}
controller 사용자가 사용할 수 있는 것은 유일하게 public 메소드인 execute 메소드!
-> 요구사항 적용완료!
'프로그래밍 > java' 카테고리의 다른 글
13. 접근 제한자 (0) | 2023.09.06 |
---|---|
12. final 클래스, 불변객체 String (0) | 2023.09.06 |
9. java 생성자 (0) | 2023.05.11 |
8. java 상속, 오버라이딩, getter&setter (0) | 2023.04.10 |
7. java 패키지 (0) | 2023.04.10 |
댓글