Skip to content

Reflection

  • Published on
    5년 계획이 틀리는 것은 계획을 대충 세워서가 아닙니다. 예측 대상이 둘인데 시장도 나도 함께 움직이기 때문입니다. 정확도를 높이려는 시도가 왜 헛도는지, 계획의 값어치가 예측이 아니라 선택의 속도에 있는 이유를 정리했습니다. 도달점을 지정하는 목표 대신 방향으로 적는 방법, 되돌릴 수 있는 선택과 되돌리기 어려운 선택을 나누어 다르게 다루는 방법, 분기마다 던질 질문 여섯 개를 담았습니다. 계획이 실제로 실패하는 세 가지 방식과 미리 적어 두는 철회 조건, 세 줄짜리 한 페이지를 만드는 방법도 다룹니다. 외부 제약이 계획을 지배하는 상황과 이미 목표가 작동하고 있는 사람에게는 이 조언이 맞지 않는다는 점도 적었습니다. 커리어를 움직이는 선택 시리즈의 마지막 10편입니다.
  • Published on
    JDK 26(2026년 3월 17일 GA)은 JEP 500 "Prepare to Make Final Mean Final"을 통해, 딥 리플렉션으로 final 필드를 재할당하는 코드에 런타임 경고를 띄우기 시작했습니다. JDK 5 이후로 setAccessible(true) 다음의 Field.set()은 final 필드를 마음대로 바꿀 수 있었고, Gson 같은 역직렬화 라이브러리와 필드 주입 DI가 그 위에 통째로 올라가 있습니다. 지금 기본값은 warn이라 동작은 그대로지만, 장래 릴리스에서 deny가 기본이 되면 IllegalAccessException으로 바뀝니다. 이 글은 JEP 500이 정확히 무엇을 바꿨는지(Field::set에 붙은 새 조건 두 개, 새 플래그 두 개), Gson·Spring Security·Trino·Lucene의 실제 이슈에서 무엇이 걸렸는지, deny와 JFR 이벤트로 범인을 찾는 방법, 그리고 sun.reflect.ReflectionFactory가 Serializable 클래스에만 통하는 반쪽짜리 탈출구인 이유를 정리합니다. 성능 이득은 JEP가 "잠재적으로 더 빠르다"고만 말할 뿐 수치를 내놓지 않았고, JDK 27은 이미 기능 동결 상태에서 관련 JEP가 없다는 점 — 즉 지금 당장 터지는 불은 아니라는 점도 같이 짚습니다.
  • Published on
    끝없이 훑어보는 시대에 우리는 깊이 읽는 법을 조금씩 잃어가고 있다. 이 글은 얕은 읽기와 깊은 읽기의 차이, 인터넷이 우리 주의력에 남긴 흔적, 능동적 읽기와 통합적 읽기의 기술, 느린 사고와 다시 읽기의 가치, 그리고 고독과 지루함이 통찰의 토양이 되는 방식을 차분히 살펴본다. 목표는 죄책감이 아니라, 깊이 읽는 습관을 다시 세우는 구체적인 길이다.
  • Published on
    2026년의 C++ 지도. C++ 23 (2024년 10월 ISO/IEC 14882:2024로 출간) 의 std::expected·std::print·std::generator, C++ 26의 진짜 주연인 Reflection (P2996) 과 Senders/Receivers (P2300), Linear Algebra (P1673), 마침내 쓸 만한 Modules, 성숙해진 Ranges. 빌드 도구는 CMake 3.30 / Meson / xmake / build2 / Bazel C++, 패키지는 Conan 2 와 vcpkg, 컴파일러는 Clang 19 / GCC 14 / MSVC, 그리고 libc++ vs libstdc++. Sanitizers (ASan / UBSan / TSan / MSan) 와 후계 언어 후보 (Carbon · Hylo · Cppfront), 한국·일본의 현장 사례까지 — 누가 C++ 을 골라야 하고, 어떻게 굴려야 하는가.