> For the complete documentation index, see [llms.txt](https://jinwon-yoon.gitbook.io/jinonys-blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jinwon-yoon.gitbook.io/jinonys-blog/daily-log/2022.11.19.md).

# 2022.11.19

## 할일 및 한일&#x20;

* [x] 이것이 자바다 16장(스트림과 병렬 처리) 공부 및 notion 정리(20%)&#x20;
* [x] 스프링 핵심 원리 - 기본편 강의 수강&#x20;

## 경험 및 배움&#x20;

### 이것이 자바다 16장(스트림과 병렬 처리)&#x20;

스트림(Stream)은 자바 8부터 추가된 **컬렉션(배열 포함)의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자**로, 내부 반복자를 사용함으로써 병렬 처리를 쉽게 할 수 있다.

또한 람다식으로 요소 처리 코드를 제공하는 것이 특징이다.

```java
Stream<Student> stream = list.stream();
stream.forEach(s -> {
    String name = s.getName();
    int score = s.getScore();
    System.out.println(name + "-" + score);
});
```

위와 같은 코드로 `Iterator` 를 사용하지 않아도 보다 간편한 방법으로 컬렉션의 요소들을 순회할 수 있다.

**외부 반복자와 내부 반복자의 차이, 또한 `List` 와 `asList` 로 컬렉션을 생성하는 것의 차이, 그리고 `forEach` 문**은 이번 단원의 공부가 끝난 후 자세히 공부하게 정리할 예정이다.

### 스프링 핵심 원리 - 기본편&#x20;

오늘의 내용도 꽤나 인상 깊었다.

우선 다음의 다이어그램에 맞게, 인터페이스를 생성하고, 그에 맞는 구현 클래스를 짜서 할인 정책을 만들어보았다.

<figure><img src="/files/YCcmCvJXAfzbcQexkHyk" alt=""><figcaption></figcaption></figure>

하지만 구현을 완료한 후에 영상을 보며 생각해보니 객체지향 원칙을 지키지않았다.

<figure><img src="/files/f9NOwgv8DtG3Abu3nar7" alt=""><figcaption></figcaption></figure>

위의 다이어그램과 같이, 클라이언트 코드인 `OrderServiceImpl` 이 인터페이스인 `DiscountPolicy` , 그리고 구현 클래스인 `FixDiscountPolicy` 또한 의존중이였다.

따라서 만약 *할인 정책을 `RateDiscountPolicy` 로 변경한다면, 클라이언트 코드 또한 변경해야 하는 상황*이다.

결론적으로 지금 코드는 **OCP, DIP를 둘 다 위반**중이였다.

그래서 강의의 우선적인 해결책은 다음과 같다.

```java
public class OrderServiceImpl implements OrderService {
      //private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
      private DiscountPolicy discountPolicy;
}
```

우선 인터페이스 에만 의존을 할 수 있도록 코드를 단순히 변경해보았다. 하지만 이러면 의존성 문제는 해결가능하지만, **구현체가 없으므로 코드가 전혀 돌아가지 않는다는 또다른 문제가 발생**한다.

따라서 이 문제에 대한 해결 방법은 **누군가가 클라이언트인 `OrderServiceImpl` 에 `DiscountPolicy` 의 구현 객체를 대신 생성하고 주입**해주어야 한다. 어떻게 해야할까?

그에 대한 해결책은 내일 강의에서 배운다. 기대된다.

## 개선 및 목표&#x20;

* 내일은 스프링 강의 수강, 그리고 이것이 자바다 16장 또한 미리미리 준비하자!&#x20;
