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

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

사전과제 제출 #51

Open Ariyn opened 1 year ago

Ariyn commented 1 year ago
  1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요
func main() {
    flag.Parse()

    code, err := getCode(file)
    if err != nil {
        panic(err)
    }

    script, err := parse(code)
    if err != nil {
        panic(err)
    }

    fmt.Println(script)
}

최근 작성한 golang 코드인데, 간단히 파일을 읽고 파싱하는 코드입니다. 함수가 목적에 맞게 잘 분할된 것 같아서 좋아합니다.

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

business logic, presentation logic, law logic이 성격에 맞게 분리되는 구조를 의미하는 것 같습니다. 이경우 한 종류의 로직이 다른 로직들에 의존하지 안게 만드는 것이 목적으로, 손쉽게 다른 프레임워크등으로 교체할 수 있는것이 장점입니다.

특정 레이어의 코드를 수정할때도, 다른 코드에 영향을 받지 않고 수정할 수 있습니다.

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

기존의 코드는 자신이 어떤 dependency가 필요한지 기술 했습니다. 이렇다보니, 의존성을 바꿀때 많은 문제가 생깁니다. DI를 사용하면, 자신이 어떤 의존성을 가져야하는지가 아니라, 외부에서 주입받은 의존성을 사용합니다. 이경우 세세한 구현은 몰라도, 의존하는 기능을 사용할 수 있기 때문에, 객체지향의 DIP를 지킬 수 있습니다.

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

자주 사용하는 언어는 golang인데, 여기서는 함수형 프로그래밍이 어렵습니다. 개인적으로 사용하는 파이썬에서 본다면, First Citizen이라는점이 Functional 하다고 볼 수 있습니다.

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

function delay(f: SomeFunctionReturnString, seconds: number): Promise<string> {
    return new Promise<string>((resolve, reject) => {
        setTimeout(() => {
            try {
                resolve(f());
            } catch {
                reject(f());
            }
        }, 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. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요