기존 프로젝트에서 @Transactional으로 설정해 준 서비스에 readOnly 속성을 사용하지 않고 있었는데 데이터를 읽기만 하는 서비스에 readOnly = true를 적용해 읽기 전용 모드로 설정해 주는 것이 좋을 것 같다는 이야기를 듣고 읽기 전용으로 설정해 주면 어떤 효과를 얻을 수 있는지 알아봤다. @Transactional(readOnly = true) Spring에서 @Transactional 어노테이션을 사용할 수 있는데 트랜잭션을 readOnly = true로 설정해 주면 읽기 전용 모드로 변경할 수 있다. 그러면 @Transactional(readOnly = true) 속성을 적용함으로써 얻을 수 있는 이점에 대해 알아보자. 우선 @Transactional(readOnly = tr..
이전 면접에서 type erasure에 대해 질문을 받았었는데 처음 듣는 개념이라 아무 말도 못 했기 때문에 오늘은 type erasure를 공부해 봤다. type erasure에 대해 알아보기 전에 제네릭의 개념을 알아야 하는데 간단하게 제네릭을 정의하면 클래스나 메서드를 선언할 때 이나 같은 타입을 지정할 수 있는데, 이를 통해서 다양한 타입의 객체와 함께 쓰이면서, 유연하고 재사용 가능한 코드를 작성할 수 있다. 제네릭에 대해서는 이전에 정리한 글이 있어 참고하면 좋을 것 같다. https://seungjjun.tistory.com/251 Type erasure 타입 소거(type erasure)란 컴파일 시 코드에서 제네릭 타입의 정보를 제거하고 Object 같은 기본 타입으로 대체하는 과정을 말..
리플렉션(Reflection)이란? 리플렉션은 런타임 시 클래스, 객체, 메서드, 필드의 동작을 검사하고 조작할 수 있게 해주는 자바의 기능 중 하나이다. 그리고 표준 자바 코드만으로는 할 수 없는 클래스를 동적으로 로드, 새로운 객체 생성, 메서드 호출 같은 작업을 수행할 수 있다. 리플렉션에 대한 정의만 봐서는 와닿지도 않고 이해하기 쉽지 않다. 간단히 리플렉션이 할 수 있는 기능을 예시 코드를 보면서 이해해 보자. 우선 앞으로 다른 예제 코드에서 계속 사용할 Person 클래스를 만들고 시작하자. person 클래스에는 private로 생성된 name, age 필드가 있고, 생성자와 getter가 존재한다. Person public class Person { private String name; p..
제네릭(Generic)이란? 제네릭은 다양한 타입의 데이터와 함께 사용할 수 있게 하는 클래스 및 메서드를 작성할 수 있게 해준다. 그래서 재사용성이 좋은 코드를 작성할 수 있게 해주고, 컴파일 과정에서 타입체크를 해주는 자바(5부터 도입)의 기능 중 하나이다. 다양한 타입의 데이터와 함께 사용할 수 있게 한다는 말이 이해가 잘 되지 않으니 예시 코드로 살펴보자. public class Box { private T content; public void put(T content) { this.content = content; } public T get() { return content; } } Box라는 클래스를 타입으로 선언해주었다. 여기서 이 모양이 제네릭 표현식이다. 일반적으로 꺾쇠 모양 안에 타입을..
의존성 주입(Dependency Injection, DI) Inversion of Control(IoC)이라고도 불리는 의존성 주입(DI)은 클래스 간 의존관계를 관리하고 있는 Bean 중에서 필요한 것을 컨테이너가 자동으로 주입해 주는 것을 말한다. 즉, 어떤 객체가 사용하는 의존 객체를 직접 만들어서 사용하는 게 아니라, 주입받아서 사용하는 방법을 말한다. 의존성 주입 방법으로 대표적으로 3가지가 존재하는데 아래에서 알아보자. 의존관계 주입 방법 생성자 주입 생성자 주입 방식은 생성자를 통해서 의존 관계를 주입 받는 방법이다. @RestController public class PostController { private final PostService postService; // @Autowired..