diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png new file mode 100644 index 0000000..9f2f444 Binary files /dev/null and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 9f2f444..b7c7925 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index b7c7925..7c06027 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 7c06027..91d3397 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 91d3397..0e0ef9c 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 0e0ef9c..760b710 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 760b710..13900d1 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 13900d1..372f493 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 372f493..91c1e99 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 91c1e99..5664361 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png index 5664361..281723f 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png index 281723f..fe678e6 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png index fe678e6..0c7c988 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png index 0c7c988..35985a2 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1).png index 35985a2..9eb3f50 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1) (1).png index 9eb3f50..5fc54d8 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1) (1).png b/developLog/.gitbook/assets/image (1) (1) (1).png index 5fc54d8..49782be 100644 Binary files a/developLog/.gitbook/assets/image (1) (1) (1).png and b/developLog/.gitbook/assets/image (1) (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1) (1).png b/developLog/.gitbook/assets/image (1) (1).png index 49782be..dc7ccae 100644 Binary files a/developLog/.gitbook/assets/image (1) (1).png and b/developLog/.gitbook/assets/image (1) (1).png differ diff --git a/developLog/.gitbook/assets/image (1).png b/developLog/.gitbook/assets/image (1).png index dc7ccae..61dd141 100644 Binary files a/developLog/.gitbook/assets/image (1).png and b/developLog/.gitbook/assets/image (1).png differ diff --git a/developLog/.gitbook/assets/image.png b/developLog/.gitbook/assets/image.png index 61dd141..deb21e4 100644 Binary files a/developLog/.gitbook/assets/image.png and b/developLog/.gitbook/assets/image.png differ diff --git a/developLog/algorithm-datastructure/data-structure/undefined.md b/developLog/algorithm-datastructure/data-structure/undefined.md index 163cd72..c74e5ae 100644 --- a/developLog/algorithm-datastructure/data-structure/undefined.md +++ b/developLog/algorithm-datastructure/data-structure/undefined.md @@ -36,7 +36,7 @@ ## 2. 연결리스트란? -
+
### 1) 개념 diff --git a/developLog/book/learn-errors/README.md b/developLog/book/learn-errors/README.md index 57e9948..f15d635 100644 --- a/developLog/book/learn-errors/README.md +++ b/developLog/book/learn-errors/README.md @@ -5,4 +5,4 @@ description: 에러가 무서워지지 않는 책 # 에러가 무서워지지 않는 책 -
+
diff --git a/developLog/ci-cd/github-action/oauth-gitbook-github.io-1.md b/developLog/ci-cd/github-action/oauth-gitbook-github.io-1.md index 2e93191..c64441f 100644 --- a/developLog/ci-cd/github-action/oauth-gitbook-github.io-1.md +++ b/developLog/ci-cd/github-action/oauth-gitbook-github.io-1.md @@ -157,10 +157,10 @@ `Github action` 파일에 개인 레포로 변경사항을 `push`할 수 있도록 하려면\ 위에서 발급 받은 개인 토큰을 함께 보내 내 레포에 `push`할 권한을 받은 사람임을 증명 하기 위함 -
-
+
+ * GITBOOK , Github.io레포의 `⚙️ Settings` 클릭 * `⊞ Secrets and variables`를 펼쳐 `Actions` 클릭 * `New repository secret` 클릭 diff --git a/developLog/cs/etc/cs.md b/developLog/cs/etc/cs.md index b23aefe..b5a74d0 100644 --- a/developLog/cs/etc/cs.md +++ b/developLog/cs/etc/cs.md @@ -239,7 +239,7 @@ * **8080 포트** * 이런 에러 발생 원인 -
+
* 외부에서 실행되는 톰캣 서버 존재 * 서버 연결 정보가 제대로 주어지지 않을 때 diff --git a/developLog/ex/knowledge/undefined.md b/developLog/ex/knowledge/undefined.md index 778e435..a9a9331 100644 --- a/developLog/ex/knowledge/undefined.md +++ b/developLog/ex/knowledge/undefined.md @@ -31,7 +31,7 @@ ## 2. Linux에 rust 도입 상황 -
+
좀 더 현대적인 주제인 Linux에 Rust 언어가 도입된 것에 대해 토발즈는 더 빨리 채택되지 않는 것에 실망하고 있습니다. “업데이트가 더 빨라질 것으로 기대했지만, 기존 커널 개발자들은 C에 익숙하고 Rust를 모른다는 것이 문제 중 하나입니다. 어떤 면에서는 매우 다른 새로운 언어를 배워야 하는 것에 대해 그다지 달가워하지 않습니다. 그래서 Rust에 대한 반발이 있었습니다.” 또한 토발즈는 “또 다른 이유는 Rust 인프라 자체가 매우 안정적이지 않았기 때문이기도 합니다. ....”라고 덧붙였습니다. diff --git a/developLog/programming-lanuage/java/effective-java/5/item-26.md b/developLog/programming-lanuage/java/effective-java/5/item-26.md index 54735e2..5ddde21 100644 --- a/developLog/programming-lanuage/java/effective-java/5/item-26.md +++ b/developLog/programming-lanuage/java/effective-java/5/item-26.md @@ -95,7 +95,7 @@ int sum(Collection c) { 위의 메서드는 `Collection`에 있는 요소들이 `Integer` 타입이라고 가정하고 작성된 것이다. 하지만 만약 `String`과 같은 다른 타입의 요소를 가진 컬렉션을 전달하면, 컴파일 시에는 문제가 없지만 **런타임에** `ClassCastException`이 발생할 수 있다. -
+
> 위와 같은 문제를 해결하기 위해 Java 개발자들은 **타입을 지정하여 컴파일 시점에 타입 안전성을 보장**할 수 있는 방법을 고안하였고, 그 결과 제네릭이 등장하게 되었다. diff --git a/developLog/programming-lanuage/java/effective-java/5/item-28.md b/developLog/programming-lanuage/java/effective-java/5/item-28.md index 9ce9a7a..4ab3d58 100644 --- a/developLog/programming-lanuage/java/effective-java/5/item-28.md +++ b/developLog/programming-lanuage/java/effective-java/5/item-28.md @@ -2,7 +2,7 @@ 배열을 꼭 반환해야 하는 상황이 아니라면 컬렉션[^1]을 사용하자..! -
+
그 이유가 뭘까? diff --git a/developLog/programming-lanuage/java/effective-java/5/item-31-api.md b/developLog/programming-lanuage/java/effective-java/5/item-31-api.md index 236d930..86561e6 100644 --- a/developLog/programming-lanuage/java/effective-java/5/item-31-api.md +++ b/developLog/programming-lanuage/java/effective-java/5/item-31-api.md @@ -44,7 +44,7 @@ public void pushAll(Iterable src) { integer은 Number의 하위 타입이니 잘 동작해야 한다 하지만 클라이언트 코드에서 실제로는 오류 메세지가 뜬다. -
+
```java import java.util.Arrays; @@ -432,7 +432,7 @@ private static void swapHelper(List list, int i, int j) { 예를 들어서 `Java 5` 부터 지원한 `ScheduledFuture` 인터페이스의 구현 코드를 살펴보면 아래와 같다. `Delayed`의 하위 인터페이스이며 `Delayed`인터페이스는 `Comparable`를 확장했다. 반면에 `ScheduledFuture` 인터페이스는 `Comparable`를 확장(extends)하지 않는다. -
+
```java // ScheduledFuture interface diff --git a/developLog/programming-lanuage/java/effective-java/7/item-45.md b/developLog/programming-lanuage/java/effective-java/7/item-45.md index 12378b5..bff94a4 100644 --- a/developLog/programming-lanuage/java/effective-java/7/item-45.md +++ b/developLog/programming-lanuage/java/effective-java/7/item-45.md @@ -6,6 +6,17 @@ 대용량 데이터를 처리할 때 효율을 높이기 위해, 오토박싱/언박싱 과정이 필요 없는 `Intstream` 과 같은 기본형 스트림도 제공한다. +`스트림의 원소`들은 어디로부터든 올 수 있 다. 대표적으로는 **컬렉션, 배열, 파일, 정규표현식 패턴 매처(matcher), 난수 생성기, 혹은 다른 스트림**이 있다. + +{% hint style="info" %} +스트림 안의 데이터 원소들은 객체 참조나 기본 타입값이다. 기본 타입 값으로는 int, long, double을 지원하는데 **기본 타입의 경우 IntStream, LongStream, DoubleStream과 같은 Stream을 사용하는게 성능상 좋다.** +{% endhint %} + +* Stream - 객체 참조에 대한 Stream +* IntStream - int 타입에 대한 Stream +* LongStream - long 타입에 대한 Stream +* DoubleStream - double 타입에 대한 Stream + > 🔖 **스트림의 추상 개념**\ > 1\. 스트림(stream) : 데이터 원소의 유한 혹은 무한 시퀀스\ > 2\. 스트림 파이프라인(stream pipeline) : 이 원소들로 수행하는 **연산 단계를 표현** @@ -14,22 +25,59 @@ ![](https://velog.velcdn.com/images/semi-cloud/post/8f2e7dd2-405b-4653-bc32-9269a0f7cc59/image.png) +이미지 분석 + +1. **Stream Source**: 배열, 컬렉션, I/O 채널 등 다양한 소스에서 스트림을 생성할 수 있음을 나타낸다. +2. **Intermediate Operations**: 필터링, 정렬, 타입 변환, 매핑 등의 중간 연산이 포함된다. 이 연산들은 스트림을 계속 반환하며, 메서드 체이닝 스타일로 연달아 적용할 수 있다. +3. **Terminal Operation**: 스트림을 소비하여 최종 결과를 반환하는 연산이다. 예를 들어 `collect`, `sum`, `count`와 같은 연산들이 있다. +4. **Operation Result**: 최종 연산의 결과를 보여주는 부분 + + + +

https://sas-study.tistory.com/239 이미지 참고

+ ## 🌱 **스트림 파이프라인 연산** 스트림 파이프라인은 소스 스트림에서 시작해 종단 연산으로 끝나며, 그 사이에 하나 이상의 중간 연산이 있을 수 있다. +> 기본적으로 스트림 파이프라인은 순차적으로 수행되는데, **파이프라인을 병렬로 실행**하려면 파이프라인을 구성하는 스트림 중 하나에 `parallel 메서드`를 호출해 사용하면 되긴하나, 효과를 볼 수 있는 상황은 많지 않다. + ### **1. 중간 연산(Intermediate Operation)** 각 중간 연산은 **스트림을 어떠한 방식으로 변환**하는 역할을 수행하며, 모두 한 스트림을 다른 스트림으로 변환하게 하여 메서드 체이닝을 가능하게 한다. 변환 된 스트림의 원소 타입은 변환 전 스트림의 원소 타입과 같을 수도 있고 다를 수도 있다. 예를 들어, 각 원소에 함수를 적용하거나 특정 조건을 만족 못하는 원소를 걸러낼 수 있다. * `filter()`, `map()`, `sorted()` +| 메서드 | 설명 | +| ---------------------------------------------------------------------- | --------------------------------------------- | +| `filter(Predicate predicate)` | 지정된 `predicate` 함수에 맞는 요소만 스트림에 포함하도록 필터링 | +| `map(Function function)` | 스트림의 각 요소에 `function`을 적용하여 새로운 요소로 변환 | +| `flatMap(Function> function)` | 각 요소에 `function`을 적용하여 생성된 스트림을 하나의 스트림으로 평탄화 | +| `distinct()` | 스트림의 중복 요소를 제거 | +| `sorted()` | 요소를 기본 정렬(오름차순) | +| `sorted(Comparator comparator)` | 지정된 `comparator` 함수를 사용하여 요소를 정렬 | +| `skip(long n)` | 스트림의 첫 `n`개의 요소를 건너뜀 | +| `limit(long maxSize)` | 스트림의 요소 중 최대 `maxSize` 개수만큼만 반환다. | + ### **2. 종단 연산(Terminal Operation)** -종단 연산은 마지막 중간 연산이 내놓은 **스트림에 최후의 연산을 가하는** 역할을 한다. 예를 들어, 원소를 정렬해 컬렉션에 담거나 특정 원소를 하나 선택하는 식이다. +종단 연산은 마지막 중간 연산이 내놓은 **스트림에 최후의 연산을 가하는** 역할을 한다.예를 들어, 원소를 정렬해 컬렉션에 담거나 특정 원소를 하나 선택하는 식이다. * `forEach()`, `collect()`, `match()`, `count()`, `reduce()` +Java Stream API의 추가 메서드와 설명을 표로 정리했습니다. + +| 메서드 | 설명 | +| ------------------------------------------ | ------------------------------------------------------------------- | +| `forEach(Consumer consumer)` | 스트림의 각 요소를 `consumer`에 전달하여 순회하며 소비한다. | +| `count()` | 스트림 내의 요소 개수를 반환한다. | +| `max(Comparator comparator)` | `comparator`를 사용하여 스트림 내의 최대 값을 반환한다. | +| `min(Comparator comparator)` | `comparator`를 사용하여 스트림 내의 최소 값을 반환한다. | +| `allMatch(Predicate predicate)` | 스트림의 모든 요소가 `predicate`에 만족하면 `true`를 반환한다. | +| `anyMatch(Predicate predicate)` | 스트림의 요소 중 하나라도 `predicate`에 만족하면 `true`를 반환한다. | +| `sum()` | 스트림의 요소 합계를 반환한다. (`IntStream`, `LongStream`, `DoubleStream`에 사용) | +| `average()` | 스트림의 요소 평균 값을 반환한다. (`IntStream`, `LongStream`, `DoubleStream`에 사용) | + ```java List transactionsIds = transactions.stream() @@ -43,10 +91,20 @@ List transactionsIds = > [https://www.geeksforgeeks.org/java-8-stream-tutorial/](https://www.geeksforgeeks.org/java-8-stream-tutorial/) +1. **Stream\ 생성**: 다양한 `Transaction` 객체들이 스트림에 포함되어 있다. +2. **`filter` 단계**: `t -> t.getType() == Transaction.GROCERY` 조건을 만족하는 `Transaction` 객체들만 필터링하여 `Stream`을 생성한다. +3. **`sorted` 단계**: `Transaction` 객체들을 값 (`getValue()`) 기준으로 내림차순 정렬한다. +4. **`map` 단계**: 각 `Transaction` 객체의 `id`만 추출하여 `Stream`로 변환한다. +5. **`collect` 단계**: 최종적으로 `collect(toList())`를 사용하여 `List`로 결과를 수집한다. + +> 결과적으로 이 스트림 작업은 특정 조건을 만족하는 트랜잭션을 필터링하고, 정렬한 후, ID만 수집하여 리스트로 반환하는 과정이다. + ## 🌱 스트림 파이프라인 특징 ### **1. 지연 평가(lazy evaluation)** +지연평가는 종단 연산이 호출될 때 이뤄지며, 종단 연산에 쓰이지 않는 데이터 원소는 계산에 쓰이지 않는다. 이 한 지연 평가가 **무한 스트림을 다룰 수 있게 해주는 열쇠**다. 종단 연산이 없는 스트림 파이프라인은 아무 일도 하지 않는 명령어인 no-op과 같으니, 종단 연산을 빼먹는 일이 절대 없도록 하자. + 먼저 지연이란 **결과값이 필요할때까지 계산을 늦추는** 기법을 의미한다. 이렇게 함으로써 어느 부분에서 가장 큰 이익을 얻을 수 있을까? > 대용량의 데이터에서, **실제로 필요하지 않은 데이터들을 탐색하는 것을 방지**해 속도를 높일 수 있다. 즉, 종단 연산에 쓰이지 않는 데이터 원소는 계산 자체에 쓰이지 않는다. 그리고 이것을 `Short-Circuit` 방식이라 부른다. @@ -78,11 +136,11 @@ List transactionsIds = * **Finding an element**: `findFirst()`와 `findAny()`를 사용하여 특정 요소를 찾을 수 있으며, 요소를 찾으면 연산이 종료 * **Testing a match**: `anyMatch()`, `allMatch()`, `noneMatch()` 연산을 사용하여 조건에 맞는 요소가 있는지 확인할 수 있다. -스트림 파이프라인을 실행하게 되면, `JVM` 은 곧바로 스트림 연산을 실행시키지 않는다. **최소한으로 필수적인 작업만 수행하고자 검사를 먼저 하고, 이를 바탕으로 최적화 방법을 찾아내 계획한다.** 그리고 그 계획에 따라 개별 요소에 대한 스트림 연산을 수행한다. +스트림 파이프라인을 실행하게 되면, `JVM` 은 곧바로 스트림 연산을 실행시키지 않는다. 최소한으로 필수적인 작업만 수행하고자 검사를 먼저 하고, 이를 바탕으로 최적화 방법을 찾아내 계획한다. 그리고 그 계획에 따라 개별 요소에 대한 스트림 연산을 수행한다. 예를 들어, `10000` 개의 데이터중에 길이가 5가 넘는 문자열에서 가장 알파벳순으로 앞에 있는 2개의 문자열만 가지고 오고 싶다고 하자. 지연 평가가 없이 순서대로 바로 동작했다면, `10000` 개의 데이터를 모두 순회해야 했을 것이다. -> 하지만 어짜피 최종적으로 2개만 탐색하면 되는데 전체 데이터를 다 볼 필요가 있을까? +> 하지만 어짜피 최종적으로 2개만 탐색하면 되는데 전체 데이터를 다 볼 필요가 있을까? 1. `limit` 사용 O\ diff --git a/developLog/programming-lanuage/java/effective-java/README.md b/developLog/programming-lanuage/java/effective-java/README.md index 7e4ca75..1300c37 100644 --- a/developLog/programming-lanuage/java/effective-java/README.md +++ b/developLog/programming-lanuage/java/effective-java/README.md @@ -16,4 +16,4 @@ layout: # 이펙티브 자바 -
+
diff --git a/developLog/programming-lanuage/java/grammar/2.md b/developLog/programming-lanuage/java/grammar/2.md index 551d0e9..ee9d147 100644 --- a/developLog/programming-lanuage/java/grammar/2.md +++ b/developLog/programming-lanuage/java/grammar/2.md @@ -128,7 +128,7 @@ Person(String name, int age){ //필드를 전달받아 만드는 오버로드 **전** -
+
**후** diff --git a/developLog/programming-lanuage/java/younghan-lecture/undefined.md b/developLog/programming-lanuage/java/younghan-lecture/undefined.md index 509b96e..5146f1f 100644 --- a/developLog/programming-lanuage/java/younghan-lecture/undefined.md +++ b/developLog/programming-lanuage/java/younghan-lecture/undefined.md @@ -4,7 +4,7 @@ ### 자바 표준 스펙 -
+
#### 자바 표준 스펙과 구현 @@ -16,7 +16,7 @@ ### 컴파일과 실행 -
+
자바 프로그램은 컴파일과 실행 단계를 거친다. diff --git a/developLog/spring/basic/undefined.md b/developLog/spring/basic/undefined.md index 1f9bef2..bd69c37 100644 --- a/developLog/spring/basic/undefined.md +++ b/developLog/spring/basic/undefined.md @@ -28,7 +28,7 @@ object를 의자 s = new 의자();로 **heap**에 올리면 이 s는 만든 메
-
+
#### ⭐ IoC(역전의 제어) ⇒ 주로 주도권 스프링