최근 Baeldung 의 Author 들이 활발하게 활동을 하고 있습니다. 그만큼 최근에 여러가지 이슈들이 많이 있다는 것을 의미하는 것도 같습니다. 최근 Jdk 의 앞으로의 방향에 대한 포스트나 유튜브를 보다가 관심이 갔던 부분 중 하나가 Virtual Threads 부분이었습니다. 특히나 Spring Framework 의 TaskExecuteor에 어떤 식으로 포함이 될 지 궁금하면서도 찾아보지는 않았네요.(게으른것도 있지만 요즘 프로그램 기초편을 다시 공부중이라 정신이 없네요) Baeldung Team 에서 뭔가 해주지 않을까 했는데 드디어 Post가 올라왔습니다. 해당 포스트로 넘어가는 링크 보기 전에 잠시 Virtual Thread에 대해서 알아볼께요. Java Virtual Threads (JVTs) JVTs 는 Java 19 에서 새롭게 포함된 새로운 기능입니다. Platform Threads의 대안으로 등장했고, Platform Threads 보다 경령의 Thread로서 제안되었는데, 이 프로젝트는 Project Loom에 의해서 발전하고 있습니다. JVTs는 자바 가상 머신 (JVM)에서 관리되는 Thread model로 특정 OS Threads 에 바인딩되어 동작하지 않기 때문에 Platform Thread 보다 훨씬 효율적이고 확장 가능하다는 설명입니다. 일단 스펙 설명만으로 보면 Threads의 생성(created)과 소멸(destroyed)이 On-demand 로 동작하기 때문에 좀 더 Scalable하다고 합니다. 이는 높은 병렬처리(High-concurrency) application 즉 대규모 threads 가 필요한 application에 적합하다고 하네요. 또한 JVTs는 연속성(continuations) 및 가상스택 프레임(virtualized stack frames)과 같은 다른 기능을 포함한다고도 하는데 이 부분은 무슨 이야기인지 잘 모르겠습니다. 다만, 아직 실험(experiment) 수준으...
오늘 정리해 보고자 하는 건 누구나 다 아는 패턴 중 하나일 Null Object Pattern 에 대해서 한번 생각해 보려고 한다. 일단은 글작성 동기는 어떻게? 퇴사를 얼마 안남기고 막내 프로그래머(경력상 막내지만 착실한 친구)에게 Optional 을 설명해 주고 있었는데, 뭔가 부족한 설명을 한 것 같은 느낌이라 좀 더 어딘가에 정리를 해 놓고 싶었습니다. Optional 을 설명하다 보면 참 많이 돌아가게 되더구요. 전혀 생각도 못했습니다. 시스템 내에서 NullPointerException 이 어떤 의미로 다가왔었는가 Null Check 로직이 많아지면 얼마나 코드를 읽기 어렵게 만들어 주는가 이런 체크 로직이 많은 상황에서 새로운 다향성 객체가 만들어질 때 얼마나 많은 수정이 일어난는가 등등 그런 이유로 Optional 이 생겨나긴 했는데 일단 그 장점과 위험성은 정리해 놓은 분들이 많으니 블로그를 검색해봐라로 마무리 되었습니다. 그런데 말이죠 예전에도 Null Object Pattern 은 빈번하진 않아도 꽤 사용이 되었던 패턴입니다. 그 정의는 매우 단순합니다. 우선 ChatGPT 가 알려주는 Null Object Pattern 은 이렇습니다. "Null Object Pattern is a design pattern in object-oriented programming that allows the use of a special null object to represent the absence of an object. Instead of returning a null reference from a method or property, the null object pattern provides a substitute object that behaves in a predictable and consistent way with the rest of the system. This can help to reduce the amount of nu...