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

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

사전과제 제출 python #37

Open Goodsma opened 1 year ago

Goodsma commented 1 year ago

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

백준 2133번 타일채우기 답 / 친구가 못풀었는데 나는 풀어서 보면 기분이 좋아지는 코드 입니다.

def n_cases(n):

    if n % 2 != 0 :
        return 0

    else : 
      k = n//2
      answer = [3]
      for i in range(1,k):
          answer.append( answer[i-1] * 3 + sum(answer[0:i-1]) * 2 +2 )
      return answer[-1]%1000000007

2.소프트웨어에 포함된 개체들은 서로 얽히고설켜 있습니다.

하나의 개체를 변경하면 연결된 개체들에 연쇄적으로 영향을 줍니다. 소프트웨어 구조를 주기적으로 변경할 필요가 있는데 아키텍처가 잘 짜여 있으면 소프트웨어 변경을 쉽게 할 수 있어 유지보수하기 수월해집니다. 또한 요구사항에 빠르게 대응할 수 있고 테스트도 빠르게 할 수 있게 됩니다. 아키텍처를 관리하지 않으면 시간이 지날수록 기능을 추가하기 힘들어집니다. 기존 소스 코드를 바꾸는 데 시간이 많이 들기 때문입니다.

계층형 아키텍처(Layered Architecture)는 다음과 같은 계층 구조를 갖습니다. User Interface

User Interface management Authentication and authorization

Core business logic/application functionality System utilities

System support(OS, database etc)

각각의 레이어는 특정 서비스를 제공하도록 구성되어 있으며 같은 목적의 코드들을 모아두어 코드들의 관심사를 분리합니다. 각각의 레이어 사이에는 인터페이스가 있으며 바로 아래 레이어는 바로 위 레이어에 서비스를 제공합니다.

다음과 같은 장단점이 있습니다. 장점 : 인터페이스를 동일하게 유지하면 하나의 계층을 새로운 구현으로 대체할 수 있습니다. 단점 : 계층적으로 명백하게 구분하는 작업이 보통 어렵습니다.

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

business logic과 인프라스트럭처 사이에 무수한 의존성이 존재합니다. 인프라스트럭처의 변경에 business logic이 영향을 받습니다. business logic을 이러한 변경으로부터 분리해 보호해야 합니다. 이때 의존성 주입(Dependency Injection 이하 DI)을 통해 이를 달성할 수 있습니다.

의존성 주입이란 클래스에 대한 의존성의 인터페이스 화를 통한 코드 유연성 증대 + 클래스의 인스턴스를 외부에서 생성하여 주입하는 것을 뜻합니다.

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

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

type SomeFunctionReturnString = () => string

function delay(f: SomeFunctionReturnString, seconds: number): Promise<string> {
    // 해당 함수 내부를 구현해 주세요
};

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. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요

백엔드가 뭔지 감을 잡고 싶습니다.