본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 코드블락을 사용해 올려주세요
언어 상관없음
어떤 로직이든 상관없음
단, 길이가 길지 않은 함수 단위가 좋습니다
자동화 프로젝트에 사용했던 채점 코드입니다. NoSQL에서 받아온 json형태의 데이터를 정수 형태로 반환하는 함수입니다.
def scoring(standard_df, result):
if 'passed' in result['summary'].keys():
result['summary']['passed'] = int(result['summary']['passed'])
if result['summary']['passed'] >= standard_df['total'].values[0]:
return 3
elif result['summary']['passed'] < standard_df['total'].values[0] and result['summary']['passed'] >= standard_df['basic'].values[0]:
return 2
elif result['summary']['passed'] < standard_df['basic'].values[0]:
return 1
else:
return 0
Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
보편적인 레이어드 아키텍쳐 패턴은 4개의 레이어로 구성되어 있습니다. (Presentation, Business, Persistence, Database)
범위가 더 넓은 비즈니스를 위해서 Business layer와 Persistence layer 사이에 Service(or Application) layer가 추가될 수 있습니다.
Presentation Layer : UI, 브라우저에서의 유저와의 통신 로직을 다룹니다.
사용자와 상호 작용 처리
CLI, HTTP 요청, HTML 처리 등을 담당
HTTP 요청 처리 및 HTML 렌더링에 대한 웹 계층
MVC(Model, View, Controller)가 속하는 계층
Business(Domain) Layer : 요청에 따른 비즈니스 로직을 따릅니다.
서비스/시스템의 핵심로직
유효성 검사 및 계산을 포함하는 비즈니스 논리 계층
애플리케이션이 수행해야하는 도메인과 관련된 작업을 담당
입력/저장된 데이터를 기반으로 계산
Presentation 계층에서 받은 데이터의 유효성 검사
Data Access에 대한 선택을 담당
Persistence Layer : DAO(Data Access Object), ORM과 관련된 데이터베이스에 접근하여 데이터를 저장 및 수정하는 로직을 다룹니다.
DAO 계층이라고도 함
DB/MQ/외부 API와의 통신 등 처리하는 계층
DB 또는 원격 서비스에서 영구데이터를 관리하는 방법을 분류하는 데이터 접근 계층
Database Layer : 데이터가 저장되어있는 곳을 의미합니다.
장점
시스템 분석 용이
변화에 대한 영향력 한정할 수 있어서 코딩 또는 테스트를 계층별로 진행 가능
계층간 구조를 나누어 재사용성이 높음
단점
계층을 구분하기 어렵고 잘못 구분하는경우 수정이 빈번할 수 있음
설계 시 계층의 개수 및 규모를 정하기 어려움
Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴
인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도는 낮출 수 있게 함
강하게 결합 된 두 클래스의 경우 유연성이 떨어짐(생성자에 변경이 필요할 수도 있고, 상속에 의해 제약이 생기고 확장성이 떨어지는 경우가 생김)
두 객체 간의 결합도를 낮추고, 각 객체의 유연성을 높이며, 테스트 작성을 용이하게 하기위해 의존성 주입이 필요함
본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
import math
산술평균
def amean(x, y):
return (x + y) / 2
lambda x, y: (x + y) / 2
기하평균
def gmean(x, y):
return math.sqrt(x * y)
lambda x, y: math.sqrt(x * y)
조화평균
def hmean(x, y):
return 2 (x y) / (x + y)
lambda x, y: 2 (x y) / (x + y)
파이썬의 경우 def를 통해 함수를 직접 만들 수도 있고, lambda 함수를 사용하는 방법이 있습니다.
또한 map, filter, reduce라는 대표적인 고계함수를 사용하여 프로그래밍하는 방법이 있습니다.
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
type SomeFunctionReturnString = () => string;
function delay(
f: SomeFunctionReturnString,
seconds: number,
): Promise {
return new Promise((res, rej) => {
setTimeout(() => {
try {
res(f());
} catch (err) {
rej(err);
}
}, seconds * 1000);
});
// 해당 함수 내부를 구현해 주세요
}
자동화 프로젝트에 사용했던 채점 코드입니다. NoSQL에서 받아온 json형태의 데이터를 정수 형태로 반환하는 함수입니다.
Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
산술평균
def amean(x, y): return (x + y) / 2
lambda x, y: (x + y) / 2
기하평균
def gmean(x, y): return math.sqrt(x * y)
lambda x, y: math.sqrt(x * y)
조화평균
def hmean(x, y): return 2 (x y) / (x + y)
lambda x, y: 2 (x y) / (x + y)
type SomeFunctionReturnString = () => string; function delay( f: SomeFunctionReturnString, seconds: number, ): Promise {
return new Promise((res, rej) => {
setTimeout(() => {
try {
res(f());
} catch (err) {
rej(err);
}
}, seconds * 1000);
});
// 해당 함수 내부를 구현해 주세요
}
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 after 2 seconds successfully done Error: failed