1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요
언어 상관없음
어떤 로직이든 상관없음
단, 길이가 길지 않은 함수 단위가 좋습니다
export function myPromiseAll(arr) {
if (!arr?.length) return Promise.reject('No promise!');
return new Promise((resolve, reject) => {
const data = [];
let pending = arr.length;
console.time('Async!');
arr.map((el, idx) =>
el(idx + 1)
.then((res) => {
data[idx] = res;
pending--;
if (pending === 0) {
resolve(data);
console.timeEnd('Async!');
}
})
.catch((err) => reject(err))
);
});
}
자바스크립트를 공부할 당시 자바스크립트 자체 내장 모듈들을 직접 구현해보며 공부했던 경험이 기억에 남습니다. Promise에 관한 온전한 이해가 쉽지 않았던 상황에서 해당 메소드 들을 구현해보며 Promise의 작동 방식에 대해 조금 더 이해할 수 있게 되었습니다.
2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
계층 아키텍처는 비지니스 로직과 UI로직을 분리하여 독립된 모듈로 나누어서 구성하는 API패턴입니다. 각각 역할에 따라 연결되어 전체의 시스템을 구현하는 아키텍쳐입니다. 일반적으로 Presentation layer, Business layer, Persistence layer로 구성되어 있으며 복잡하지 않고, 비용도 저렴하므로 소규모 프로젝트에 적합한 아키텍쳐라고 보여집니다.
3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
Dependency는 의존한다는 의미입니다.
예를 들어 A는 B에 의존하는 관계가 있다면, B가 변화할 시 A도 변화하기 마련입니다.
Dependency Injection이란 이러한 의존성을 클래스 내부에서 결정하는 것이 아니라 외부에서 사용자가 의존관계를 결정하고 주입하는 것을 의미합니다.
실제 코드에서는 의존관계를 인터페이스로 추상화 하여 외부에서 생성자를 통해 클래스 내부로 주입시키는 방식으로 진행됩니다.
이러한 DI가 필요한 이유는 인터페이스 추상화를 통해 진행되기 때문에 주입받는 대상이 변하더라도 코드 자체를 수정할 일이 줄어듭니다. 이를 통해서 의존성을 줄일 수 있습니다. 또한 클래스 분리가 쉬워지며 이로 인해 테스트하기가 용이해집니다.
4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
함수를 인수로 받을 수 있고, 함수의 반환 값으로써 사용할 수 있는 함수들을 고차 함수라고 부르며, Javascript에서 이를 지원하고 있습니다. 이를 바탕으로 콜백함수로 활용이 가능합니다. 또한 렉시컬 환경을 통해 클로저를 활용할 수 있으며 이를 통해서 순수 함수를 구현할 수도 있습니다.
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
프리온보딩을 진행하며 JS로 백엔드를 공부하는데에 도움이 될 만한 지식들을 얻어가고 싶습니다. 일급함수를 지원하는 JS의 이점을 살려 함수형 프로그래밍 또한 잘 사용할 수 있도록 학습하고 싶습니다. 추후 OOP와 FP를 잘 활용하여 유지보수하기 좋고 가독성이 좋은 코드를 작성하는 개발자로 성장하기 위한 조그마한 발판으로 삼고 싶습니다.
결과값
6. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요