오늘 한일
- DI 및 Spring DI
-
@Controller, @Service, @Repository 애노테이션이 설정된 클래스에 대한 인스턴스 생성 및 의존관계 설정을 애노테이션으로 자동화 완료
-
MVC 프레임워크의 AnnotationHandlerMapping이 BeanFactory와 BeanScanner를 활용해 동작하도록 리팩토링
-
for문을 사용한 부분들을 스트림으로 변경
-
null 관련 부분들을 Optional로 변경(약간 아쉬운 부분이 있어 다시 진행 중)
- Optional의 orElse()와 orElseGet()
-
소스 코드를 볼수 있으면 좋은 점이 이거다.
Object object1 = objectOptional.orElse(new Object()); Object object2 = objectOptional.orElseGet(() -> new Object()); 출처: http://multifrontgarden.tistory.com/131 [우리집앞마당]
두 메소드의 차이점을 인터넷으로 보다 보니 전자의 경우 Optional 내부의 값이 null이 아닌 경우에도 무조건 객체를 생성하고 후자의 경우 null인 경우만 생성을 한다는 설명을 봤다. 설명 자체가 이해가 안 되진 않는다.
public T orElse(T other) { return value != null ? value : other; } public T orElseGet(Supplier<? extends T> other) { return value != null ? value : other.get(); }
이렇게 Optional 내부를 보면 이해 자체를 할 필요도 사라지고 확실히 기억된다.
덤으로 지금 orElseGet을 사용하려는데 자꾸 컴파일 에러가 나서 고생 중이었는데 왜 안되고 있는지도 알 수 있다.
오늘 느낀점
-
1단계 힌트로만 진행하고 있었는데 오후에 2단계 힌트를 봤다. 어떤 메소드를 만들어야 하는지 설명이 있다 보니 두 시간 정도 만에 초록불이 보이게 완성했던 거 같다. 힌트를 보기전에 내가 예상했던 방법으로 구현하게 되어있던데 아직은 대략적인 형태는 예상돼도 실체화(?) 시키는 능력까지는 부족한 것 같다. 특히나 개인적인 욕심 때문인지 일정 이상의 힌트를 보고 만들면 통과했다는 느낌이 들지 해냈다는 느낌이 안 나는 것 같다..
-
for 문을 스트림으로 변경하는 건 크게 어려움이 없는데 생각해보면 매번 for 문으로 요구 사항을 해결 한 다음 리팩토링단계때 스트림으로 변경하는 것 같다. 다음번부터는 처음부터 스트림으로 작성하는 버릇을 들여봐야겠다.
-
마찬가지로 Optional을 적용하고 있는데 자주 사용하지 않다 보니 약간 헤맨 감이 있었다. 구현 자체는 해뒀는데 Optional을 제대로 사용한 느낌이 아니라 좀 더 보고 있다. 일단 이 부분이 해결되면 pr을 보내도록 해야겠다.(동시에 다른 곳도 마음에 안 드는 곳이 보이면 고치는 중이다)
-
오후 5시쯤 너무 피곤해서 30분쯤 자고 일어나니 다시 팔팔해졌다.(그러고나니 낮에 구현했던 코드들에서 불필요한 부분들도 많이 보이더라) 도리어 지금 하나도 안졸려서 문제다.
내일 할일
- DI 프레임워크 실습 마무리
- Optional 적용
- 백엔드 송년회