😌2022.11.19

일일 회고 95일차

할일 및 한일

경험 및 배움

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

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

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

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

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

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

스프링 핵심 원리 - 기본편

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

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

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

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

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

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

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

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

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

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

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

개선 및 목표

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

Last updated