๐ก Java ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ฐ๋ฐ์ ํ๋ฉด์ ๊ธฐ๊ณ์ ์ผ๋ก ์์ฑํ๊ฒ ๋๋ Getter, Setter, ToString ๋ฑ์ ๋ฉ์๋ ์์ฑ ์ฝ๋๋ฅผ Annotation์ผ๋ก ๋์ ํด ์ฝ๋ ๋ค์ด์ดํธ๋ฅผ ๋์์ค
์ฅ์
- ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์ฝ๋ ์๋ ์์ฑ์ ํตํ ์์ฐ์ฑ ์ฆ๊ฐ
- ์ฝ๋ ๋ค์ด์ดํธ๋ฅผ ํตํ ์ฝ๋ ๊ฐ๋ ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ ์ฆ๊ฐ
Ex>
๊ธฐ์กด ์ฝ๋
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 + '\'' +
'}';
}
}
Lombok ํ์ฉ ์ฝ๋
@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
- ๋น๋ ํจํด์ ์๋์ผ๋ก ์์ฑํด์ค๋ค.
- builder() : ๋น๋ ํด๋์ค์ ์ธ์คํด์ค ์์ฑ
- build() : ์ค์ ์์ฑ์ ํธ์ถํ์ฌ ๊ฐ์ฒด ์์ฑ
- @AllArgsConstructor & @NoArgsConstructor(access = AccessLevel.PROTECTED)
- @AllArgsConstructor
- ๋ชจ๋ ํ๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์์ฑ์ ์์ฑ
- @NoArgsConstructor
- ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ๊ธฐ๋ณธ ์์ฑ์ ์์ฑ
- @Entity ์ ์ฉ ์ ๊ธฐ๋ณธ ์์ฑ์๋ ํ์์ด๊ธฐ ๋๋ฌธ์ ๋กฌ๋ณต์์ ์ ๊ณตํ๋ ์ด ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ค.
- @Builder์ @NoArgsConstructor๋ฅผ ํจ๊ป ์ฌ์ฉ ์ ๋ชจ๋ ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฐ๋ ์์ฑ์๊ฐ ์์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- @AllArgsConstructor
@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();
์ฅ์
- ๊ฐ ์ธ์๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ํ์ ํ๊ธฐ ์ฝ๋ค.
- setter ๋ฉ์๋๊ฐ ์์ผ๋ฏ๋ก ๋ณ๊ฒฝ ๋ถ๊ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค.
- ํ๋ฒ์ ๊ฐ์ฒด๋ฅผ ์์ฑํจ์ผ๋ก์จ ์ ๊ณต ์ํ์ ๋ํ ์ผ๊ด์ฑ์ ์ป๋๋ค.
- ๊ฐ์ฒด ์์ฑ ์ต์ข ๋จ๊ณ์ธ 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 ํด๋์ค๋ฅผ ์๋์ผ๋ก ์์ฑํด์ค๋ค.
**/
๐ก Lombok Annotation ์ ์ฉ ์๋ฌ
annotation Processor๋ฅผ ์ค์ ํด์ค์ผ ํ๋ค!
- Setting-> Build,Execution,Deployment -> Compiler -> Annotation Processors์ค์ ์์ Enable Anntation processing ์ฒดํฌ๋ฐ์ค ํ์ฑํ
- build.gradle ํ์ผ์์ dependencies**{**annotationProcessor('org.projectlombok:lombok:')} ์ถ๊ฐ
'Web & Android > SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SpringBoot] ์ค์ผ์ค๋ง (1) | 2023.10.13 |
---|---|
[SpringBoot] Google ์ด๋ฉ์ผ ์ธ์ฆ (0) | 2023.09.12 |
[SpringBoot] HTTP form์์ put, delete ์ฌ์ฉ๋ฒ (0) | 2023.08.17 |
[SpringBoot] Thymeleaf - ๋ ์ง ๋ณํ (0) | 2023.08.17 |
[SpringBoot] WAS์ WS (0) | 2023.08.15 |