입사 초기 객체지향 설계를 사용하는 것에 의문이 있었습니다. 하지만 개발을 하며 객체지향 설계의 필요성을 공감하게 되었습니다. 그 중 추상 클래스에 대해 이야기 하고자 합니다.
입사 초기 객체지향 설계가 적용된 코드를 보며 코드의 파악을 어렵게 한다 생각했습니다. 아래는 정답 제출 기능을 수정하기 위해 추상 클래스가 적용된 코드를 파악할 때 겪었던 어려움에 대한 예시입니다.
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> {
// 코드
};
}
처음 이 코드를 봤던 제 머리속은 아래와 같았습니다.