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

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

사전과제 제출 #22

Open Last-SilverLight-End opened 1 year ago

Last-SilverLight-End commented 1 year ago

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

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

프로그래밍 개발에서 많이 채택 되는 아키텍처. 
다른 계층에서 발생하는 문제나 알고리즘들은 굳이 신경 쓸 필요 X . 
 그러다 보니 유지보수와 테스팅이 쉬운게 장점. 
총 4개의 계층으로 나누어서 진행 

- Presentation Layer 
- Business Layer
- Persistence Layer
- Database Layer

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

의존성 주입 개념
- 외부에서 두 객체 간 관계 결정해주는 디자인 패턴이다.
- 직접적으로 작성하는게 아닌 외부 의존관계에서 런타임 시 관계를 동적으로 주입해 주는걸 뜻한다.

의존성 왜 필요한가?
- 각 코드들이 강하게 결합되어 있을 경우 제약이 많아지고 확장성이 떨어진다.
- 의존성 주입을 하여 결합도를 낮추고 객체의 유연성을 높일 수 있기 때문

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

함수형 프로그래밍 정의
- 대입문을 사용하지 않는 프로그래밍, 문제 해결을 위한 작은 함수를 작성하는 뜻
let grade = [80,70,90,85,100]

grade.filter((value) => value>=90);
grade.sort(fun(a,b) {
    return a-b;
});
grade.map((value) => value *2);

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

type SomeFunctionReturnString = () => string
function delay(f: SomeFunctionReturnString, seconds: number): Promise<string> {
  // 해당 함수 내부를 구현해 주세요
  return new Promise<string>((sucess, fails) => {

    setTimeout(() => {    
      try {
        sucess(f())
    } catch(e){
      fails(e);
    }
  } , 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초 뒤에 successfully done 로그
  .then((res) => console.log(res))
  .catch((e) => console.log(e));

결과값

    $ ts-node delay.ts
    successfully done
    Error: failed

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

이번 프리온 보딩 백엔드를 하면서 제가 가지고 있던 프론트 지식에 더불어 백으로 데이터 베이스를 연동하는 프로젝트를 진행하고 있습니다. 또한 그동안 기능성만 중시하였다면 가독성과 유지보수를 쉽게 하기 위한 노력의 발판으로 삼아 앞으로 나아가고 싶습니다.