본문 바로가기

전체 글54

[ch.13] 비동기 작업 동기 & 비동기동기(Synchronous)작업을 순차적으로 수행하며, 하나의 작업이 완료된 후에 다음 작업을 시작할 수 있다.호출한 작업이 완료될 때까지 호출자는 대기 상태에 있다.작업의 결과를 즉시 반환받는다.비동기(Asynchronous)작업의 완료 여부와 관계없이 다음 작업을 시작하는 방식이다.작업의 완료를 콜백이나 이벤트를 통해 알림 받는다.동기와 비동기는 데이터의 순서와 결과 처리에 관점을 둔다. Blocking자신의 작업을 진행하다가 다른 주체의 작업이 시작되면, 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작한다. Non-Blocking다른 주체의 작업에 관련없이자신의 작업을 하는 것Blocking과 Non-Blocking은 작업 제어에 관점을 둔다. Sync-Blocking: 메인 .. 2024. 8. 2.
[ch.12] 재귀 함수가 자기 자신을 호출하는 프로그래밍 기법으로문제를 작은 하위 문제들로 나누어 해결하는 데 유용하며,반복적으로 동일한 작업을 수행해야 하는 경우 사용된다. 재귀의 기본 구조기본 사례 (Base Case) : 재귀 호출을 멈추는 조건으로, 기본 사례가 없으면 재귀 호출이 무한 반복될 수 있다.재귀 사례 (Recursive Case) : 함수가 자기 자신을 호출하는 부분이다. 이 부분에서 문제를 더 작은 부분으로 나눌 수 있다.public class FactorialEx { public static void main(String[] args) { int number = 5; int result = factorial(number); System.out.println.. 2024. 7. 20.
[ch.11] 느긋한 계산법 (지연 평가) 느긋함(Laziness) & 엄격함(Strictness)엄격한 계산은 변수 선언, 값 할당, 표현식을 인수로 넘길 때 발생한다.느긋한 계산은 표현식의 결과가 실제로 필요한 시점에 발생한다.표현식의 생성과 사용이 분리되어 있다. // JSfunction add(x, y) { return x + x;}// 느긋한 계산var result = add(5, 1/0); // 10// Javaint add(int x, int y) { return x + x;}// 엄격한 계산int result = add(5, 1 / 0); // ArithmeticException자바는 엄격한 언어의 특성상 표현식을 즉시 계산한다.0을 나눌 수 없기 때문에 ArithmeticException이 발생한다.엄격한 언어인 자바에.. 2024. 7. 11.
[ch.10] 예외 처리 현재까지 접한 프로젝트에서 어떻게 예외를 처리하고 있는 지 살펴봤다.// 잘못된 값이 넘어왔거나 값이 없을 때if (param == null) { throw new xxxException("F", "값을 다시 확인해주세요.");}// DB 조회 시 결과 데이터가 없을 때if (list == null || list.size() == 0) { throw new xxxException("데이터가 없습니다.");}// api 통신 예외 처리if (...) { throw new xxxException(ErroCode.XXX.getCode()); // E.200.x }// if/else 지옥을 어떻게 마무리해야할 지 모를 때if (...) { // ...} else if (...) { .. 2024. 7. 4.
[ch.09] Optional을 사용한 null 처리 null 참조의 문제null 참조는 단순히 `값이 없는 상태`가 아니다.실제 타입과 관계없이 `어떠한 객체 참조와도 호환되는 일반화된 타입`이다.값이 할당되지 않을 경우 기본값으로 null을 갖게 되며, null 참조에 접근하면 NullPointException이 발생한다.null을 처리하지 않으면 해당 스레드는 중단된다.표면적으로 null 값을 처리할 수 있더라도, 올바른 결과를 보장하기 위해선 반드시 null 여부를 확인해야 한다. 어떠한 객체 참조와도 호환되기 때문에 구체적인 타입이 없어도 모든 타입을 대표할 수 있다. -> `타입 모호성` null 처리 방법Optional을 사용해 쉽게 null 처리가 가능하지만 코드 전체에서 null을 관리하기 위한 완벽한 해결책은 아니다.   Optional .. 2024. 6. 27.
[ch.08] 스트림을 활용한 병렬 데이터 처리 동시성 & 병렬성1. 동시성여러 작업이 중복되는 시간 동안 한정된 리소스에 대한 경쟁을 하면서 실행되는 것을 의미실제로 작업이 동시에 실행되지는 않지만 단일 CPU 코어에서는 작업 간 전환이 빨라 동시에 실행되는 것처럼 보인다.동시성은 I/O 작업을 처리할 때 효율적인데, I/O 요청 후 응답까지의 대기 시간(CPU 대기 시간) 중에 다른 작업을 처리할 수 있기 때문이다.하지만 여러 작업을 동시에 수행하므로 `경합 상태`, `데드락`, `기아` 등의 동기화 문제가 발생할 수 있다.2. 병렬성중첩된 작업들을 관리하는 것이 아닌, 작업들이 `동시에 실행`되는 것에 중점을 둔다.여러 개의 CPU 코어를 사용할 수 있는 경우 각각의 작업들은 서로 다른 코어에서 병렬로 실행될 수 있다.병렬성은 CPU 바운드 작업.. 2024. 6. 20.