전체 글

안녕하세요 💻
· Skils/Kotlin
이전 글[코루틴의 정석] - 예외 전파 제한(Chapter 8-1)[코루틴의 정석] 구조화된 동시성(Chapter7)[코루틴의 정석] async와 Deferred(Chapter5)[코루틴의 정석] 코루틴 빌더와 Job(Chapter4-2)[코루틴의 정석] 코루틴 빌더와 Job(Chapter4-1)[코루틴의 정석] CoroutineDispatcher(Chapter3)[코루틴의 정석] 스레드 기반 작업의 한계와 코루틴의 등장(Chapter1) 개요이전 글에서는 코루틴이 어떻게 예외를 전파하고, 또 그 예외 전파를 어떻게 방지할 수 있는지에 대해 적어봤습니다.이번 글에서는 이렇게 전파된 에러를 어떻게 처리하는지, 그리고 코루틴은 어떠한 에러 처리 방법을 제공하는지 적어보겠습니다.  CoroutineExcept..
누적합이란?누적합(Prefix Sum)은 배열이나 리스트에서 특정 구간의 합을 빠르게 계산하기 위해 사용하는 알고리즘 기법입니다.일반적으로 입력 배열의 첫 번째 원소부터 특정 위치까지의 합을 저장한 배열을 말하며, 사용됩니다.즉, 배열의 원소들을 더한 중간 결과를 미리 저장함으로써, 반복 계산을 최소화하고 효율성을 높입니다. 예시 그림을 살펴보면 이해가 쉬울 것입니다.  입력으로 [2,4,6,8,10] 이라는 배열이 주어진다면, 누적합은 위와 같이 구할 수 있습니다. 그렇다면 왜 누적합을 사용해야 할까요? 누적합을 사용하는 이유효율적인 구간 합 계산일반적으로 배열에서 특정 구간의 합을 구하려면, 해당 구간의 원소를 하나씩 더해야 합니다.이 경우 시간복잡도는 구간의 길이인 O(n)이 됩니다.하지만 누적합 ..
· Skils/Kotlin
이전 글[코루틴의 정석] 구조화된 동시성(Chapter7)[코루틴의 정석] async와 Deferred(Chapter5)[코루틴의 정석] 코루틴 빌더와 Job(Chapter4-2)[코루틴의 정석] 코루틴 빌더와 Job(Chapter4-1)[코루틴의 정석] CoroutineDispatcher(Chapter3)[코루틴의 정석] 스레드 기반 작업의 한계와 코루틴의 등장(Chapter1)  개요우리가 사용하고, 개발하는 애플리케이션은 여러 상황에서 에러에 노출됩니다. 예외가 발생했을 때 예외가 적절히 처리되지 않으면 예측하지 못한 방향으로 동작하거나 비정상 종료될 수 있습니다.따라서 안정적인 애플리케이션을 위해선 예외를 적절하게 처리하는 것이 중요합니다. 같은 맥락에서 비동기 작업을 수행하는 코루틴의 예외 처리..
· Skils/Kotlin
이전 글 [코루틴의 정석] async와 Deferred(Chapter5)[코루틴의 정석] 코루틴 빌더와 Job(Chapter4-2)[코루틴의 정석] 코루틴 빌더와 Job(Chapter4-1)[코루틴의 정석] CoroutineDispatcher(Chapter3)[코루틴의 정석] 스레드 기반 작업의 한계와 코루틴의 등장(Chapter1) 개요구조화된 동시성의 원칙이란 비동기 작업을 구조화함으로써 비동기 프로그래밍을 보다 안정적이고 예측 가능할 수 있게 만드는 원칙이다.코루틴은 부모-자식 관계로 구조화함으로써 보다 안전하게 관리되고 제어될 수 있도록 한다. 코루틴을 부모-자식 관계로 구조화하는 방법은 간단하다.부모 코루틴을 만드는 코루틴 빌더의 람다식 속에서 새로운 코루틴 빌더를 호출하면 된다.fun main..
생성패턴팩토리 메서드 패턴은 생성 패턴에 속해 있다.기존 코드의 유연성과 재사용을 증가시키는 다양한 객체 생성 메커니즘들을 제공팩토리 메서드문제물류 관리 앱을 개발하는 상황을 예로 들어보겠습니다.초기 버전에서는 트럭(Truck) 운송만 지원하며, 대부분의 코드는 Truck 클래스에 의존합니다.이후 해상 물류 기능이 요구되면서 Ship 클래스를 추가해야 하지만, 기존 코드가 Truck 클래스와 강하게 결합되어 있어 수정이 어렵습니다.새로운 운송이 추가될 때마다 조건문과 코드 수정이 반복되어 코드가 복잡해지고 유지보수가 어려워집니다.이러한 문제점을 해결하기 위해 팩토리 메서드를 사용합니다.의도팩토리 메서드 패턴은 부모 클래스에서 객체를 생성할 수 있는 인터페이스를 제공하면서, 자식 클래스가 생성되는 객체의 ..
23년도에 네이버 부스트캠프에서는 좋은 동료들과 저 자신의 "성장"을 위해 달렸다면, 24년도에 싸피에서 저 자신에 대한 "증명"을 위해 달렸던 것 같습니다.  싸피 지원싸피 지원 단계에서는 크게 준비를 하지 않았던 것 같습니다.네이버 부스트캠프,  우테코 프리코스, 학업을 모두 병행하다 보니 싸피의 우선순위는 후순위로 생각했던 것 같습니다.지금 와서 생각해 보면 동시에 여러 개를 잡으려고 하다 보니, 온전하게 하나에 집중하지 못한 것이 마음에 걸리네요. 코딩테스트는 프로젝트 준비 때문에 준비를 하지 못했고, 언어 이슈로 한문제를 풀지 못했었습니다.문제 난이도가 쉬웠던 탓에 탈락을 예상했지만, 합격을 해서 조금 놀랐었습니다..ㅎ(입과 후 동기들에게 물어보니 대부분 2문제를 풀었더라고요) 이후, 면접 준비..
디자인 패턴디자인 패턴은 개발하면서 발생하는 반복적인 문제들을 어떻게 해결할 것인지에 대한 해결 방안으로 실제 현업에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 모범 사례다. 디자인 패턴은 객체 지향 4대 특성(캡슐화,상속,추상화,다형성)과 설계 원칙(SOLID)을 기반으로 구현되어 있다. 패턴은 알고리즘과 자주 혼동된다. 왜냐하면 두 개념 모두 알려진 문제에 대한 일반적인 해결책을 설명하고 있기 때문이다.알고리즘은 어떤 목표를 달성하기 위해 따라야 할 명확한 일련의 절차를 정의패턴은 해결책에 대한 더 상위 수준의 설명알고리즘은 요리법에 비유할 수 있지만 패턴은 요리법이 아닌 청사진에 더 가깝다. 알고리즘과 요리법 둘 다 목표를 달성하기 위한 명확..
· Skils/Kotlin
이전 글[코루틴의 정석] 코루틴 빌더와 Job(Chapter4-2)[코루틴의 정석] 코루틴 빌더와 Job(Chapter4-1)[코루틴의 정석] CoroutineDispatcher(Chapter3)[코루틴의 정석] 스레드 기반 작업의 한계와 코루틴의 등장(Chapter1)개요launch 코루틴 빌더를 통해 생성되는 코루틴은 기본적으로 작업의 결과를 반환하지 않는다.코루틴으로부터 결과를 수신해야 하는 상황이 생길 것이다. 예를 들어 네트워크 통신 이후, 응답을 받아 처리해야 할 경우 네트워크 통신을 실행하는 코루틴으로부터 결과를 수신받아야 한다. 코루틴 라이브러리는 비동기 작업으로부터 결과를 수신해야 하는 경우를 위해 async 코루틴 빌더를 통해 코루틴으로부터 결괏값을 수신받을 수 있도록 한다.launch..
· Skils/Kotlin
이전 글[코루틴의 정석] 코루틴 빌더와 Job(Chapter4-1)[코루틴의 정석] CoroutineDispatcher(Chapter3)[코루틴의 정석] 스레드 기반 작업의 한계와 코루틴의 등장(Chapter1)코루틴의 취소 확인cancel 함수나, cancelAndJoin 함수는 코루틴을 즉시 취소하는 것이 아닌 취소 요청을 보내는 함수이다. 취소 요청을 받은 코루틴이 요청을 확인하는 시점에 비로소 취소가 된다. 만약 코루틴이 취소 요청을 확인하지 않는다면 영원히 취소되지 않는다.그렇다면 이 코루틴들은 언제 취소를 확인할까? 코루틴이 취소를 확인하는 시점은 일반적으로 일시 중단 지점이나 코루틴이 실행을 대기하는 시점이며, 이 시점들이 없다면 코루틴은 취소되지 않는다.fun main(): Unit = r..
재한
짜이한