π‘ Java λΌμ΄λΈλ¬λ¦¬λ‘ κ°λ°μ νλ©΄μ κΈ°κ³μ μΌλ‘ μμ±νκ² λλ Getter, Setter, ToString λ±μ λ©μλ μμ± μ½λλ₯Ό AnnotationμΌλ‘ λμ ν΄ μ½λ λ€μ΄μ΄νΈλ₯Ό λμμ€
public class Car {
private String seqNumber;
private String id;
private String name;
public Car() {}
public Car(String seqNumber, String id, String name) {
this.seqNumber = seqNumber;
this.id = id;
this.name = name;
}
public String getSeqNumber() {
return seqNumber;
}
public void setSeqNumber(String seqNumber) {
this.seqNumber = seqNumber;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Car{" +
"seqNumber='" + seqNumber + '\'' +
", id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Car {
private String seqNumber;
private String id;
private String name;
}
π‘ Lombokμμ μ¬μ©νλ μ΄λ Έν μ΄μ !!
Lombokμ μ΄λ Έν μ΄μ μ μ¬μ©νκΈ° μν΄μλ gradleμ dependenciesμ
implementation 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
λ₯Ό μΆκ°ν΄μ€μΌ νλ€.
@Getter & @Setter
μ€μ§μ μΌλ‘ κ°μ₯ λ§μ΄ νμ©λλ μ΄λ Έν μ΄μ μ΄λ€.
@Getter : Getter λ©μλ μμ±
@Setter : Setter λ©μλ μμ±
μ΄λ Έν μ΄μ μ ν΄λμ€ μμ μμ±νλ©΄ ν΄λΉ ν΄λμ€μ λͺ¨λ λ³μμ μ μ©μ΄ κ°λ₯νκ³ , λ³μ μ΄λ¦ μμ μμ±νλ©΄ ν΄λΉ λ³μμλ§ μ μ©μ΄ λλ€.
@Getter
public class Car {
@Setter
private String seqNumber;
private String id;
private String name;
private String color;
private Integer serialNumber;
private boolean isOnSale;
}
/** μ»΄νμΌ μλ£ μμ€ **/
public class Car {
private String seqNumber;
private String id;
private String name;
private String color;
private Integer serialNumber;
private boolean isOnSale;
public Car() {
}
public String getSeqNumber() {
return this.seqNumber;
}
public String getId() {
return this.id;
}
public String getName() {
return this.name;
}
public String getColor() {
return this.color;
}
public Integer getSerialNumber() {
return this.serialNumber;
}
public boolean isOnSale() {
return this.isOnSale;
}
public void setSeqNumber(String seqNumber) {
this.seqNumber = seqNumber;
}
}
/**
@Getter μ΄λ
Έν
μ΄μ
μ ν΄λμ€ μλ¨μ μ μ©ν¨μΌλ‘μ¨ λͺ¨λ λ³μμ λν Getter λ©μλκ° μμ±λ¨.
@Setter μ΄λ
Έν
μ΄μ
μ seqNumber λ³μμλ§ μ μ©νκΈ° λλ¬Έμ ν΄λΉ λ³μμ Setter λ©μλκ° μμ±λ¨
**/
@ToString
@ToString
Β μ΄λ
Έν
μ΄μ
μ ν΄λΉ ν΄λμ€μ ToString λ©μλλ₯Ό μμ±ν΄μ€λ€.
μΆλ ₯μ μμΉ μλ λ³μ μμΒ @ToString.Exclude
Β μ΄λ
Έν
μ΄μ
μ μ μ©νλ©΄ μΆλ ₯μ μ μΈνλ€.
λΆλͺ¨ ν΄λμ€μ λν΄μλ toStringμ μ μ©νκ³ μ νλ€λ©΄Β @ToString(callSuper = true)
Β μ΄λ
Έν
μ΄μ
μ μ μ©νλ©΄ λλ€.
@ToString
public class Car {
private String seqNumber;
private String id;
private String name;
private String color;
private Integer serialNumber;
@ToString.Exclude
private boolean isOnSale;
}
/** μ»΄νμΌ μλ£ μμ€ **/
public class Car {
private String seqNumber;
private String id;
private String name;
private String color;
private Integer serialNumber;
private boolean isOnSale;
@Override
public String toString() {
return "Car{" +
"seqNumber='" + seqNumber + '\'' +
", id='" + id + '\'' +
", name='" + name + '\'' +
", color='" + color + '\'' +
", serialNumber=" + serialNumber
'}';
}
}
@Builder
@AllArgsConstructor & @NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
βλͺ¨λ νλ κ°μ νλΌλ―Έν°λ‘ λ°λ μμ±μ μμ±
@NoArgsConstructor
β νλΌλ―Έν°κ° μλ κΈ°λ³Έ μμ±μ μμ±
β @Entity μ μ© μ κΈ°λ³Έ μμ±μλ νμμ΄κΈ° λλ¬Έμ 둬볡μμ μ 곡νλ μ΄ μ΄λ Έν μ΄μ μ μ¬μ©νλ€.
β @Builderμ @NoArgsConstructorλ₯Ό ν¨κ» μ¬μ© μ λͺ¨λ λ§€κ° λ³μλ₯Ό λ°λ μμ±μκ° μμΌλ©΄ μλ¬κ° λ°μνλ€.
@AllArgsConstructor
@NoArgsConstructor
public class Car {
private String seqNumber;
private String id;
private String name;
private String color;
private Integer serialNumber;
private boolean isOnSale;
}
/** μ»΄νμΌ μλ£ μμ€ **/
public class Car {
private String seqNumber;
private String id;
private String name;
private String color;
private Integer serialNumber;
private boolean isOnSale;
public Car () {}
public Car(String seqNumber, String id, String name, String color, Integer serialNumber, boolean isOnSale) {
this.seqNumber = seqNumber;
this.id = id;
this.name = name;
this.color = color;
this.serialNumber = serialNumber;
this.isOnSale = isOnSale;
}
}
/**
@NoArgsConstructor μ μ©ν¨μΌλ‘μ¨ κΈ°λ³Έ μμ±μκ° μμ±λ¨
@AllArgsConstructor μ μ©ν¨μΌλ‘μ¨ λͺ¨λ λ³μμ λν μμ±μκ° μμ±λ¨
**/
@RequiredArgsConstructor
νΉμ λ³μμ λν μμ±μλ₯Ό μμ±ν΄μ€λ€.
μ£Όλ‘ μμ‘΄μ± μ£Όμ , μ¦ DI μ νΈμλ₯Ό μν΄ μ¬μ©λκ³€ νλ€.
ν΄λΉ μ΄λ Έν μ΄μ μΌλ‘ μμ±λ μμ±μμ μΈμλ₯Ό μΆκ°νλ 쑰건μ μλμ κ°λ€.
λ³μλ₯Ό finalλ‘ μ μΈ
λ³μμ @NonNull μ΄λ Έν μ΄μ μ μ μ©
@RequiredArgsConstructor
public class Car {
private final String seqNumber;
private final String id;
private String name;
private String color;
@NonNull
private Integer serialNumber;
private boolean isOnSale;
}
/** μ»΄νμΌ μλ£ μμ€ **/
public class Car {
private final String seqNumber;
private final String id;
private String name;
private String color;
@NonNull
private Integer serialNumber;
private boolean isOnSale;
public Car(String seqNumber, String id, @NonNull Integer serialNumber) {
if (serialNumber == null) {
throw new NullPointerException("serialNumber is marked non-null but is null");
} else {
this.seqNumber = seqNumber;
this.id = id;
this.serialNumber = serialNumber;
}
}
}
/**
finalλ‘ μ μΈνκ±°λ @NonNull μ΄λ
Έν
μ΄μ
μ΄ μ μ©λ λ³μλ€λ§μ μΈμλ‘ λ°λ μμ±μκ° μμ±λ¨.
**/
@NonNull
μμ±μμμ λ³μμ λν NPE(Null Pointer Exception)λ₯Ό κ²μ¦ν΄μ€λ€.
@RequiredArgsConstructor
public class Car {
private final String seqNumber;
@NonNull
private final String id;
private String name;
private String color;
@NonNull
private final Integer serialNumber;
private boolean isOnSale;
}
/** μ»΄νμΌ μλ£ μμ€ **/
public class Car {
private final String seqNumber;
@NonNull
private final String id;
private String name;
private String color;
@NonNull
private final Integer serialNumber;
private boolean isOnSale;
public Car(String seqNumber, @NonNull String id, @NonNull Integer serialNumber) {
if (id == null) {
throw new NullPointerException("id is marked non-null but is null");
} else if (serialNumber == null) {
throw new NullPointerException("serialNumber is marked non-null but is null");
} else {
this.seqNumber = seqNumber;
this.id = id;
this.serialNumber = serialNumber;
}
}
}
/**
μμ±μλ‘ Objectλ₯Ό μμ±ν λ, @NonNullμ΄ μ μ©λ λ³μμ λν Null 체ν¬λ₯Ό μ§ννλ€.
**/
@Date
@ToString
,Β @EqualsAndHashCode
,Β @Getter
,Β @Setter
,Β @RequiredArgsConstructor
λ₯Ό μλμμ± μμΌμ€λ€.
μ€λ¬΄μμλ λ무 무κ²κ³ κ°μ²΄μ μμ μ±μ μ§ν€κΈ° λλ¬ΈμΒ @Data
μ νμ©μ μ§μνλ€.
@Builder
@Builder μ΄λ Έν μ΄μ μ ν΄λΉ ν΄λμ€μ μμ±μμ Builder ν¨ν΄μ μ μ©μμΌμ€λ€.
λͺ¨λ λ³μμ μ μ©μν€λ €λ©΄ ν΄λμ€ μλ¨μ @Builder λ₯Ό μ μ©νκ³ , νΉμ λ³μμ λν Buildλ₯Ό μνλ€λ©΄
μμ±μλ₯Ό μμ±νκ³ ν΄λΉ μμ±μ μμ @Builder λ₯Ό μ μ©νλ©΄ λλ€.
public class Car {
private String seqNumber;
private String id;
private String name;
private String color;
private Integer serialNumber;
private boolean isOnSale;
@Builder
public Car(String seqNumber, String id, Integer serialNumber) {
this.seqNumber = seqNumber;
this.id = id;
this.serialNumber = serialNumber;
}
}
/** μ¬μ© μμ **/
public class CarFactory {
public Car initCar(String seqNumber, String id, Integer serialNumber) {
Car car = Car.builder()
.seqNumber(seqNumber)
.id(id)
.serialNumber(serialNumber)
.build();
return car;
}
}
/**
@Builder μ΄λ
Έν
μ΄μ
μ ν΅ν΄ ν΄λΉ Objectμ λν΄ Builder ν¨ν΄μ΄ μ μ©λ κ²μ νμΈν μ μλ€.
step-by-stepμΌλ‘ νμν μΈμλ₯Ό μ νν΄μ addνμ¬ νλ²μ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
**/
Builder Pattern
κ°μ²΄λ₯Ό μμ±ν λ, νν μ¬μ©λλ λμμΈ ν¨ν΄ μ€ νλμ΄λ€.
Car car = Car.builder()
.seqNumber(seqNumber)
.id(id)
.serialNumber(serialNumber)
.build();
μ₯μ
@Log κ΄λ ¨ μ΄λ Έν μ΄μ
Lombokμ μ¬λ¬κ°μ§μ Log μ΄λ Έν μ΄μ μ μ 곡ν΄μ€λ€.
λ‘κ·Έ μ΄λ Έν μ΄μ μ μ μ©νλ©΄ ν΄λΉ ν΄λμ€μ λν λ‘κ·Έ ν΄λμ€λ₯Ό μλμΌλ‘ μμ±νλ€.
@Log4j
public class Car {
private String seqNumber;
private String id;
private String name;
private String color;
private Integer serialNumber;
private boolean isOnSale;
}
/** μ»΄νμΌ μλ£ μμ€ **/
public class Car {
private static final Logger log = Logger.getLogger(Car.class);
private String seqNumber;
private String id;
private String name;
private String color;
private Integer serialNumber;
private boolean isOnSale;
}
/**
μ μ©μν¨ Log μ΄λ
Έν
μ΄μ
μ λ§λ Log ν΄λμ€λ₯Ό μλμΌλ‘ μμ±ν΄μ€λ€.
**/
μ½λ
import lombok.*;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
public class TestDto {
private String name;
private int age;
}
π‘ Lombok Annotation μ μ© μλ¬
dependencies**{**annotationProcessor('org.projectlombok:lombok:')}
μΆκ°