1. 파라미터(Parameter) 가 무슨 뜻인가요?
파라미터는 함수나 메서드를 호출할 때 전달하는 값을 받는 변수를 의미합니다.
예를 들어, 아래 코드에서 a와 b가 바로 파라미터입니다.
public int add(int a, int b) { // 여기서 'int a'와 'int b'가 파라미터입니다.
return a + b;
}
// 이 메서드를 호출할 때는 다음과 같이 값을 전달합니다.
int result = add(5, 3); // 여기서 '5'와 '3'은 '인자(Argument)' 라고 부릅니다.
기본 생성자(Default Constructor)가 무슨 뜻인가요?
기본 생성자는 파라미터(인자)가 없는 생성자를 말합니다. 객체를 만들 때 초기값 없이 객체만 생성하는 역할을 합니다
Java에서는 클래스에 생성자가 하나도 없을 경우, 컴파일러가 자동으로 아래와 같은 기본 생성자를 만들어줍니다.
// 파라미터가 없는 생성자
public MyClass() {
// 아무런 초기화 작업도 하지 않음
}
1. @NoArgsConstructor 를 사용하지 않은 경우
Person 클래스를 만들고, 기본 생성자와 다른 생성자를 직접 작성해야 합니다.
class Person {
private String name;
private int age;
// 파라미터가 없는 기본 생성자
public Person() {
System.out.println("기본 생성자가 호출되었습니다.");
}
// name 과 age를 파라미터 받는 생성자
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
2. @NoArgsConstructor 를 사용한 경우
위의 클래스와 완전하게 동일하게 동작하지만, 코드가 훨씬 간결해 집니다.
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data // getter, setter, toString 등을 자동으로 만들어줍니다.
@NoArgsConstructor // 파라미터 없는 생성자를 자동으로 만들어 줍니다.
@AllArgsConstructor // 모든 파라미터를 받는 생성자를 자동으로 만들어 줍니다.
class Person {
private String name;
private int age;
}
// Main 클래스에서 객체를 생성하는 방법
public class Main {
public static void main(String[] args) {
// @NoArgsConstructor 가 만들어준 기본 생성자를 이용
// Person person1 = new Person();
person1.setName("홍길동");
person1.setAge(30);
System.out.println("기본 생성자로 만든 객체: " + person1);
}
}
위 예시에서 @NoArgsConstructor 덕분에 public Person() {...} 코드를 직접 작성하지 않고도
new Person() 처럼 파라미터 없이 객체를 만들 수 있습니다.
요약하자면, @NoArgsConstructor 는 반복적 생성자 코드는 줄여줘서 개발을 더 빠르고 편하게 해주는 도구라고
생각하시면 됩니다.
추가해설
파라미터가 없는 기본 생성자란?
생성자 는 붕어빵 기계 틀과 같습니다. 객체(붕어 빵)를 만들어 내는 역할을 합니다
그리고
파라미터 는 붕어빵 틀에 넣는 재료라고 생각하면 됩니다.
파라미터가 있는 생성자 : "팥, 슈크림을 넣어서 붕어빵을 만들어줘" 라고 말하는 것과 같습니다
재료(파라미터)를 지정해서 붕어빵(객체)를 만듭니다.
파라미터가 없는 생성자(기본 생성자) : " 그냥 아무 재료 없이 붕어빵 틀만 찍어내줘" 라고 말하는 것과
같습니다. 아무런 재료도 넣지 않고 껍데기(기본 객체)만 만드는 겁니다.
@NoArgsConstructor 의 역할
@NoArgsConstructor 는 이 아무 재료 없는 붕어빵 틀 을 여러분이 직접 만들지 않아도,
롬복(Lombok) 이라는 도구가 알아서 만들어주는 마법같은 도구입니다.
// @NoArgsConstructor 가 없다면 이렇게 직접 만들어야 합니다.
public class Person {
// ... 필드들
public Person() { // <- 이게 기본 생성자 입니다.
// 아무것도 안 해도 되지만, 꼭 만들어야 합니다.
}
}
// @NoArgsConstructor 가 있다면 이렇게 깔끔해집니다.
@NoArgsConstructor // <- 이 한 줄이 위 코드를 대신해줍니다.
public class Person {
// ... 필드들
// 자동으로 만들어주니 직접 작성할 필요가 없습니다.
}
즉, @NoArgsConstructor 는 아무것도 없는 빈 객체를 만들어주는 도구 를
코드로 직접 치지 않아도, 한줄로 간단하게 해결해 주는 역할을 합니다.
붕어빵 틀 = 생성자
붕어빵 재료 = 파라미터
파라미터가 없는 생성자 (기본 생성자)
재료를 넣지 않고, 빈 붕어빵 껍데기를 만드는 것과 같습니다.
일단 붕어빵을 만든 후에 나중에 팥을 넣을 수도 있습니다.
특징 : 객체(붕어빵)를 만들 때 초기값을 지정하지 않습니다.
언제 사용 : 일단 객체를 만든 다음, 필요에 따라 값을 설정할 때 주로 사용합니다.
class Person {
private String name;
private int age;
// 파라미터가 없는 생성자 (기본 생성자)
public Person() {
System.out.println("기본 생성자가 호출되었습니다. 빈 객체를 만들어요");
}
// getter와 setter
public String getName() { return name;}
public void setName(String name) {this.name = name; }
public int getAge() {return age;}
public void setAge(int age) {this.age = age; }
}
public class Main {
public static void main(String[] args) {
// 1. 파라미터가 없는 생성자로 빈 객체(빈 붕어빵) 만들기
Person person1 = new Person();
// 2. 나중에 값을 채워 넣기 (팥 넣기)
person1.setName("홍길동");
person1.setAge(25);
System.out.println("만들어진 사람의 이름 :" + person1.getName()); // 출력 : 홍길동
System.out.println("만들어진 사람의 나이" + person1.getAge()); // 출력 : 25
}
}
파라미터가 있는 생성자
붕어빵을 만들 때 재료(팥, 슈크림 등)를 미리 넣어서 만드는 것과 같습니다. 객체가 만들어지는 순간부터
원하는 값을 가지고 시작합니다.
특징 : 객체를 만들 때 필수적인 초기값을 반드시 지정해야 합니다.
언제 사용 : 객체를 만들 때부터 모든 속성을 완벽하게 채우고 싶을 때 사용합니다.
class Person {
private String name;
private int age;
// 파라미터가 있는 생성자
public Person(String name, int age) {
// 전달받은 값(파라미터)으로 객체의 필드를 초기화합니다.
this.name = name;
this.age = age;
System.out.println("파라미터가 있는 생성자가 호출되어습니다. 재료를 채워서 객체를 만듭니다.");
}
// getter와 setter
public String getName() {return name; }
public void setName(String name) {this.name = name;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
}
public class Main {
public static void main(String[] args) {
// 1. 파라미터가 있는 생성자로 객체(재료를 넣은 붕어빵) 만들기
Person person2 = new Person("김철수, 30");
// 2. 이미 값이 채워져 있으므로 바로 사용 가능
Systen.out.println("만들어진 사람의 이름 : " + person2.getName() ); // 출력 : 김철수
System.out.println("만들어진 사람의 나이" + person2.getAge()); // 출력 : 30
}
}
가장 큰 차이점 요약
구분 | 파라미터가 없는 생성자(기본) | 파라미터가 있는 생성자
객체 생성 시점 | 빈 객체를 만들고, 나중에 값을 채워 넣음 | 객체 생성과 동시에 값을 모두 채워 넣음
장점 | 유연하게 객체를 생성할 수 있음 | 코드 한 줄로 완벽한 객체를 만들 수 있어 편리함
이 중 @NoArgsConstructor 는 이중에서 '파라미터 없는 생성자'를 자동으로 만들어주는 도구입니다.
@AllArgsConstructor 은 클래스에 있는 모든 필드를 파라미터로 받는 생성자를 자동으로 만들어주는 도구입니다.
붕어빵 비유로 다시 설명드리겠습니다.
@NoArgsConstructor : "재료 없이 일단 빈 붕어빵 틀만 찍어내줘"
@AllArgsConstructor : "팥, 슈크림 등 모든 재료를 완벽하게 다 넣어서 붕어빵을 만들어줘"
@AllArgsConstructor의 역할
우리가 Person 이라는 클래스를 만들고, name 과 age 라는 두 개의 필드를 가질 때,
이 두 필드를 모두 파라미터로 받는 생성자를 직접 만들지 않아도, @AllArgsConstructor가 알아서 만들어줍니다
1. @AllArgsConstructor 를 사용하지 않은 경우
name과 age 필드를 초기화 하는 생성자를 직접 작성해야 합니다.
public class Person {
private String name;
private int age;
// 모든 필드를 파라미터로 받는 생성자를 직접 작성
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
2. @AllArgsConstructor를 사용한 경우
위의 코드와 동일한 기능을 하지만, 코드가 훨씬 간결해 집니다.
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor // 이 어노테이션이 위 코드를 대신해줍니다.
public class Person {
private String name;
private int age;
}
@NoArgsConstructor와 @AllArgsConstructor를 함께 사용했을 때의 예시코드
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Data;
@Data // @Getter, @Setter, @ToString 등
@NoArgsConstructor // 빈 객체를 만드는 기본 생성자
@AllArgsConstructor // 모든 필드를 채워서 객체를 만드는 생성자
public class Person {
private String name;
private int age;
}
public class Main {
public static void main(String[] args) {
System.out.println("--- @NoArgsConstructor로 객체 생성")
// 빈 붕어빵 껍데기를 만들고, 나중에 재료를 넣습니다.
Person person1 = new Person();
person1.setName("홍길동");
person1.setAge(25);
System.out.println("person1" + person1); // person1 : Person(name = 홍길동, age = 25)
System.out.println("\n--- @AllArgsConstructor로 객체 생성 ---")
// 모든 재료를 한 번에 넣어서 붕어빵을 만듭니다.
Person person2 = new Person("김철수", 30);
System.out.println("person2:" + person2); // person2 : person(name = 김철수, age =30)
}
}
@AllArgsConstructor 는 왜 쓸까?
@AllArgsConstructor 는 특히 불변 객체 (Immutable Object)를 만들 때 아주 유용합니다.
객체가 처음 생성될 때 모든 값이 완벽하게 채워져야 나중에 값이 변경될 위험이 없어지기 때문입니다.
결론적으로, @AllArgsConstructor 는 객체를 생성하는 시점에 모든 필드에 값을 한꺼번에 넣고 싶을 때
사용하는 편리한 도구입니다.
'알게된것,복습한것,헷갈렸던것 정리' 카테고리의 다른 글
| LIKE와 =(등호) 차이 (0) | 2025.10.03 |
|---|---|
| 오버로딩(Overloading) 이란? (0) | 2025.09.27 |
| @NoArgsConstructor, @AllArgsConsturctor, @RequiredArgsConstructor 정리 (0) | 2025.09.11 |
| 테스트코드, 단위테스트 (2) | 2025.07.17 |
| JPA 정의와 설정 (1) | 2025.07.15 |