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

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

사전과제 제출 #46

Open Seoya0512 opened 1 year ago

Seoya0512 commented 1 year ago

1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요

const raiseCustomError = (message, statusCode) => {
  const err = new Error(message);
  err.statusCode = statusCode;
  throw err;
};

// 사용 예시 
if (!total_price || orderInfo.length === 0) {
    raiseCustomError("BAD_REQUEST", 400);
  }

customError가 발생했을 때, 에러 메세지를 반환해 주는 함수 입니다. 다양한 경우의 수를 고려해서 에러 핸들링을 해야하는데, 이 때 이를 모듈화해 사용하면 간결한 코드를 완성할 수 있어서 좋았습니다.

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

구성 요소들이 수평적인 레이어로 조직화되어 있는 다층 구조 입니다. 모든 구성요소가 연결되어 있지만 분리되어있고 총 4개의 계층이 있습니다. 각각의 계층(레이어)는 하위에 있는 레이어에만 의존하는 단방향 의존성 특징을띄고 있습니다.

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

클래스간 의존성을 클래스 외부에서 주입하는 것을 의미하며 객체가 의존하는 또 다른 객체를 외부에서 선언하고 이를 주입받아 사용하는 것입니다. 이를 사용하는 이유는,

  1. 의존성이 줄어든다 : 서로 의존성이 강한 객체 중 하나가 변화하게 되면 그 의존대상의 변화에 취약하다. DI를 통한 코드 구현은 이 부분을 보완해준다.
  2. 재사용성이 높은 코드 : 각각의 요소를 분리해서 재사용 할 수 있다.
  3. 테스트 하기 좋은 코드 : 각각의 객체를 분리해서 테스트할 수 있다.
  4. 가독성이 높아진다 : 기능들을 별도로 분리하게 되어 가독성이 높아진다.

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

이번 기간을 통해 함수형 프로그래밍을 더욱 잘 활용할 수 있길 기대해 봅니다 : )

5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)

type SomeFunctionReturnString = () => string

function delay(f: SomeFunctionReturnString, seconds: number): Promise<string> {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      try{
        resolve(f());
      } catch(err) {
        reject(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

6. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요

과제를 수행하면서 아직 배워가야하는 것들이 많다는 생각이 들었습니다. 해당 기간을 통해 함수형 프로그래밍 과 더 좋은 코드가 무엇인지 고민하며 성장해가고 싶습니다.