[JAVA] 어노테이션(Annotation)이란?
·
Language/Java
이번 글에서는 어노테이션에 대해서 간단하게 정리하고자 한다. 스프링으로 개발을 진행하면서 가장 많이 접하는 것이 어노테이션이다. 어노테이션은 스프링에서 설정을 편리하게 해 주고, 가독성을 높여준다. 또한, 롬복과 같은 도구를 통해 가독성을 높이고 생산성을 높일 수 있다. 그렇다면 어노테이션이 무엇일까? 어노테이션은 클래스나 메서드 등의 선언 시에 @를 사용하는 것으로 메타데이터로도 불린다. JDK 5부터 등장했다. 어노테이션은 다음과 같은 상황에서 사용할 수 있다. 컴파일러에게 정보를 알려주는 경우 컴파일 혹은 deployment 시의 작업을 지정하는 경우 실행할 때 별도의 처리가 필요한 경우 어노테이션은 클래스, 메서드, 변수 등 모든 요소에 선언할 수 있다. 자바에서는 3개의 어노테이션이 정의되어 있..
[JAVA] String constant pool이란?
·
Language/Java
이전 글 참고: 2023.10.12 - [Java] - [JAVA] String 클래스의 특징 [JAVA] String 클래스의 특징 먼저 String 클래스가 무엇인지 간단히 알아보자. String은 자바가 제공하는 클래스 중에서 문자열을 다루는 클래스다. String 클래스의 객체를 생성하는 방법은 두 가지가 있는데, new 키워드 통해 ditto-dev.tistory.com 이전 글에서 Java의 String 클래스의 특징을 알아볼 때, 객체의 공유 특성을 설명하면서 String constant pool에 대해서 언급했다. 이번 글에서는 String constant pool에 대해서 설명하고자 한다. 먼저, String constant pool은 문자열이 저장되어 있는 공간으로 문자열 연산의 성능..
[JAVA] String 클래스의 특징
·
Language/Java
먼저 String 클래스가 무엇인지 간단히 알아보자. String은 자바가 제공하는 클래스 중에서 문자열을 다루는 클래스다. String 클래스의 객체를 생성하는 방법은 두 가지가 있는데, new 키워드 통해 생성자의 입력 매개변수로 문자열을 전달하는 방법과 문자열 리터럴 방법이 있다. String text1 = new String("new 키워드"); // new 키워드 String text2 = "리터럴"; // 문자열 리터럴 이때 두 가지 방법 모두 메모리에 저장되는 방식은 동일하다. String은 참조 자료형이기 때문에 실제 데이터(문자열)는 힙 메모리에 위치하고, 참조 변수 text1은 힙 메모리의 데이터를 가리키게 된다. String 클래스는 다른 클래스와는 다르게 두 가지의 특징이 있다. ..
[JAVA] Non-Access Modifier란?
·
Language/Java
Non-Access Modifiers는 JVM에 클래스의 동작, 메서드 또는 변수 등에 대해 알리기 위해서 JAVA 7에 도입된 키워드다. 총 7개의 Non-Access Modifier가 도입되었으며 아래와 같다. final static abstract synchronized transient strictfp native # final final 키워드는 다음에 적용할 수 있다. class: final 키워드가 붙은 클래스는 다른 클래스로부터의 상속이 제한된다. method: final 키워드가 붙은 메서드는 Java Runtime Environment에서 어떤 하위 클래스에서도 메서드 오버라이딩할 수 없게 된다. instance variable local variable method arguments ..
[Spring Boot] Getter와 객체 직렬화
·
Spring Framework/Spring & Spring Boot
요청 응답으로 아래의 객체를 담은 리스트를 반환하는 과정에서 리스트의 객체가 계속 빈 객체로 반환되는 문제가 발생했다. public class SampleDto { private Long id; private String name; private SampleType type; private String code; public SampleDto(){} } 서버에서 응답 결과에 대한 로그를 찍었을 때는 값이 잘 찍혔는데, 왜 클라이언트에서는 빈 객체만 반환되었을까? 원인은 DTO 객체에 getter를 생성해 주지 않았기 때문입니다. getter와 빈 객체 사이에는 어떤 연관관계가 있을까? Spring Boot는 java 객체를 JSON으로 변환하기 위해서 내부적으로 Jackson 라이브러리를 사용해서 직렬화..
[JAVA] 직렬화(Serialization)란?
·
Language/Java
이번에 채팅 앱 프로젝트를 진행하면서, Redis를 사용하게 되었습니다. public class RedisTemplate extends RedisAccessor implements RedisOperations, BeanClassLoaderAware { /** * Sets the key **serializer** to be used by this template. Defaults to {@link #getDefaultSerializer()}. * @param serializer the key serializer to be used by this template. */ public void setKeySerializer(RedisSerializer serializer) { this.keySerializer ..