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

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

사전 과제 제출 #25

Open Gyelanjjim opened 1 year ago

Gyelanjjim commented 1 year ago

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

// "SET name = '이름', num = 1234"

### 2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
1. 정의 : 코드의 구조를 더 체계적이고 효율적으로 구현하는 것
2. 핵심 : 
- 단방향 의존성 : 각각의 레이어는 오직 자기보다 하위의 레이어에만 의존한다.
- 관심사 분리(Seperation Of Concern, SOC) : 각 레이어 별 역할이 구분되어 명확하다. 역할의 중첩이 없다.
3. 장점 : 
- 확장성 : 각 레이어가 서로 독립적이고 역할이 분명하므로 서로에게 끼치는 영향을 최소화하면서 확장하거나 수정할 수 있다.
- 가독성 : 레이어가 완벽하게 분리되어 있고 역할이 명확하므로 가독성이 높아진다. 
코드 구조를 파악하기 쉽고 각 레이어의 코드의 목적이 명확하고 범위도 확실하기 때문이다.
- 재사용성 : 레이어가 독립적이므로 business layer는 여러 다른 presentation layer에 적용될 수 있다. 
- 테스트 가능성 : 레이어가 나뉘는 것처럼  각 레이어의 테스트 코드도 명확하게 나눌 수 있으며, 명확하고 범위가 확실한 기능만을 테스트하기 쉽다. 

### 3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
1. 개념
- 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴 
- 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 
런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다.

2. 필요성
- 서로 다른 클래스 간 강하게 결합되어 있는 경우 유연성이 떨어지는 문제점이 있는데
이를 해결하기 위해 필요하다

### 4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
```js
function solution(numbers) {
    return numbers.reduce((a, b)=> a+b, 0)/numbers.length
}

5. (코드 작성) 다음 스펙을 만족하는 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(e){
            reject(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초 뒤에 failed 로그
      .then((res) => console.log(res))
      .catch((e) => console.log(e));

결과값

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

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