record

랏 뜨·2024λ…„ 12μ›” 18일

πŸ”Ž Overview

Β  금일 μŠ€ν”„λ§λΆ€νŠΈμ— κ΄€ν•΄μ„œ κ³΅λΆ€ν•˜λ˜ 도쀑, recordλΌλŠ” ν‚€μ›Œλ“œλ₯Ό λ°œκ²¬ν–ˆλ‹€.

Β  κ·Έλ™μ•ˆ record라 함은 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ‚˜ λ“€μ–΄λ΄€μ§€, μ‹€μ œλ‘œ μžλ°”μ—μ„œ ν•΄λ‹Ή ν‚€μ›Œλ“œλ₯Ό λ°œκ²¬ν•œ 적이 μ—†μ—ˆκΈ°μ— 이 ν‚€μ›Œλ“œκ°€ μ •ν™•νžˆ μ–΄λ–€ 역할을 ν•˜λŠ” μ§€ λ‹Ήμ—°νžˆ μ•Œ 리가 μ—†μ—ˆλ‹€.

Β  κ·Έλž˜μ„œ κΈˆμΌμ€ κ°„λ‹¨ν•˜κ²Œ 이 recordλΌλŠ” ν‚€μ›Œλ“œλŠ” μ–΄λ–€ 역할을 ν•˜λ©°, μ–Έμ œ μ‚¬μš©ν•˜λŠ” 것인지 μ •λ¦¬ν•΄λ³΄κ³ μž ν•œλ‹€.


πŸ“• record

  • λΆˆλ³€ 데이터 객체λ₯Ό ν‘œν˜„ν•˜λŠ” ν‚€μ›Œλ“œ
  • class λŒ€μ‹  μ‚¬μš©ν•  수 μžˆλŠ” ν‚€μ›Œλ“œ
  • Java 14 μ΄μƒμ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•œ μ˜ˆμ•½μ–΄


πŸ“‹ record의 νŠΉμ§•

1) λΆˆλ³€μ„±

  • λͺ¨λ“  ν•„λ“œλŠ” final 둜 μ„ μ–Έ
  • 객체가 μƒμ„±λœ μ΄ν›„λ‘œλŠ” ν•„λ“œ κ°’μ˜ 변경이 λΆˆκ°€λŠ₯

2) μžλ™ 생성 λ©”μ„œλ“œ

  • getter , toString() , equlas() , hashCode() λ“±μ˜ λ©”μ„œλ“œλ₯Ό μžλ™μœΌλ‘œ 생성

3) ꡬ쑰적 타이핑

  • λ‚΄λΆ€μ μœΌλ‘œ λ°μ΄ν„°λ§Œμ„ 포함
  • λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” κ²½μš°μ— μ‚¬μš©
    • λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ 포함할 μˆ˜λŠ” μžˆμ§€λ§Œ 주둜 데이터λ₯Ό λ‹΄μŒ
    • κ·Έ 자체둜 λΆˆλ³€μ„±μ„ μ œκ³΅ν•˜λŠ” λͺ©μ μ— μ‚¬μš©


❓ μ‚¬μš© μ˜ˆμ‹œ

public record PostWriteForm(String title, String content) {}

@RestController
@RequiredArgsConstructor
@RequestMapping("/posts")
public class PostController {
	private final PostService postService;

    @PostMapping("/write")
    public PostWriteForm writePost(@RequestBody PostWriteForm form) {
        return new PostWriteForm(form.title, form.content);
    }
}
  • record 생성 μ‹œ { }은 μƒλž΅ λΆˆκ°€λŠ₯
  • μžλ°” μ»΄νŒŒμΌλŸ¬λŠ” μžλ™μœΌλ‘œ title κ³Ό content 에 λŒ€ν•œ λ©”μ„œλ“œλ“€μ„ μžλ™μœΌλ‘œ 생성
    • getter , toString() ...
  • μš”μ²­ 받은 값을 record 에 λ§€ν•‘ ν›„ λ§€κ°œλ³€μˆ˜λ‘œ postService.write 에 전달

πŸ’ͺ record의 μ—­ν• 

  • λ ˆμ½”λ“œλŠ” 일반적으둜 λΆˆλ³€μ„± DTO둜 μ‚¬μš©
  • μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ μž‘μ„± κ°€λŠ₯
  • record 객체가 μˆœμˆ˜ν•˜κ²Œ λ°μ΄ν„°λ§Œμ„ λ‹΄λŠ” μš©λ„λΌλŠ” μ˜λ„λ₯Ό λͺ…ν™•ν•˜κ²Œ λ‚˜νƒ€λƒ„


πŸ€” 그럼 항상 class λŒ€μ‹  recordλ₯Ό μ‚¬μš©ν•΄λ„ 될까?

πŸ’‘ 항상 κ·Έλ ‡μ§€λŠ” μ•ŠμŒ

  • DTO 의 μ—­ν• λ‘œ class λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°λ„ μ—¬μ „νžˆ 많음

  • class λ₯Ό μ‚¬μš©ν•˜λŠ” 게 더 쒋은 경우
    • μƒμ†λ°›λŠ” DTO λ₯Ό μ‚¬μš©ν•˜κ³  싢은 경우
      • record λŠ” 상속이 λΆˆκ°€λŠ₯
    • DTO κ°€ λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ ν¬ν•¨ν•˜λŠ” 경우
    • record μ—μ„œ μžλ™ μƒμ„±λ˜λŠ” λ©”μ„œλ“œλ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜λŠ” 것이 μ•„λ‹Œ, μ»€μŠ€ν„°λ§ˆμ΄μ§•μ΄ ν•„μš”ν•  경우

μ°Έκ³ ) OpenAI. (2024).ChatGPT(4o)[Large language model].https://chatgpt.com/

profile
기둝

0개의 λŒ“κΈ€