[TIL] 백엔드 부트캠프 7주차 (2024/08/30 금) @NoArgsConstructor와 protected 생성자 사용법

2024. 9. 1. 00:04·TIL 🔖/TIL

💻Today's Schedule

09:00 ~ 10:00 CODEKATA
10:00 ~ 11:00 개인 학습
11:00 ~ 12:00 팀미팅/코드리뷰
12:00 ~ 13:00 점심 식사
13:00 ~ 16:00 개인 학습
16:00 ~ 18:00 베이직 특강 8회차
18:00 ~ 19:00 저녁 식사
19:00 ~ 21:00 개인 학습

✍ Today I Learned

 CODEKATA

  • 알고리즘
  • SQL

Spring 학습 : 객체 생성 제어하기 @NoArgsConstructor와 protected 생성자 사용법

1. @NoArgsConstructor 어노테이션

  • @NoArgsConstructor는 롬복(Lombok) 라이브러리에서 제공하는 어노테이션으로, 클래스에 기본 생성자(매개변수가 없는 생성자)를 자동으로 생성해 준다.
기본 생성자란?
  • 기본 생성자는 클래스의 필드들을 초기화하는 생성자로, 아무런 매개변수도 받지 않는 생성자다.
  • 예를 들어, 다음과 같은 클래스가 있을 때 :
public class MyClass {
    private int value;

    // 기본 생성자
    public MyClass() {
        this.value = 0; // 또는 다른 기본 값
    }
}
  • 위의 코드에서 MyClass는 기본 생성자를 가진다. 이 생성자는 new MyClass()로 객체를 생성할 때 호출된다.

 

@NoArgsConstructor를 사용한 예시:

import lombok.NoArgsConstructor;

@NoArgsConstructor
public class MyClass {
    private int value;

    // @NoArgsConstructor에 의해 자동으로 생성된 기본 생성자
    // public MyClass() { }
}
  • 위 예시에서, @NoArgsConstructor 어노테이션을 사용하면 롬복이 자동으로 기본 생성자를 생성해 준다. 따라서, 별도로 생성자를 작성할 필요가 없다.

 

2. protected 접근 제어자

  • protected는 자바에서 제공하는 접근 제어자 중 하나로, 클래스의 멤버(필드, 메서드, 생성자)에 대한 접근 수준을 결정한다.
  • protected의 의미
    • 동일 패키지 내의 다른 클래스: protected로 선언된 멤버는 동일 패키지 내의 다른 클래스에서 접근할 수 있다.
    • 상속 관계에 있는 하위 클래스: 하위 클래스가 상속받는 경우, 다른 패키지에 있더라도 protected 멤버에 접근할 수 있다.
    • 외부 클래스: 동일 패키지에 있지 않거나, 상속 관계에 있지 않은 외부 클래스에서는 protected 멤버에 접근할 수 없다.
  • protected 생성자
    • protected로 선언된 생성자는 외부에서 직접 객체를 생성할 수 없게 보호하면서, 상속 관계에 있는 하위 클래스에서는 객체를 생성할 수 있게 해준다.

3. @NoArgsConstructor(access = AccessLevel.PROTECTED)

  • @NoArgsConstructor(access = AccessLevel.PROTECTED)는 기본 생성자를 생성하되, 그 접근 제어자를 protected로 설정한다.
import lombok.NoArgsConstructor;
import lombok.AccessLevel;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class MyClass {
    private int value;

    // 롬복이 생성한 protected 기본 생성자
    // protected MyClass() { }
}
  • 위 코드에서 @NoArgsConstructor(access = AccessLevel.PROTECTED)는 기본 생성자를 protected 접근 수준으로 생성한다. 이로 인해, 외부에서 직접 new MyClass()로 객체를 생성할 수 없으며, 동일 패키지나 하위 클래스에서만 이 생성자를 통해 객체를 생성할 수 있다.
왜 protected로 기본 생성자를 설정할까?
  1. JPA 엔티티 클래스: JPA는 엔티티 클래스를 관리하기 위해 기본 생성자가 필요하다. 하지만 이 생성자가 외부에서 호출되지 않도록 보호하고 싶을 때 protected 접근 제어자를 사용한다.
  2. 상속을 통한 확장 가능성 제공: 상속을 통해 클래스를 확장할 때, 하위 클래스에서만 기본 생성자를 사용할 수 있도록 제한하고 싶을 때 사용한다.
  3. 객체 생성 제어: 특정 클래스가 외부에서 인스턴스화되는 것을 방지하고 싶을 때 protected 생성자를 사용하여 인스턴스화 방법을 제어할 수 있다. 예를 들어, 팩토리 메서드를 통해서만 객체를 생성하도록 유도할 수 있다.

📝 회고


🔖 Tomorrow's Goal

'TIL 🔖/TIL' 카테고리의 다른 글
  • [TIL] 백엔드 부트캠프 8주차 (2024/09/03 화) 뉴스피드 프로젝트 : 팀프로젝트 테스트 고민하기
  • [TIL] 백엔드 부트캠프 8주차 (2024/09/02 월) 뉴스피드 프로젝트 : 설계
  • [TIL] 백엔드 부트캠프 7주차 (2024/08/26 월) 스케쥴 앱 JPA로 설계하기
  • [TIL] 백엔드 부트캠프 6주차 (2024/08/23 금) RestTemplate, Entity 연관 관계
fargoe
fargoe
    fargoe
    fargoewave
    fargoe
    GitHub
    전체
    오늘
    어제
    • 분류 전체보기 (166)
      • TIL 🔖 (140)
        • TIL (69)
        • 코딩테스트 (71)
      • DEV (14)
        • Java & Spring (7)
        • MySQL (3)
        • Git&Github (4)
      • 개발지식 (10)
        • 알고리즘 (2)
        • 자료구조 (8)
        • CS (0)
      • 3D (1)
        • Unity (1)
      • ETC (0)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
fargoe
[TIL] 백엔드 부트캠프 7주차 (2024/08/30 금) @NoArgsConstructor와 protected 생성자 사용법
상단으로

티스토리툴바