아래는 자바 언어 아키텍트인 Brian Goetz의 “Background: how we got the generics we have (Or, how I learned to stop worrying and love erasure)” 포스팅을 재구성하여 작성한 것입니다. 해당 포스팅은 현재의 제네릭에 도달하게 된 과정과 그 이유에 초점을 맞추고, 현재 제네릭이 우리가 구축하려는 "더 나은" 제네릭에 어떤 영향을 미칠지에 대한 토대를 마련하기 위해 작성되었습니다. 특히 2004년 Java에 제네릭을 추가하기 위해 소거가 실제로 합리적이고 실용적인 선택이었음을 강조하며, 소거로의 전환을 선택하게 한 많은 강요들이 지금도 여전히 작동하고 있을 수 있음을 강조하고자 합니다. 1. 오늘날의 제네릭이 되기까지 제..
1. 스프링이 제공하는 레디스 직렬화/역직렬화(Redis Serializer/Deserializer)의 종류와 한계서비스를 개발하다 보면 레디스(Redis)는 사실상 필수불가결한 구성 요소라고 볼 수 있다. 따라서 스프링 진영 역시 레디스를 손쉽게 사용할 수 있도록 캐시 추상화를 해줄 뿐만 아니라, 레디스의 자동 구성(AutoConfiguration) 등을 제공한다. 뿐만 아니라 레디스는 기본적으로 byte 배열을 사용해 데이터를 저장하기 때문에, 스프링 데이터 레디스(spring-data-redis) 에서는 데이터를 직렬화하여 레디스에 저장하고, 필요 시에 역직렬화하는 직렬화/역직렬화 도구까지 기본적으로 제공한다.하지만 스프링이 제공하는 레디스 직렬화/역직렬화(Redis Serializer/Deseri..
1. 데이터 중심의 세상과 객체 지향 프로그래밍(Data-Oriented and Object-Oriented Programming)[ 데이터 중심의 세상 ]21세기는 두말 할 필요 없이 데이터가 중심인 세상이다. 많은 데이터들이 기록되고 수치화되며, 데이터를 분석하여 얻은 결과는 수 많은 의사결정의 근거가 된다. 이렇듯 데이터 중심의 세상이 되면서, 프로그래밍 세계에도 변화가 도래했다. 마이크로서비스 아키텍처가 등장하고 데이터가 중심이 되어 서비스들 간에 데이터를 교환하는 것이 상당히 중요해졌다. 이를 위해 자바는 대표적으로 Ember라는 프로젝트를 통해 언어를 고도화하여 생산성을 높이고자 하였고, 그 과정으로 데이터를 손쉽게 모델링할 수 있도록 도와주는 record 클래스 등이 등장하게 되었다. 심..
1. 객체에게 역할과 책임을 부여하는 객체 지향 프로그래밍 (Object-Oriented Programming)[ 객체에게 역할과 책임을 부여하는 객체 지향 프로그래밍 ]우리는 대부분 자바 또는 코틀린과 같은 객체 지향 언어(Object-Oriented Programming)를 사용하여 개발을 하고 있다. 객체 지향 언어는 캡슐화(Encapsulation), 상속 (Inheritance), 다형성 (Polymorphism), 추상화 (Abstraction) 등과 같은 특성을 통해 프로그래밍을 용이하게 할 수 있도록 도와준다. 이러한 특성을 바탕으로 시스템을 구현하면 변경에 유연하게 대응할 수 있다.객체 지향적인 부분이 가장 많이 적용되는 부분은 인터페이스를 통해 추상화를 하는 부분일 것이다. 예를 들어 ..