ddingurri
유원준의 개발로그
ddingurri
전체 방문자
오늘
어제
  • 전체글 (37)
    • PS (7)
      • BOJ (5)
      • Programmers (0)
      • 후기 (2)
    • CS (22)
      • Data Structure (0)
      • Java (6)
      • OOP (2)
      • Spring (7)
      • WEB (3)
      • Database (4)
    • Develop (2)
    • Books (2)
    • Daily (4)
      • moments (0)
      • 회고 (4)

블로그 메뉴

    공지사항

    인기 글

    태그

    • 객체지향의 사실과 오해 1장
    • 백준 주사위 굴리기2
    • 상어 초등학교
    • 삼성 문제집 파이썬
    • 23288 파이썬
    • 객사오 2장
    • MySQL
    • 객체지향의 사실과 오해 리뷰
    • 상어 중학교
    • 객체지향의 사실과 오해 요약
    • 주사위굴리기2
    • 객체지향의 사실과 오해 후기
    • 책 스터디
    • SWEA
    • 주사위 굴리기2 파이썬
    • mysql 소수점
    • 주사위굴리기2 파이썬
    • 상어 중학교 python3
    • 백준 주사위 굴리기2 파이썬
    • 21609 파이썬
    • 객체지향의 사실과 오해 2장
    • 스프링
    • 상어 중학교 python
    • mysql float
    • float 소수점
    • 객체지향의 사실과 오해
    • Spring
    • 주사위 굴리기2
    • 백준
    • Java

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    ddingurri

    유원준의 개발로그

    [Spring] @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor의 차이점 간단 정리.
    CS/Spring

    [Spring] @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor의 차이점 간단 정리.

    2023. 4. 24. 03:06

    스프링 코드를 보다 보면 항상 엔티티 클래스 위에 저 세가지 어노테이션이 종종 붙어 있는 경우를 보았다.

     

    지난 포스트에 DI의 세가지 방법에 관한 글을 정리하고 나니

     

    아래의 세 어노테이션을 정리할 필요성이 느껴져 해당 어노테이션들도 공부해보려고 한다!

    • @NoArgsConstructor
    • @RequiredArgsConstructor
    • @AllArgsConstructor

     

    @NoArgsConstructor

     

    @NoArgsConstructor는, 매개변수를 갖지 않는 기본 생성자를 생성해준다. 

    @NoArgsConstructor는 주로 access = AccessLevel.PROTECTED 를 설정하여 무분별한 객체 생성을 막는 용도로 쓰인다.

     

    해당 속성을 부여하면 기본 생성자에 접근 제어가 되므로, 결국 해당 클래스에서 지정한 생성자를 통해 객체를 생성할 수 밖에 없게 된다. 따라서 기본 생성자를 이용한 무분별한 객체 생성을 방지할 수 있다.

     

     

    @RequiredArgsConstructor

    @RequiredArgsConstructor는 final로 선언된 필드와 not null 조건이 붙은 필드(ex. PK, @Column(nullable = false)이 설정된 column)에 한하여 생성자를 만들어준다.

     

     

    @AllArgsConstructor

    @AllArgsConstructor는 해당 클래스 내에 존재하는 모든 필드를 매개변수로 하는 생성자를 만들어준다.

     

    Q) 그럼 무조건 @AllArgsConstructor를 생성하면 좋지 않을까?

     

    A) 만약 생성자를 통해 필드를 초기화할 때, 필요 없는 필드가 존재하는 경우가 있다. 

    이러한 경우 결국 또 다른 생성자를 새로 작성해 주어야 하므로, 자칫 여러 생성자가 중복 작성되어 코드의 가독성을 떨어뜨릴 우려가 있다.

     

    이를 위해 @Builder 패턴을 이용한다고 한다.

    https://pamyferret.tistory.com/67

    저작자표시 (새창열림)

    'CS > Spring' 카테고리의 다른 글

    [Spring] DI의 세 가지 방법(필드 주입, 생성자 주입, setter 주입)  (0) 2023.04.21
    [Spring] 스프링에서 빈 객체를 등록하는 방법(@Bean, @Component)  (0) 2023.04.14
    [Spring] 비즈니스 로직이란?  (0) 2023.04.08
    [Spring] Controller, Service, Repository  (0) 2023.04.08
    [Spring] Entity, DTO, VO 무슨 차이야?  (0) 2023.04.07
      'CS/Spring' 카테고리의 다른 글
      • [Spring] DI의 세 가지 방법(필드 주입, 생성자 주입, setter 주입)
      • [Spring] 스프링에서 빈 객체를 등록하는 방법(@Bean, @Component)
      • [Spring] 비즈니스 로직이란?
      • [Spring] Controller, Service, Repository
      ddingurri
      ddingurri

      티스토리툴바