레코드가 새로 생긴 건 알겠는데... 이게 뭔지 도대체 모르겠어서 찾아보니까
더 모르겠어서 영어 검색까지 동원해서 알아냈따! 👏👏
recode
모든 걸 알아보기 전에, 이게 왜 필요한지, 어떤 배경에서 생겨났는 지 아는 건 필수!!
자바의 recode는 보일러 플레이트 코드를 줄이기 위해서 고안되었다.
그러니까 보일러 플레이트 코드가 무엇인지 부터 알아보자 !
보일러 플레이트의 뜻?
계속해서 쓸 문자를 인쇄하는 판은 바꾸기 힘든 강철로 만든 판을 사용했다. 이 판의 이름이 “보일러 플레이트”
어떤 상황에서도 쓸 수 있는, 든든 국밥같은 코드다^_^
자주 반복되는 작업이나 패턴을 미리 구현 해놓고 계속 사용할 수 있게 하는 코드를 보일러플레이트 코드라고 한다.
1. 코드의 재사용성이 향상된다.
공통적으로 사용되는 코드를 미리 정의해 이후에 계속 사용할 수 있다.
2. 코드의 유지보수가 용이해진다.
표준화된 코드를 사용해서 코드의 일관성이 유지되고, 어떤 개발자가 봐도 이해를 쉽게할 수 있어 유지보수가 편햐진다.
3. 개발 시간이 단축된다.
미리 작성해둔 코드를 사용하면 되기 때문에 작성의 시간이 단축된다.
4. 코드의 품질이 개선된다.
검증된 코드를 사용하기 때문에 위험 요소를 줄일 수 있다. 또한 표준화된 코드를 통해 코드의 안정성과 신뢰성을 높일 수 있다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
.... 등등등
🍦 우리는 이렇게 보일러플레이트 코드를 계속해서 작성해야한다.
이런 보일러플레이트 코드의 안정성은 이미 검증되었다.
따라서 보일러 플레이트 코드를 더 편하게 사용할 수 있는 방법은 없을까?
👉 Recode를 사용하자.
final예약어
가 붙는다. 따라서, 상속이 불가능하고, 값 변경이 불가능하다.public record PersonRecode(String name, int age, String codeNumber) {
public PersonRecode(String name, int age) {
this.name = name;
this.age = age;
this.codeNumber = "001";
}
}
생성자
getters 메서드
( getFiledName
X, fildName
O)equals 메서드
hashcode 메서드
toString 메서드
💡 위의 모든 코드는 컴파일러가 자동으로 만들어준다. 따라서 개발자가 추가로 작성하지 않아도 되고, 이는 개발 시간 단축과 편리성을 가져다준다.
💡 올바른 recode의 Constructor는 어떤 것일까?
This customization is intended to be used for validation and should be kept as simple as possible.
recode 생성자의 규칙을 본다면 이런 생각이 든다..
❓ this 예약어를 사용할 수 있을까요?
❓ 제공되는 생성자와 동일한 생성자를 따로 만들 수 있을까요?
❓ compact constructor(컴팩트 생성자)는 무엇인가요?
하나하나 알아보고, 답변을 다시 달아보자!
recode의 모든 필드를 가지는 생성자외에는 모두 “보조 생성자”이다. 단지 우리가 생각하는 생성자의 형태일뿐이다.
따라서, 객체를 생성할 수 없기 때문에 진짜 생성자를 this예약어를 통해서 호출해야하는 것이다.
public record RecodeDto(String s,int i) {
public RecodeDto(int i) {
this("s",i);
}
}
진짜 생성자의 앞부분에 주입된다. 따라서 this
을 쓸 수 없는 것! 대신 생성자의 매개변수를 참조하는 것은 가능하다.
컴팩트 생성자와 모든 필드를 가지는 생성자를 동시에 사용할 수 없는 것!
❓ this 예약어를 사용할 수 있을까요?
새로운 생성자를 만들 수 없기 때문에, 객체 초기화와생성을 위해서는 this를 써야만 한다.!
❓ 제공되는 생성자와 동일한 생성자를 따로 만들 수 있을까요?
만들 수 있다! 그러나 이 경우에는 진짜 생성자이기 때문에, this를 쓰는 것이 아니라 직접 값 할당을 해줘야한다.
❓ compact constructor(컴팩트 생성자)는 무엇인가요?
제공되는 생성자내에서 값할당이 발생하기 전 호출되는 생성자다. 유효성 검사를 위해서만 사용하도록하자. (자바가 제안하는 방향)
레코드는 엔티티로 쓸 수 없다. 또한 상속이 불가능하면서 불변객체다.
그러니까 Dto로만 사용하자.
응답 객체나 요청 객체를 Dto로 받으면 편리하다!!
규칙이 너무 복잡하다. 이유를 모르겟다 싶었는데 오히려 더 공부히니까
규칙이 너무 단순하다!