1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요
function HandleError() {
return function (target : any, propertyKey : string, descriptor : PropertyDescriptor){
console.log(target);
console.log(propertyKey);
console.log(descriptor);
const method = descriptor.value;
descriptor.value =function(){
try {
method();
}catch(e){
console.log(e);
}
}
}
}
class Greeter {
@HandleError()
hello(){
throw new Error("테스트 에러");
}
}
const t = new Greeter();
t.hello();
/* 기초적인 수준의 데커레이터지만 Typescript언어와 Nest.js 프레임워크를 처음 공부하고
데커레이터의 개념에 대해 이해하는데 오랜 시간이 걸렸는데,해당 메서드 데커레이터 코드를 직접 작성해보며
데커레이터의 의미와 활용법을 이해할 수 있게되어 공유하고 싶습니다.
*/
2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
코드의 구조를 더 체계적으로, 효율적으로 하기 위해 논리적, 기능적으로 영역을 구분하여 구현한 것을 코드의 아키텍처라고 합니다.
아키텍처는 확장성 , 재사용성, 유지 보수 가능성, 가독성, 테스트 가능성을 목표로 구조화 됩니다.
이를 구현하기 위해 코드가 주된 역할과 집중해야할 기능에 대해 분리한 뒤, 서로 다른 기능의 코드는 신경 쓰지 않도록 하는 Separation Of Concerns(관심사 분리) 가 이루어져야 합니다.
Layered Architecture(계층 아키텍처) 는 ****Multi-tier Architecture라고도 불리는, 백엔드 API에서 가장 널리 쓰이는 아키텍처 입니다.
가장 기초적인 레이어드 아키텍처는 일반적으로 Presentation Layer, Business Layer, Persistence Layer 로 ****구현됩니다.
Presentation Layer는 해당 시스템을 사용하는 사용자 혹은 클라이언트 시스템과 직접적으로 연결되는 부분입니다.
Business Layer는 이름 그대로 비즈니스 로직을 구현하는 부분입니다.
Persistence Layer는 데이터베이스와 관련된 로직을 구현하는 부분입니다.
레이어드 아키텍처는 단방향 의존성(각각의 레이어는 오직 자신보다 하위에 있는 레이어에만 의존하는 성질)과 관심사의 분리를 통해 아키텍처의 목표를 구현할 수 있습니다.
3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
의존성 주입은 디자인 패턴의 한 종류로 두 객체 간의 의존 관계에서 오는 문제점을 해결하기 위한 것입니다.
의존 대상 B가 변하면, A에 영향을 미칠때 A와 B는 의존 관계에 있다고 정의합니다.
의존 관계가 복잡하게 얽혀있는 코드에서는 에러가 발생 시 원인을 찾거나 해결하는 것이 어렵기 때문에 코드의 품질과 안정성을 해치게 됩니다.
클래스 외부에서 객체를 생성하여 내부에 주입하는 의존성 주입을 통해 의존 관계를 느슨하고 유연하게 만들어 이러한 문제를 해결할 수 있습니다.
4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
지금까지 가장 많이 사용했던 Javascript를 통해 함수형 프로그래밍을 구현해 보고자 합니다.
Javascript의 대표적인 함수형 프로그래밍 메서드인 map을 통해 list 배열 내의 이름을 파스칼 케이스로 변환한 뒤 오름차순으로 정렬해 보겠습니다.
let list = ["kim eungsoo","jo joonhyoung","jo kyungchan","jeoung dayoung"]
let firstCase = (sting) =>{
return string.chatAt(0).toUpperCase() + string.slice(1)
}
let lastCase = (string) =>{
return string.split(' ').map(firstCase).join(' ')
}
list
.maps(string => firstCase(string))
.maps(string => lastCast(string))
.sort()
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
기존 자바스크립트 언어와 Express 프레임워크 환경으로 절차 지향적인 코드를 작성해왔던 주니어 개발자로서 이번 챌린지는 새로운 경험이면서도 동시에 대조적인 두 언어와 환경, 지향점의 특성과 장단점을 대조적으로 비교 분석하고, 상황에 따라 적절한 개발 도구를 선택하여 활용할 수 있는 기회라고 생각합니다. 챌린지의 1차적인 목표는 취업이지만 한층 더 높은 수준의 개발자로 성장하기 위한 기회라고 생각하고 완주해보겠습니다.
1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요
2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
6. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요