체인의정석

객체지향 프로그래밍 하기 - 모듈 구현 기준 본문

개발

객체지향 프로그래밍 하기 - 모듈 구현 기준

체인의정석 2021. 7. 15. 16:47
728x90
반응형

객체 지향 프로그래밍을 한다는 것은 해당 클래스 내에서는 해당 클래스 안의 함수만 실행하는 것. 하위 단계의 클래스에 잇는 함수는 하위 단계에서 정의가 되어야 한다. 처음에 프로그램을 짰을 때 하위 클래스를 모두 만들고 해당 클래스를 모두 가져와서 사용하는 모듈을 짜는 식으로 프로그래밍을 하였다. 하지만 이는 객체 지향 프로그래밍과 가깝지 않으므로 하위 단계에 모든 기능을 구현하고 상위에서는 하위 단계의 기능을 가져와서 쓰기만 하는 식으로 코딩을 바꿔서 다시 하였다.

 

마찬가지로 클래스 nested 형태로 만들 때 Common이라는 공통 클래스를 만들어서 상속을 시켰는데 이는 나중에 모듈을 사용할 때 공통적으로 쓰이는 부분을 추가할 수도 있기 때문에 지금 당장은 사용하지 않더라고 넣어 달라는 피드백을 받았다.

 

특히 모듈 형태로 프로그램을 만들어야 하므로 사용자들이 사용할 수 있는 방향을 최대한 열어주어야 한다. 

 

현재 모듈에서는 객체 형태를 받아와서 클래스를 생성해주는 역할을 했지만, 더 나아가서 api로 주고 받을 수 있게 json 형태로 바꾸고 다시 클래스로 변환해 주는 모듈이 모든 하위 클래스에도 모두 구현이 되는 식으로 프로그램을 수정 중이다. 따라서 다음과 같은 common class를 두고 상속받는 식으로 다시 재구성하고 있다.

export class Common {
  toJson(input) {
    const result = JSON.stringify(input);

    return result;
  }

  fromJson() {}

  validate() {}
}
export interface LegalPersonNameIDType {
  legalPersonName: string;
  legalPersonNameIdentifierType: string;
}

export class LegalPersonNameID extends Common {
  protected legalPersonName: string;
  protected legalPersonNameIdentifierType: LegalPersonNameTypeCode;

  constructor(lLegalPersonNameIDType: LegalPersonNameIDType) {
    super();
    this.legalPersonName = lLegalPersonNameIDType.legalPersonName;
    if (lLegalPersonNameIDType.legalPersonNameIdentifierType) {
      this.legalPersonNameIdentifierType = toLegalPersonNameTypeCode(
        lLegalPersonNameIDType.legalPersonNameIdentifierType,
      );
    }
  }

  static fromJson(json) {
    return new LegalPersonNameID({
      legalPersonName: json.legalPersonName,
      legalPersonNameIdentifierType: json.legalPersonNameIdentifierType,
    });
  }
}

interface에서는 stirng으로 받고 이를 constructor에서 enum type으로 고쳐주므로서 json형태에서 JSON.parse 이후에 자바스크립트 객체 형태에서 바로 type 객체를 생성할 수 있었다.

728x90
반응형
Comments