전체 글 2524

[Kotlin] 구조화된 동시성

구조화된 동시성의 원칙비동기 작업을 구조화함으로써 비동기 프로그래밍을 보다 안정적이고 예측할 수 있게 만드는 원칙코루틴은 구조화된 동시성의 원칙을 사용해 비동기 작업인 코루틴을 부모-자식 관계로 구조화함으로써 코루틴이 보다 안전하게 관리되고 제어하도록 지원부모 코루틴을 만드는 코루틴 빌더의 람다식 속에서 새로운 코루틴 빌더를 호출하면 코루틴을 부모-자식 관계로 구조화할 수 있음 구조화된 코루틴의 특징부모 코루틴의 실행 환경이 자식 코루틴에게 상속됨작업을 제어하는 데 사용됨부모 코루틴이 취소되면 자식 코루틴도 취소됨부모 코루틴은 자식 코루틴이 완료될 때까지 대기CoroutineScope를 사용해 코루틴이 실행되는 범위를 제한 가능 실행 환경 상속 1. 부모 코루틴의 실행 환경 상속부모 코루틴은 자식 코루틴..

[Kotlin] CoroutineContext 정리

서론대표적인 코루틴 빌더 함수인 launch와 async의 코드를 보면 다음과 같습니다.  위 코드 스니펫에서 볼 수 있다시피 launch와 async 함수는 매개변수로 context, start, block을 가집니다.context의 타입은 CoroutineContextstart의 타입은 CoroutineStartlaunch 함수의 block은 Unit을 반환하는 람다식async 함수의 block은 제네릭 타입 T를 반환하는 람다식 CoroutineContext는 코루틴을 실행하는 실행 환경을 설정하고 관리하는 인터페이스로 CoroutineContext 객체는 다음의 객체들을 조합해 코루틴의 실행 환경을 설정합니다.CoroutineDispatcherCoroutineNameJobetc. 정리하자면 Cor..

[Kotlin] async와 Deferred

서론launc 코루틴 빌더를 통해 생성되는 코루틴은 기본적으로 작업 실행 후 결과를 반환하지 않지만async 코루틴 빌더를 통해 생성된 코루틴으로부터 결괏값을 수신받을 수 있음async 함수를 사용하면 결괏값이 있는 코루틴 객체인 Deferred가 반환됨Deferred 객체를 통해 코루틴으로부터 결괏값을 수신할 수 있음 async 사용해 결괏값 수신하기 1. async 사용해 Deferred 생성하기async 함수는 launch 함수와 유사하지만 다음과 같은 차이점이 존재함launch는 코루틴이 결괏값을 직접 반환할 수 없기 때문에 Job 객체를 반환async는 코루틴의 결괏값을 직접 반환하고 결괏값을 담아 반환하기 위해 Deferred 타입의 객체를 반환 * Deferred는 Job과 같이 코루틴을 추..

[Kotlin] 코루틴 빌더와 Job 정리

코루틴 빌더와 Job 객체 개요코루틴을 생성하는 데 사용하는 함수ex) runBlocking, launch 모든 코루틴 빌더 함수는 코루틴을 만들고 코루틴을 추상화한 Job 객체를 생성코루틴은 일시 중단할 수 있는 작업으로 실행 도중 일시 중단된 후 이후 이어서 실행될 수 있음코루틴을 추상화한 Job 객체는 이에 대응해 코루틴을 제어할 수 있는 함수와 코루틴의 상태를 나타내는 상태 값들을 외부에 노출시킴   부연 설명launch 함수 호출 시 코루틴 생성Job 객체가 생성되고 반환되는 것을 확인 가능 join을 사용한 코루틴 순차 처리Job 객체는 순차 처리가 필요한 상황을 위해 join 함수를 제공join 함수를 통해 먼저 처리되어야 하는 코루틴의 실행이 완료될 때까지 호출부의 코루틴을 일시 중단하도록..

