자바의 Recode를 알아보자! ps.생성자 규칙 왜이렇게 복잡

코린이서현이·2024년 6월 28일
0

Java

목록 보기
46/46
post-thumbnail

들어가면서

레코드가 새로 생긴 건 알겠는데... 이게 뭔지 도대체 모르겠어서 찾아보니까 
더 모르겠어서 영어 검색까지 동원해서 알아냈따! 👏👏 

자바의 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가 필요한 이유

🍦 우리는 이렇게 보일러플레이트 코드를 계속해서 작성해야한다.
이런 보일러플레이트 코드의 안정성은 이미 검증되었다.

따라서 보일러 플레이트 코드를 더 편하게 사용할 수 있는 방법은 없을까?

👉 Recode를 사용하자.

recode란?

  • 자바 14에서 새롭게 추가된 타입이다.
  • 데이터를 전달하는 Dto로 편하게 사용할 수 있다.
    • 클래스와 필드에 모두 final예약어가 붙는다. 따라서, 상속이 불가능하고, 값 변경이 불가능하다.
  • 자바 16부터 메서드를 추가할 수 있다.
  • 생성자 커스터마이징을 통해 값을 강제하는 방법이 가능하다.
    public record PersonRecode(String name, int age, String codeNumber) {
    
        public PersonRecode(String name, int age) {
            this.name = name;
            this.age = age;
            this.codeNumber = "001";
        }
    }

recode 의 지원 메소드

  • 생성자
  • getters 메서드 ( getFiledName X, fildName O)
  • equals 메서드
  • hashcode 메서드
  • toString 메서드

💡 위의 모든 코드는 컴파일러가 자동으로 만들어준다. 따라서 개발자가 추가로 작성하지 않아도 되고, 이는 개발 시간 단축과 편리성을 가져다준다.

recode의 생성자 커스터마이징

💡 올바른 recode의 Constructor는 어떤 것일까?

  • 유효성 검사를 위해서만 사용한다. 이 외의 기능은 넣지 않고, 간단한 형태를 유지해야한다.

    This customization is intended to be used for validation and should be kept as simple as possible.

너무 복잡한 recode의 규칙,,? ㅜㅜ

recode 생성자의 규칙을 본다면 이런 생각이 든다..

❓ this 예약어를 사용할 수 있을까요?
❓ 제공되는 생성자와 동일한 생성자를 따로 만들 수 있을까요?
❓ compact constructor(컴팩트 생성자)는 무엇인가요?

하나하나 알아보고, 답변을 다시 달아보자!

recode의 생성자는 모두 가짜야!?

recode의 모든 필드를 가지는 생성자외에는 모두 “보조 생성자”이다. 단지 우리가 생각하는 생성자의 형태일뿐이다.

따라서, 객체를 생성할 수 없기 때문에 진짜 생성자를 this예약어를 통해서 호출해야하는 것이다.

  public record RecodeDto(String s,int i) {
    public RecodeDto(int i) {
        this("s",i);
    }
}

컴팩트 생성자는 언제 사용되나?

진짜 생성자의 앞부분에 주입된다. 따라서 this을 쓸 수 없는 것! 대신 생성자의 매개변수를 참조하는 것은 가능하다.

그렇기 때문에,

컴팩트 생성자와 모든 필드를 가지는 생성자를 동시에 사용할 수 없는 것!

그러면 질문을 수정해보자!

❓ this 예약어를 사용할 수 있을까요?
새로운 생성자를 만들 수 없기 때문에, 객체 초기화와생성을 위해서는 this를 써야만 한다.!

❓ 제공되는 생성자와 동일한 생성자를 따로 만들 수 있을까요?
만들 수 있다! 그러나 이 경우에는 진짜 생성자이기 때문에, this를 쓰는 것이 아니라 직접 값 할당을 해줘야한다.

❓ compact constructor(컴팩트 생성자)는 무엇인가요?
제공되는 생성자내에서 값할당이 발생하기 전 호출되는 생성자다. 유효성 검사를 위해서만 사용하도록하자. (자바가 제안하는 방향)

마지막으로 레코드를 사용하기에 좋은 상황

레코드는 엔티티로 쓸 수 없다. 또한 상속이 불가능하면서 불변객체다.
그러니까 Dto로만 사용하자.
응답 객체나 요청 객체를 Dto로 받으면 편리하다!!

마무리하면서

규칙이 너무 복잡하다. 이유를 모르겟다 싶었는데 오히려 더 공부히니까 
규칙이 너무 단순하다! 

참고 자료

profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글