Jun4928 / wanted-pre-onboarding-challenge-BE-task-JAN.2023

JAN.2023 wanted 프리온보딩 챌린지 BE 사전과제
29 stars 36 forks source link

사전과제 제출 #48

Closed tsCalm closed 1 year ago

tsCalm commented 1 year ago
  1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요 언어 상관없음 어떤 로직이든 상관없음 단, 길이가 길지 않은 함수 단위가 좋습니다 해당 code block 에 올려주세요
export class BaseService<T> {
  constructor() {}
  resObj(data: T): IResObj<T> {
    return new IResObj(200, false, 'success', data);
  }

  resBoolean(data: boolean): IResObj<boolean> {
    return new IResObj(200, false, 'success', data);
  }

  resNumber(data: number): IResObj<number> {
    return new IResObj(200, false, 'success', data);
  }

  resList(data: any): IResObjList<T> {
    return new IResObjList(200, false, 'success', data);
  }

  resError(message: string): IError {
    return new IError(HttpStatus.BAD_REQUEST, message);
  }

  objValidate(obj: T): void {
    if (!obj) throw new Error('findedObj not found');
  }

}

-> 모든 서비스 레이어에서 사용될 수 있는 기본적인 응답 형태의 함수들을 모아놓은 클래스입니다.

  1. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요

-> 리퀘스트에 대한 역할을 분리하여 각각의 레이어는 맡은 바 일에 대한 책임을 다 하는 것입니다. 일반적으로 presentation, business, persistence, data 레이어로 구성되어 있습니다. presentation: http 통신에 관한 요청에 대한 응답을 담당합니다. business: 비즈니스 로직이 주로 위치합니다. persistence: 데이터베이스 접근을 담당합니다. data: 데이터베이스

  1. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요

->

개념: 추상화된 객체를 외부에서 주입합니다. 필요한 이유 : 여러 클래스에 의존하는 A클래스에서 의존하는 클래스를 생성한 후 문제를 해결하는 경우 비슷한 코드의 중복과 코드가 길어지는 경우가 많아 불핋요한 비용이 발생합니다. A클래스에서 필요한 객체를 외부에서 주입하도록하여 A클래스의 코드에서 발생하는 비용을 줄일 수 있습니다.

  1. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요

-> 이번 강의를 통해서 배워보겠습니다.

  1. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용) type SomeFunctionReturnString = () => string
type SomeFunctionReturnString = () => string;
  function delay(
    f: SomeFunctionReturnString,
    seconds: number,
  ): Promise<string> {
    return new Promise((res, rej) => {
      setTimeout(() => {
        try {
          res(f());
        } catch (err) {
          rej(err);
        }
      }, seconds * 1000);
    });
    // 해당 함수 내부를 구현해 주세요
  }

  const success = () => {
    return 'successfully done';
  };

  const fail = () => {
    throw new Error('failed');
  };

  delay(success, 2) // 2초 뒤에 successfully done 로그
    .then((res) => console.log(res))
    .catch((e) => console.log(e));

  delay(fail, 2) // 2초 뒤에 failed 로그
    .then((res) => console.log(res))
    .catch((e) => console.log(e));
결과값

    $ ts-node delay.ts
    successfully done
    Error: failed
  1. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요