12월 8일-레코드 클래스와 리플렉션, JSON 변환

Yullgiii·2023년 12월 8일
0
post-thumbnail

레코드 클래스와 리플렉션

레코드 클래스는 자바 14부터 도입된 데이터 담는 클래스로, 필드와 필드에 대한 getter 메소드, equals(), hashCode(), toString() 메소드를 자동으로 제공한다.
리플렉션은 자바가 동적으로 실행 중인 애플리케이션의 내부를 조사하고 수정할 수 있도록 해주는 기능이다. 레코드 클래스의 필드를 동적으로 접근하거나 변경하는 것은 불가능하지만, 리플렉션을 통해 레코드 클래스의 메타데이터를 얻는 것은 가능하다.

예를 들어, 아래와 같은 레코드 클래스가 있다고 하자.

public record User(String name, String email, int age) {}

이 레코드 클래스의 메타데이터를 얻기 위해 아래와 같이 리플렉션을 사용할 수 있다.

User user = new User("홍길동", "hong@gmail.com", 30);

Class<?> cls = user.getClass();
System.out.println("클래스 이름: " + cls.getName());
System.out.println("슈퍼클래스: " + cls.getSuperclass());
System.out.println("필드: " + Arrays.toString(cls.getRecordComponents()));

레코드 클래스와 JSON 변환

레코드 클래스를 JSON으로 변환하거나 JSON을 레코드 클래스로 변환하는 것도 가능하다. 이를 위해 Jackson 라이브러리를 사용할 수 있다.

예를 들어, 아래와 같이 레코드 클래스를 JSON으로 변환할 수 있다.

User user = new User("홍길동", "hong@gmail.com", 30);

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
System.out.println(json);

반대로, JSON을 레코드 클래스로 변환하는 것도 가능하다.

String json = "{\"name\":\"홍길동\",\"email\":\"hong@gmail.com\",\"age\":30}";

ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
System.out.println(user);

레코드 클래스는 간결성과 불변성 등의 장점을 가지지만, 리플렉션을 통한 동적 접근이 제한적이고 빌더 패턴을 자동으로 지원하지 않는 등의 단점도 있다. 이것에 대해선 어제 자세히 써놨으니 참고 바란다!!!
레코드클래스의 장단점

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글