### 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
}
정수 배열numbers를 입력받아 요소들의 평균을 반환하는 함수입니다
함수형 프로그래밍의 핵심 개념의 하나로서, 입출력이 순수한 순수함수의 특징이 있습니다
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요
// "SET name = '이름', num = 1234"
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
결과값
6. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요