목적

입사 초기 객체지향 설계를 사용하는 것에 의문이 있었습니다. 하지만 개발을 하며 객체지향 설계의 필요성을 공감하게 되었습니다. 그 중 추상 클래스에 대해 이야기 하고자 합니다.

추상클래스를 왜 쓰는 거지?

입사 초기 객체지향 설계가 적용된 코드를 보며 코드의 파악을 어렵게 한다 생각했습니다. 아래는 정답 제출 기능을 수정하기 위해 추상 클래스가 적용된 코드를 파악할 때 겪었던 어려움에 대한 예시입니다.

ViewComponent () {
  const handleSubmit () {
    gradebookController.postAnserStatement();
  } 
}

postAnserStatement 를 수정하기 위해 해당 메서드를 검색했을 때 나온 결과물은 아래와 같습니다.

export abstract class GradebookController {
  abstract postAnswerStatements(): Promise<void>;
}
export abstract class GradebookControllerWeb extends GradebookController {
  async postAnswerStatements(): Promise<void> {
    // 설명
  };
}
export class GradebookControllerUsb extends GradebookController {
  async postAnswerStatements(): Promise<void> {
    // 코드
  };
}
export class GradebookControllerOds extends GradebookController {
  async postAnswerStatements(): Promise<void> {
    // 코드
  };
}
class GradebookControllerLti extends GradebookControllerWeb {
  async postAnswerStatements(): Promise<void> {
    // 코드
  };
}
class GradebookControllerCes extends GradebookControllerWeb {
  async postAnswerStatements(): Promise<void> {
    // 코드
  };
}

Untitled

처음 이 코드를 봤던 제 머리속은 아래와 같았습니다.