Open ktk8916 opened 1 year ago
단, 길이가 길지 않은 함수 단위가 좋습니다
공유하고 싶은 코드는 없습니다.
코드의 유지보수나, 확장의 용이성을 위하여 관심사별로 계층을 분리하는 아키텍처입니다. 주로 Presentation Layer, Business Layer, Persistence Layer, Database Layer등으로 구성합니다.
책임을 나눠 코드를 작성하다 보면 코드 간의 의존관계가 생기게 됩니다. DI는 의존관계를 직접 작성하는 것이 아닌 런타임 시점에 외부에서(스프링 컨테이너, 네스트 프로바이더 등등..) 결정하고 주입해주는 것입니다.
코드로서 의존관계를 모두 선언한다는 것은 각 코드들이 강하게 결합되어 있다는 뜻이고, 이는 유지보수의 큰 걸림돌이 됩니다. 또, 객체지향 설계 원칙 중 OCP와 DIP를 지키는 좋은 방법이 됩니다.
### 4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
명령형으로 for, if등을 사용하는 것이 아닌 자료의 흐름에 따라 선언형으로 코드를 작성하는 것입니다. JS에서는 함수가 1급 객체이기에 함수를 인자로 사용할 수 있습니다.
const pow = n => nn; const arr = [1, 2, 3, 4, 5]; console.log(arr.map((i)=> ii)); console.log(arr.map((i)=> pow(i)));
### 5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
type SomeFunctionReturnString = () => string
function delay(f: SomeFunctionReturnString, seconds: number): Promise { 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 successfully done failed
### 6. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요
흔히 함수형이라고 하면 JAVA에 Stream API와 JS에 map, filter, reduce 등등.. 순회에 관련된 것 이상으로는 생각하기 어렵습니다. 이번 강의를 통해 함수형 패러다임을 더 깊게 이해하고 싶습니다. ``
1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요
단, 길이가 길지 않은 함수 단위가 좋습니다
2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
코드로서 의존관계를 모두 선언한다는 것은 각 코드들이 강하게 결합되어 있다는 뜻이고, 이는 유지보수의 큰 걸림돌이 됩니다. 또, 객체지향 설계 원칙 중 OCP와 DIP를 지키는 좋은 방법이 됩니다.
명령형으로 for, if등을 사용하는 것이 아닌 자료의 흐름에 따라 선언형으로 코드를 작성하는 것입니다. JS에서는 함수가 1급 객체이기에 함수를 인자로 사용할 수 있습니다.
const pow = n => nn; const arr = [1, 2, 3, 4, 5]; console.log(arr.map((i)=> ii)); console.log(arr.map((i)=> pow(i)));
type SomeFunctionReturnString = () => string
function delay(f: SomeFunctionReturnString, seconds: number): Promise {
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));
흔히 함수형이라고 하면 JAVA에 Stream API와 JS에 map, filter, reduce 등등.. 순회에 관련된 것 이상으로는 생각하기 어렵습니다. 이번 강의를 통해 함수형 패러다임을 더 깊게 이해하고 싶습니다. ``