[Programmers] 행렬과 연산

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/118670 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 2 * 50,000과 같은 케이스가 있기 때문에 이차원 배열을 선언하고 문제에서 주어진 대로 정직하게 구현하면 TLE가 발생하는 문제였습니다.덱을 이용해야한다는 것은 알았는데 Rotate 연산을 어떻게 최적화시켜야 할까 고민하다가 바킹독님 해설을 보고 풀 수 있었습니다. 이 문제의 핵심은 1열과 마지막 열을 별도 Deque으로 분리하고 나머지는 각 행을 기준으로 Deque을 선언해 주는 것입니다.위와 같이 처리해주면 Shif..

[Kotlin] CoroutineDispatcher 정리

Dispatcher란?dispatch와 -er의 합성어dispatch의 `보내다`라는 뜻에 -er이 붙어 `무언가를 보내는 주체`라는 뜻 CoroutineDispatcher`코루틴을 보내는 주체`코루틴은 일시 중단이 가능한 `작업`이기 때문에 쓰레드가 있어야 실행될 수 있음CoroutineDispatcher는 코루틴을 쓰레드로 보내 실행시키는 역할코루틴을 쓰레드로 보내는 데 사용할 수 있는 쓰레드나 쓰레드 풀 가짐코루틴을 실행 요청한 쓰레드에서 코루틴이 실행되도록 만들 수 있음 CoroutineDispatcher 동작 과정CoroutineDispatcher 객체에 코루틴의 실행이 요청됨CoroutineDispatcher 객체는 실행 요청받은 코루틴을 작업 대기열에 적재시킴CoroutineDispatche..

[Programmers] 올바른 괄호의 갯수

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/12929 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 올바른 괄호 문자열의 개수를 구하기 위해 카탈랑 수(Catalan Number)를 구해주면 되는 문제였습니다.점화식은 다음과 같습니다.   개발환경: Programmers IDE   지적, 조언, 질문 환영합니다! 질문 남겨주세요~

백준 1017번 소수 쌍

문제 링크입니다: https://www.acmicpc.net/problem/1017 소수 관련된 문제이므로 에라토스테네스의 체와 이분 매칭을 통해 풀 수 있는 문제였습니다.저도 처음에 백트래킹으로 접근했다가 TLE가 발생했던 문제입니다 ㅠ 알고리즘은 다음과 같습니다.1. nums[0]과 합쳤을 때 소수를 이루는 nums[i]를 매칭합니다.2. 남은 수들로 이분 그래프를 만드는데 왼쪽 집합은 홀수인 수들, 오른쪽 집합은 짝수인 수들로 구성하며 간선은 두 수의 합이 소수일 때 연결시킵니다.3. 이분 그래프에서 최대 매칭을 찾아서 모든 노드가 매칭에 포함되는지 확인합니다.3.1 매칭의 크기가 남은 노드의 절반이라면 모든 수를 짝지을 수 있다는 의미입니다.  개발환경:Visual Studio 2017 지적, 조..

알고리즘/BOJ 2024.10.30

Microsoft AZ-104 간단 후기

회사가 MS와 MOU를 체결한 후, AZ 자격증을 취득하면 포상을 준다는 소식을 듣고 AZ-104 시험에 응시했습니다.1주 반 동안 공부한 끝에 운 좋게 합격할 수 있었습니다.  문제 유형응시 날짜마다 다른 것 같은데 저 같은 경우 50문제가 출제되었고, 문제는 다섯 개의 도메인에 다음과 같이 분포되어 있습니다.Azure ID 및 거버넌스 관리 (15~20%)스토리지 구현 및 관리 (15~20%)Azure 컴퓨팅 리소스 배포 및 관리 (20~25%)가상 네트워킹 구현 및 관리 (20~25%)Azure 리소스 모니터링 및 유지 관리 (10~15%) 문제 난이도AWS Practitioner와 마찬가지로 모두 객관식으로 구성되어 있지만, 상대적으로 난이도는 더 높았습니다.AWS Practitioner는 키워드..

[DEV] 기록 2024.10.28

[Programmers] 충돌위험 찾기

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/340211 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 경로 길이가 최대 100이므로 O(N^2)으로도 수월하게 풀 수 있는 구현 문제였습니다.  개발환경: Programmers IDE   지적, 조언, 질문 환영합니다! 질문 남겨주세요~