반응형

2021/06 6

[코틀린 프로그래밍] Chapter.15 코루틴 탐험하기

이번 글에서는 코루틴의 기본에 대해 작성하고 코루틴을 순차적으로 또는 동시성으로 실행하는 방법을 알아보고 스레드와 코르틴의 관계를 이해하고 스레드 실행의 제어와 코루틴을 디버깅하는 법을 작성하겠습니다. 코루틴과 동시 실행 코루틴은 모든 경우에 사용되는 것은 아닙니다. 로직에 있어 순차적 로직이 필수적일 경우에는 코루틴은 비효율적입니다. 코루틴의 동시 실행은 병령 실행과 다릅니다. 병렬 실행과 동시실행의 차이점을 명확히 이해하여야합니다. 왜냐하면 머맅 코어 프로세서의 멀티 스레드는 일반적으로 병렬로 실행되고 코루틴은 일반적으로 병렬실행보다는 동시실행에 더 많이 사용됩니다. 병렬 vs 동시성 하나의 예를 들어보겠습니다. 사람1이 사람2에게 말을 하고 있습니다. 사람1은 말을 하고 사람2는 말을 듣습니다. 이..

Study/kotlin 2021.06.22

[Post] application/x-www-form-urlencoded 데이터 받는 방법, inputStream 주의

프로젝트를 진행하던 중 개인인증 관련하여 외부연동하던 중 발생했던 이슈를 정리해보겠습니다. Callback 을 전송하는 타입은 아래와 같습니다. Method : Post Content-Type: application/x-www-form-urlencoded 대부분은 Post 일 경우는 RequestBody로 데이터를 전달받습니다. (application/json) 하지만 위와 같이 content-type이 application/x-www-form-urlencoded 일 경우 Body로 데이터가 전달되지 않습니다. 그리하여 @RequestBody가 아닌 @RequestParam 이나 @ModelAttribute로 받아야합니다. @RequestParam으로 받을 경우 Controller에 파라미터별로 설정을 ..

Daily Develop 2021.06.18

[코틀린 프로그래밍] Chapter.14 재귀 프로그래밍과 메모이제이션 프로그래밍

이번 챕터에서는 재귀 프로그래밍에 대해서 작성해보겠습니다. 재귀는 쿨한 프로그래밍 기법이지만 잘못 사용한다면 런타임 스택 오버플로에 빠져서 효율성이 떨어지는 문제가 있습니다. 꼬리호출 최적화라고 불리는 테크닉을 이용하면 이 문제를 해결할 수 있습니다. 데이터를 저장하는 알고리즘을 사용하면 성능은 향상됩니다. 코틀린은 빌트인 메모이제이션을 지원해주지는 않지만 지금까지 배운 기술들을 사용하면 표현력이 강한 메모이제이션 기능을 쉽게 만들 수 있습니다. 재귀의 강점과 위험성 재귀를 사용하면 분할정복기법을 사용할 수 있습니다. 예제로 살펴보자. // 분할정복기법 문제를 해결할 때 문제를 작게 쪼개서 각 부분의 솔루션을 구현한 후 각 결과를 합쳐서 해결하는 기법 fun sort(numbers: List): List..

Study/kotlin 2021.06.16

MongoDB 특징과 쉘 사용에 대해서 알아보자 - 1

이 글은 몽고의 특징과 쉘 사용법에 대해서 작성할 글입니다. 2개의 글로 작성되있습니다. 다음글 : MongoDB 특징과 쉘 사용에 대해서 알아보자 - 2 글의 내용이 많으므로 찾으시는 목차를 검색하여 글에서 검색하면 빠르게 찾으실 수 있습니다. 목차 find find(), findOne() findOneAndUpdate() update updateOne(), updateMany() $set 제한자 갱신 연산자($inc) 배열 연산자($push) $push에 $each 제한자 $push에 $slice $sort 제한자를 $push 작업에 적용 배열을 집합으로 사용하기($ne) 요소 제거 배열의 위치 기반 변경 배열 필터를 이용한 갱신 갱신 입력 $setOnInsert 다중 도큐먼트 갱신 갱신한 도큐먼트 ..

Study 2021.06.08

[코틀린 프로그래밍] Chapter.13 내부 DSL 만들기

DSL은 도메인 특화언어입니다. ( Domain-Specific languages ) DSL은 에러를 줄이는데 도움을 주는 동시에 프로그래머에게 유연성을 제공합니다. 이번 글에서는 DSL을 설계하는 방법에 대해서 작성해보겠습니다. DSL의 타입과 특징 외부 DSL vs 내부 DSL 외부 DSL은 높은 자유도를 얻을 수 있지만 DSL을 파싱하고 처리할 파서를 만들어야만 합니다. 파서를 만드는 데는 많은 리소스가 필요합니다. 외부 DSL의 예로는 CSS, ANT 빌드파일, Make 빌드파일 등이 있습니다. 하지만 이번 글에서는 내부 DSL에 초점을 맞출 것입니다. 내부 DSL을 위한 코틀린 DSL을 디자인할 때 도움이 되어줄 코틀린의 기능을 살펴보겠습니다. 생략 가능한 세미콜론 코틀린은 세미콜론을 강요하지 ..

Study/kotlin 2021.06.07

[코틀린 프로그래밍] Chapter.12 코틀린에서 구현하는 유창성

먼저 정리하기에 앞서 이 책에서 가장 기억에 남는 문장 "죄송합니다. 편지를 짧게 쓸 여유가 없어서 길게 씁니다" - 블레즈 파스칼 - 개발을 하면 위 문장이 어떤 의미인지 이해할 수 있을 것입니다. 중복 코드 제거, 하나의 클래스 혹은 메서드에 모든 로직을 다 작성, 이중 삼중 if문(for문) 등등 다양한 이유로 코드는 길어집니다. 하지만 고민과 시간을 들이면 코드는 점점 줄어들 것 입니다. 이번 장에서는 어떻게 코틀린 코드를 잘 쓰고, 표현력 있게 쓰고 간결하게 쓰는 지를 작성할 것입니다. 연산자 오버로딩 코틀린은 연산자를 오버로딩하여 사용할 수 있습니다. 즉 기능을 확장시킬 수 있습니다. 예제를 살펴보겠습니다. val one = BigInteger("1") val two = BigInteger("..

Study/kotlin 2021.06.01
728x90
반응형