[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이 발생한다.엄격한 언어인 자바에..
[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 (...) { ..
[ch.09] Optional을 사용한 null 처리
·
함수형 프로그래밍
null 참조의 문제null 참조는 단순히 `값이 없는 상태`가 아니다.실제 타입과 관계없이 `어떠한 객체 참조와도 호환되는 일반화된 타입`이다.값이 할당되지 않을 경우 기본값으로 null을 갖게 되며, null 참조에 접근하면 NullPointException이 발생한다.null을 처리하지 않으면 해당 스레드는 중단된다.표면적으로 null 값을 처리할 수 있더라도, 올바른 결과를 보장하기 위해선 반드시 null 여부를 확인해야 한다. 어떠한 객체 참조와도 호환되기 때문에 구체적인 타입이 없어도 모든 타입을 대표할 수 있다. -> `타입 모호성` null 처리 방법Optional을 사용해 쉽게 null 처리가 가능하지만 코드 전체에서 null을 관리하기 위한 완벽한 해결책은 아니다.   Optional ..
[ch.08] 스트림을 활용한 병렬 데이터 처리
·
함수형 프로그래밍
동시성 & 병렬성1. 동시성여러 작업이 중복되는 시간 동안 한정된 리소스에 대한 경쟁을 하면서 실행되는 것을 의미실제로 작업이 동시에 실행되지는 않지만 단일 CPU 코어에서는 작업 간 전환이 빨라 동시에 실행되는 것처럼 보인다.동시성은 I/O 작업을 처리할 때 효율적인데, I/O 요청 후 응답까지의 대기 시간(CPU 대기 시간) 중에 다른 작업을 처리할 수 있기 때문이다.하지만 여러 작업을 동시에 수행하므로 `경합 상태`, `데드락`, `기아` 등의 동기화 문제가 발생할 수 있다.2. 병렬성중첩된 작업들을 관리하는 것이 아닌, 작업들이 `동시에 실행`되는 것에 중점을 둔다.여러 개의 CPU 코어를 사용할 수 있는 경우 각각의 작업들은 서로 다른 코어에서 병렬로 실행될 수 있다.병렬성은 CPU 바운드 작업..