polarHub25 / StudyLog

0 stars 1 forks source link

item19. 128p 클래스의 동작을 유지하면서 재정의 가능 메서드를 사용하는 코드를 제거할 수 있는 기계적인 방법 #26

Closed donghyeon3813 closed 2 months ago

donghyeon3813 commented 3 months ago

본문 코드를 private 도우미 메서드로 옮긴고 도우미 메서드를 호출하도록 수정한다 여기서 도우미 메서드라 함은 무엇을 말하는 것일까요?

polarHub25 commented 2 months ago

도우미 메서드는 상위 클래스의 중요한 로직을 보호하고 하위 클래스에서 상위클래스의 중요 로직을 변경하지 못하도록 하는 메소드입니다. 그리고 예시코드 같은 방식으로도 구현을 할 수 있지만, 다양한 방식으로 구현될 수 있습니다. 즉, 도우미 메소드는 상위 클래스의 일관된 동작을 유지하고, 하위 클래스에서 필요한 부분만 재정의할 수 있도록 하는 것입니다. 사용법이 정해진 것은 아니고, 설계 패턴중에 하나라고 이해하면 될거같습니다.

예제코드

public class HelperMethod {
    public static void main(String[] args) {
        DocumentProcessor processor = new CustomDocumentProcessor();
        processor.processDocument();
    }
}
class DocumentProcessor {
    // Public method defining the workflow
    public final void processDocument() {
        openDocument();
        prepareContent();
        executePrint();  // 도우미 메서드 호출
        closeDocument();
    }

    // Private helper methods to protect important logic
    private void openDocument() {
        System.out.println("Opening document...");
    }

    private void closeDocument() {
        System.out.println("Closing document...");
    }

    // Protected method to be overridden by subclasses
    protected void prepareContent() {
        System.out.println("Preparing content in superclass...");
    }

    // Private helper method calling the potentially overridden method
    private void executePrint() {
        printContent();  // 하위 클래스에서 재정의될 수 있는 메서드 호출
    }

    // Method to be overridden by subclasses
    protected void printContent() {
        System.out.println("Printing content in superclass...");
    }
}

class CustomDocumentProcessor extends DocumentProcessor {
    @Override
    protected void prepareContent() {
        System.out.println("Preparing custom content...");
    }

    @Override
    protected void printContent() {
        System.out.println("Printing custom content...");
    }
}