본문 바로가기
728x90

전체 글252

7장 - 코루틴 컨텍스트 코루틴 컨텍스트 코루틴의 동작과 관련된 여러 설정을 담고 있는 정보의 집합. 코루틴의 실행 스레드, 코루틴의 이름, 사용할 디스패처와 같은 정보를 포함할 수 있다. 코틀린에서는 코루틴컨텍스트 인터페이스를 통해 관리한다. 확장함수: 기존 클래스에 새로운 메서드를 추가할 수 있는 코틀린 기능 코루틴의 launch 함수는 CoroutineScope 인터페이스의 확장 함수로 정의되어 있습니다. 이는 CoroutineScope 인스턴스에 대해 launch 함수를 호출할 수 있다는 의미. 리시버: 확장 함수가 호출되는 대상 객체를 리시버 라고 한다. this 참조: 확장함수 내부에서는 리시버 객체를 this 키워드를 사용하여 참조할 수 있다. key를 통한 Element 식별 코루틴 컨텍스트 내의 각 Element.. 2024. 1. 29.
6장 - 코루틴 빌더 launch 빌더 launch 빌더는 새로운 코루틴을 시작하고, 결과를 반환하지 않습니다(Unit을 반환). 주로 병렬 작업을 수행할 때 사용하며, 작업이 완료될 때까지 기다리지 않습니다. launch로 시작된 코루틴은 부모 코루틴의 생명주기에 연결되어 부모가 취소되면 자식도 취소됩니다. runBlocking 빌더 runBlocking은 현재 스레드를 블록하고 코루틴이 완료될 때까지 기다립니다. 주로 테스트나 메인 함수에서 코루틴 코드를 실행하기 위해 사용됩니다. runBlocking 내부에서는 다른 코루틴을 시작할 수 있으며, 내부 코루틴이 모두 완료될 때까지 기다립니다. async 빌더 async 빌더는 코루틴을 시작하고 Deferred 타입의 결과를 반환합니다. 반환된 Deferred 객체를 통해 .. 2024. 1. 29.
4장 - 코루틴의 실제 구현 중단 함수는 함수가 시작할 때와 중단 함수가 호출되었을 때 상태를 가진다는 점에서 상태 머신과 비슷합니다. 상태머신: 코루틴의 실행 과정은 내부적으로 상태 머신으로 변환됩니다.코루틴은 여러 상태(예: 시작, 중단, 재개, 완료)를 가질 수 있으며, 이러한 상태는 코루틴의 생명주기를 관리 한다. 컨티뉴에이션 객체는 상태를 나타내는 숫자와 로컬 데이터를 가지고 있다. 함수의 컨티뉴에이션 객체가 이 함수를 부르는 다른 함수의 컨티뉴에이션 객체를 장식합니다. 그 결과, 모든 컨티뉴에이션 객체는 실행을 재개하거나 재개된 함수를 완료할 때 사용되는 콜 스택으로 사용됩니다. 컨디뉴에이션 전달 방식 중단 함수가 구현될 수 있는 수많은 방법 중에서 코틀린 팀은 컨티뉴에이션 전달 방식을 택함. 컨티뉴에이션은 코루틴이 중단.. 2024. 1. 14.
3장 - 중단은 어떻게 작동할까? 중단 함수는 코틀린 코루틴의 핵심이다. 코루틴은 중단되었을 때 Continuation 객체를 반환한다. 중단했을 때 어떤 자원도 사용하지 않는다 실행이 중지 되어있을 때 스레드를 차지하지 않아 다른 작업에 스레드를 할당할 수 있다는 뜻. delay - 중단 코루틴의 실행을 지정된 시간 동안 일시적으로 중단하는 데 사용된다. delay(timeInMillis) 함수는 매개변수(ms) 단위로 현재 코루틴을 중단하며 시간이 지나면 자동으로 다시 시작된다. 비블로킹 특성을 가진다. 스레드를 차단하지 않는다. 코루틴은 일시 중단되지만, 그 로쿠틴이 실행되고 있던 스레드는 다른 작업을 계속 수행할 수 있다. 지정된 시간이 지난 후에는 중단되었던 지점에서 실행을 재개하는데, 이과정은 코루틴의 컨티뉴에이션 매커니즘을 .. 2024. 1. 13.
2장 - 시퀀스 빌더 코틀린 시퀀스는 데이터를 연속적으로 처리하는 데 사용되는 컬렉션 타입 중 하나 요구되는 연산을 최소한으로 수행 무한정이 될 수 있음 메모리 사용이 효율 시퀀스 좀 알고 갈까 리스트를 사용할 경우 val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val result = mutableListOf() for (number in numbers) { if (number % 2 == 0) { val squared = number * number result.add(squared) } } println(result) // [4, 16, 36, 64, 100] 위 코드는 리스트를 사용하여 짝수를 찾고 제곱한 값을 구합니다. 중간 결과를 담을 result 리스트를 생성하고, 반.. 2024. 1. 13.
1장 - 코틀린 코루틴을 배워야 하는 이유 스레드 사용의 비용: 스레드를 사용하는 데는 자원이 많이 소모된다. 스레드는 운영 체제 수준에서 관리되며, 스레드를 생성하고 관리하는 데 필요한 오버헤드가 존재한다. 자바에서 Thread.sleep의 비용: Thread.sleep() 을 사용하면 해당 스레드는 정해진 시간 동안 실행을 멈추고 다른 스레드가 실행될 수 있게 한다. 이 과정에서도 스레드는 계속 자원을 점유하고 있으며, 컨텍스트 스위칭에도 비용이 발생한다. 코루틴의 중단과 재개: 코루틴은 스레드와 다르게 작동한다. 필요에 따라 실행을 중단(suspend)하고, 재개(resume)할 수 있다. 이 과정에서 코루틴은 스데르를 잠들게 하지 않고, 실행 중인 스레드를 활용하여 다른 작업으로 전환할 수 있다. 이러한 특성으로 인하여 컨텍스트 비용을 줄.. 2024. 1. 13.
개발자를 위한 레디스 - 1 String 키:값 저장시 string 512MB 의 문자열 데이터를 저장할 . 수있으며, 이진 데이터를 포함하는 모든 종류의 문자열이 binary-safe 하게 처리되기 때문에 JPEG 이미지와 같은 바이트 값, HTTP 응답값 등의 다양한 데이터를 저장하는 것도 가능. binary-safe 문자열이란? 데이터 손실없이 null 바이트를 포함한 모든 바이트 시퀀스를 저장, 처리 조작할 수 있는 문자열 처리 방식이다. text, number, binary data 등을 인코딩 걱정 없이 저장할 수 있다는 것을 얘기 list list 에는 최대 42억여 개의 아이템을 저장할 수 있다. sorted Set 스코어에 따라 정렬되는 고유한 문자열의 집합 list 와 sorted set 모두 순서를 갖는 자료 구.. 2023. 11. 28.
from 메서드 to 메서드 from 메서드명: from 메서드명은 일반적으로 DTO에서 도메인 객체로 변환하는 메서드에 사용됩니다. DTO는 데이터 전송을 위해 사용되는 객체이므로, DTO로부터 도메인 객체로 데이터를 매핑할 때 from 메서드를 사용합니다. 예를 들어, UserDTO에서 User 도메인 객체로 변환하는 메서드를 작성할 때 from 메서드명을 사용할 수 있습니다: User.fromDTO(userDTO). to 메서드명: to 메서드명은 일반적으로 도메인 객체에서 DTO로 변환하는 메서드에 사용됩니다. 도메인 객체는 비즈니스 로직을 담고 있으므로, 도메인 객체의 데이터를 DTO로 변환하여 외부로 노출할 때 to 메서드를 사용합니다. 예를 들어, User 도메인 객체에서 UserDTO로 변환하는 메서드를 작성할 때 t.. 2023. 8. 6.
개념 SUT System under test (테스트 하려는 대상) BDD Behaviour driven dvelopment(given - when - then) 테스트를 하려는 순간 어디에 어떻게 넣어야 하지 라는 질문을 마주하게 됩니다. 그때 BDD 가 말한다 "행동에 집중해야 한다" 유저가 시스템을 사용하는 user story 를 강조하고 시나리오를 강조한다. 이를 지키기 위한 뼈대로 다음과 같은 구조로 테스트코드를 추천한다. given - 어떤 상황이 주어졌을 떄 when - 이 행동을 한다면 then - 결과는 이렇다 3A 라고 불리기도 함. 상호 작용 테스트 (Interation test) 대상 함수의 구현을 호출하지 않으면서 그 함수가 어떻게 호출되는지를 검증하는 기법(메서드가 실제로 호출됐는지 .. 2023. 7. 4.
728x90