애플리케이션을 계층별로 나누는 코드 작성 방식이다.
여러 가지 방식이 있지만 핵심은 코드를 최대한 분리해 개방폐쇄원칙을 지키려 하는 것이다.
예컨데 어떤 엔터프라이즈 서비스 아키텍처가
Presentation - Domain - Data Access - Data로 이루어져 있다고 하면
Presentation : http 리퀘스트와 리스폰스와 같이 클라이언트의 정보 교환을 담당한다.
Domain : 애플리케이션의 핵심 로직
Data Access : Dao라고도 하는 이것은 Data에 저장하고 불러오는 역할을 담당한다.
Data : db, file system 등으로 실질적으로 데이터를 저장하는 역할을 담당한다.
3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
의존성 주입은 의존 객체 주입이라고도 하며, 컴파일 타임이 아닌 런타임에 어떤 오브젝트가 어떤 오브젝트를 사용할지를 결정해 주는 것이다.
의존성 주입을 하면서 얻는 이점은 오브젝트가 자신이 사용하고자 하는 다른 오브젝트의 생성과정에 대해 알 필요가 없다는 점이다.
덕분에 의존성 주입을 받은 오브젝트들은 객체의 사용에 초점을 두고 작성할 수 있고,
의존성 주입을 해주는 오브젝트로 각종 오브젝트의 연관관계를 따로 관리할 수 있게 된다.
이렇게 역할을 분리하는 것은 리팩토링의 핵심으로, 코드를 수정할때 적은 부분만 수정할 수 있게 해주며 기능을 확장할 때도 적은 변경이 동반된다.
4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
자바에는 Stream<T> 클래스로 함수형을 적극적으로 지원하고 있다.
이전 버전과의 호환 문제 때문에 Collection -> Stream이나 배열 -> Stream이 다소 귀찮은 점은 있지만, 여전히 강력한 기능으로 자리잡았다.
Stream에는 filter, reduce, map, count, forEach 등의 기능을 지원하며
IntStream같은 기본형 전용 클래스를 사용하면 max, min, sum, avg 같은 기능도 지원한다.
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요
우아한 테크코스를 지원할때 제출했던 과제에서 가져온 코드입니다.
void -> T 형태의 람다식을 받아 예외가 터지지 않을때까지 다시 받아오는 기능입니다.
자바로 람다식을 처음으로 의미있게 써본 경험이 떠올라 공유합니다.
2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
애플리케이션을 계층별로 나누는 코드 작성 방식이다.
여러 가지 방식이 있지만 핵심은 코드를 최대한 분리해 개방폐쇄원칙을 지키려 하는 것이다.
예컨데 어떤 엔터프라이즈 서비스 아키텍처가
Presentation - Domain - Data Access - Data로 이루어져 있다고 하면
3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
의존성 주입은 의존 객체 주입이라고도 하며, 컴파일 타임이 아닌 런타임에 어떤 오브젝트가 어떤 오브젝트를 사용할지를 결정해 주는 것이다.
의존성 주입을 하면서 얻는 이점은 오브젝트가 자신이 사용하고자 하는 다른 오브젝트의 생성과정에 대해 알 필요가 없다는 점이다.
덕분에 의존성 주입을 받은 오브젝트들은 객체의 사용에 초점을 두고 작성할 수 있고,
의존성 주입을 해주는 오브젝트로 각종 오브젝트의 연관관계를 따로 관리할 수 있게 된다.
이렇게 역할을 분리하는 것은 리팩토링의 핵심으로, 코드를 수정할때 적은 부분만 수정할 수 있게 해주며 기능을 확장할 때도 적은 변경이 동반된다.
4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
자바에는
Stream<T>
클래스로 함수형을 적극적으로 지원하고 있다.이전 버전과의 호환 문제 때문에 Collection -> Stream이나 배열 -> Stream이 다소 귀찮은 점은 있지만, 여전히 강력한 기능으로 자리잡았다.
Stream에는 filter, reduce, map, count, forEach 등의 기능을 지원하며
IntStream같은 기본형 전용 클래스를 사용하면 max, min, sum, avg 같은 기능도 지원한다.
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
결과값
6. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요"
자바스크립트를 쓰며 함수형 프로그래밍을 언젠가 써본 경험은 있었지만, 실제로 자바에서 함수형 프로그래밍을 본격적으로 접해보았다.
이번 강의를 통해서 함수형 프로그래밍의 개념에 대해 더 꼼꼼히 배우고,
원리나 JS에서는 어떻게 사용하는지에 대해 배우고 싶다.