2024. 8. 15. 16:24ㆍ개발일지
자바로 개인 프로젝트를 시작하고자 한다.
잠깐 부모님 일을 도와드린 적이 있는데
전산일을 하면서 그 프로그램의 노후? 불편함이 있어서
내가 한번 만들어볼까? 싶어서 만들게 되었다...
자바로 프로젝트 시작하기 앞서 모르는 부분을 블로그에 정리를 해보고자 한다.
코틀린으로 프로젝트를 할 때의 차이랄까?
그런거나 새롭게 알게 된 부분을 위주로 작성할 것이다...
1. lombok?
코틀린과 다르게 자바에서는 lombok이라는 게 있었다.
아니 대체 이게 뭘까?
찾아보니 어노테이션 기반으로 코드를 자동완성 해주는 라이브러리 라고 한다...
그래서 이를 이용하면 Getter, Setter, Equlas, ToString 등과 다양한 방면의 코드를 자동완성 시킬 수 있다고 한다.
또한
어노테이션 기반의 코드 자동 생성을 통한 생산성 향상,
반복되는 코드 다이어트를 통한 가독성 및 유지보수성 향상,
Getter, Setter 외에 빌더 패턴이나 로그 생성 등 다양한 방면으로 활용 가능하다는 이점이 있다...
대표적인 어노테이션을 간단히 정리하자면,
- @Getter, @Setter
클래스 이름 위에 적용시키면 모든 변수들에 적용이 가능하고, 변수 이름 위에 적용시키면 해당 변수들만 적용 가능하다.
- @AllArgsConstructor는 모든 변수를 사용하는 생성자를 자동완성 시켜주는 어노테이션이다.
- @NoArgsConstructor는 어떠한 변수도 사용하지 않는 기본 생성자를 자동완성 시켜주는 어노테이션이다.
- @RequiredArgsConstructor는 특정 변수만을 활용하는 생성자를 자동완성 시켜주는 어노테이션이다.
- @EqualsAndHashCode 어노테이션을 활용하면 클래스에 대한 equals 함수와 hashCode 함수를 자동으로 생성해준다.
- @ToString 어노테이션을 활용하면 클래스의 변수들을 기반으로 ToString 메소드를 자동으로 완성시켜 준다.
- @Data 어노테이션을 활용하면 @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor를 자동완성 시켜준다.
- @Builder 어노테이션을 활용하면 해당 클래스의 객체의 생성에 Builder패턴을 적용시켜준다.
- @Delegate 어노테이션은 한 객체의 메소드를 다른 객체로 위임시켜 준다.
- @Log4j2와 같은 어노테이션을 활용하면 해당 클래스의 로그 클래스를 자동 완성 시켜준다.
2. record
그 다음에 dto을 작성해줄때 코틀린 경우 data class로 작성해주는데,
자바로 된 프로젝트를 살펴보니 record를 사용하는게 아니겠는가?
찾아보니
record는 Java 14에서 처음 소개된 새로운 클래스 타입으로, 변경 불가(immutable) 데이터 객체를 쉽게 만들 수 있게 한다. 또한 record는 기존의 클래스와 비슷하지만, 더 간결하고 효율적으로 데이터 객체를 생성할 수 있도록 설계되었다.
특징으로는
-간결성(Conciseness)
record는 코드를 간결하게 만들기 위한 목적으로 도입되었다고 한다.... 필드를 정의하면 해당 필드를 기반으로 자동으로 메서드가 생성되어 코드의 양을 줄일 수 있고, 불필요한 보일러플레이트 코드를 줄여 가독성을 높여준다. 아래의 예시 코드를 보면 확연히 알 수 있다.
- 메서드 자동 생성(Automatic Method Generation)
record는 필드를 기반으로 equals(), hashCode(), toString() 메서드를 자동으로 생성한다. 이로써 불필요한 반복적인 코드 작성을 피할 수 있다.
- 생성자 자동 생성(Automatic Constructor Generation)
record는 필드를 기반으로 자동으로 생성자를 생성하지만 필요에 따라 명시적인 생성자를 정의할 수도 있다.
- 불변성(Immutability)
record는 필드가 한 번 설정되면 값을 변경할 수 없다. 이는 불변성을 보장하며 데이터의 안정성을 높이는 데 도움이 된다고 한다.
- final 선언 생략
record의 필드를 final로 선언할 필요가 없기 때문에 Compiler는 필드를 불변으로 취급하고 자동으로 final로 처리한다.
- 패턴 매칭(Pattern Matching) 통합
record는 Java의 Pattern Matching과 함께 사용될 수 있어, 데이터 추출 및 패턴 일치 검사에 효과적으로 사용될 수 있다고 한다.
- 데이터 전달(Data Transfer)
record의 주된 목적은 객체 간에 불변 데이터를 전달하는 것으로, DTO(Data Transfer Object)를 표현하는 데 적합하다.
public final class User {
private final Long id;
private final String email;
private final String name;
public User(Long id, String email, String name) {
this.id = id;
this.email = email;
this.name = name;
}
public Long getId() {
return id;
}
public String getEmail() {
return email;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", email='" + email + '\'' +
", name='" + name + '\'' +
'}';
}
}
public record User(
Long id,
String email,
String name
) {
}
이런식으로 record를 사용하면 한층 더 간결하게 사용이 가능하다고 한다.
참고해서 본 블로그와 레퍼렌스다.!
https://blog.hexabrain.net/399
38편. 레코드(Record)
도입 단순하게 데이터를 한쪽에서 다른 한쪽으로 전달하기 위해서만 사용되는 데이터 전송 객체(혹은 DTO)를 생각해봅시다. 이런 객체를 사용하는 이유는 다양한 집계 연산을 수행한 후의 결과
blog.hexabrain.net
https://www.baeldung.com/java-record-keyword
아니 진짜 자바를 공부하는데 다른게 꽤 있구나,,,
그래도 스펀지처럼 흡수해야지
파이팅
'개발일지' 카테고리의 다른 글
TIL - 20241004 - 기본 데이터 타입(primitive type)과 객체 타입(Reference type)은 서로 직접적으로 캐스팅할 수 없음. (0) | 2024.10.04 |
---|---|
TIL 20240930 (1) | 2024.09.30 |
TIL 20240622 RestClient? (0) | 2024.06.22 |
TIL 20240619 num_list.last()와 num_list[num_list.size - 1]의 차이 (0) | 2024.06.19 |
TIL 20240609 반복문에서 ..와 until의 차이 (1) | 2024.06.09 |