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

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

사전 과제 제출 #12

Open ParkSangBong opened 1 year ago

ParkSangBong commented 1 year ago

사전과제

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

    • 언어 상관없음
    • 어떤 로직이든 상관없음
    • 단, 길이가 길지 않은 함수 단위가 좋습니다

    연습을 하며 문제를 풀 때 배열의 합을 구하는 과정이 필요한 곳이 많았는데 함수로 만들어 사용했었습니다. 그래서 간편했습니다.

function sumOfArray(arr) {
    let result = 0
    for (let i = 0; i < arr.length; i++) {
        result += arr[i]
    }
    return result
}
  1. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요 "n-계층 아키텍처" 라고도 불립니다. 계층 아키텍처는 소프트웨어 시스템이 여러 계층으로 구성되고 각 계층이 특정 목적을 수행하는 소프트웨어 설계 패턴입니다. 레이어는 일반적으로 계층 구조로 구성됩니다. 계층 아키텍처에서 계층을 구성하는 다양한 방식이 있지만 일반적인 방식은 다음과 같습니다.
    • presentation layer
    • business-logic layer
    • data-access layer
    • data-storage layer 계층 아키텍처의 주요 이점 중 하나는 관심사의 분리를 통해 시스템을 더 쉽게 유지보수 할 수 있게 됩니다. 또한 서로 다른 계층을 독립적으로 개발하고 테스트 할 수 있어 개발 프로세스가 보다 효율적이게 됩니다. 하지만 관리하고 통신하는 레이어가 많아지기 때문에 복잡성과 오버헤드가 추가로 발생할 수 있다는 단점도 있습니다.
  2. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요 클래스 또는 함수가 종속성을 직접 만들지 않고 외부 소스에서 받을 수 있도록 하는 소프트웨어 디자인 패턴입니다. 종속성은 기능을 수행하기 위해 클래스 또는 기능에 필요한 개체 또는 서비스입니다. 종속성 주입을 사용하는 이유는 소프트웨어 시스템의 다양한 구성 요소를 분리하여 수정 및 유지 관리를 더 쉽게 만드는 데 도움이 되기 때문입니다. 종속성을 클래스나 함수 내에서 만드는 대신 클래스나 함수에 주입하면 클래스나 함수가 더욱 모듈화되고 테스트하기 쉬워집니다.
    
    class UserService {
    constructor(repository) {
    this.repository = repository;
    }
    }

class UserRepository { constructor() { this.users = []; } }

const repository = new UserRepository(); const service = new UserService(repository);

위의 예제에서 UserService 클래스는 자체 생성이 아니라 생성자를 통해 저장소 종속성을 받습니다. 이를 통해 UserService 클래스는 UserRepository 클래스를 다양한 구현과 함께 사용할 수 있으므로 더 모듈화 되고 테스트 하기 쉽습니다.
종속성 주입은 생성자 주입, 세터 주입, 함수 주입 등 다양한 방법으로 구현이 가능합니다.
4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
    Javascript에서 함수형 프로그래밍의 몇 가지 일반적인 기능들
    일급함수, 고차함수, 순수함수가 있습니다. 
```js
// 두 숫자를 더하는 순수함수
function add(x, y) {
  return x + y;
}

// 함수와 값을 인자로 받는 고차 함수
// 항상 주어진 값을 반환하는 새 함수를 반환
function always(fn, value) {
  return function() {
    return value;
  }
}

// 항상 5를 반환하는 새 함수
const alwaysFive = always(add, 5);
  1. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)

    type SomeFunctionReturnString = () => string
    
    function delay(f: SomeFunctionReturnString, seconds: number): Promise<string> {
      return new Promise((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)
      .then((res) => console.log(res))
      .catch((e) => console.log(e));
    
    delay(fail, 2)
      .then((res) => console.log(res))
      .catch((e) => console.log(e));

    결과값

    $ ts-node delay.ts
    after 2 seconds
    successfully done
    Error: failed
  2. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요 다양한 것들을 많이 경험해보고 내가 정말 재미있어하는 것을 찾고 싶습니다. 잘 부탁드립니다!