Lombok Utility Library, Logback
๐๐ป ๊ธฐ์กด ์ฝ๋ ํ๊ณ:
getter ์์ฑ์, bean ์ฃผ์
์์ฑ์, Entity Equals, setter, hashโฆ๋งค๋ฒ ์์ฑํ๋ค๋ณด๋ ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ๋ฐ๋ณต๋จ
๐๐ป Lombok์ผ๋ก ํด๊ฒฐ!
๐ต๐ปโโ๏ธ Lombok runtime meta programming
annotation ํ๋ก์ธ์๊ฐ ์ปดํ์ผ ์ดํ ์๋์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด์ค๋ค.
๐ถ๏ธ Lombok
๋ชฉ์ : ๋ฐ๋ณต๋๋ ์ฝ๋ ์ค์ด๊ธฐ
how to use: annotation
1
2
3
4
5
@Getter, @Setter
@NoArgsConstructor
@AllArgsConstructor
@EqualAndHashCode
@Builder
โก๏ธ Lombok annotation์ด ์๋์ผ๋ก getter, setter, Constructor ๋ง๋ค์ด ์ค๋ค,
๐ถ๏ธ Lombok์ฌ์ฉํด ๋น ์์ฑ์, ๊ฒํฐ ์๋ตํ๊ธฐ @Getter, @NoArgsConstructor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//๐ถ๏ธ Lombok์ฌ์ฉํด ๋น ์์ฑ์, ๊ฒํฐ ์๋ตํ๊ธฐ
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@NoArgsConstructor
public class ItemBody {
private String name;
private String type;
private int price;
private Spec spec;
// public ItemBody(){} //๐ถ๏ธLombok ๋์ ๋น ์์ฑ์ ์๋ตํด๋ ๋จ
//
// public String getName() { //๐ถ๏ธLombok ๋์ ๊ฒํฐ ์๋ตํด๋ ๋จ
// return name;
// }
//
// public String getType() {
// return type;
// }
//
// public int getPrice() {
// return price;
// }
//
// public Spec getSpec() {
// return spec;
// }
}
๐ถ๏ธ Lombok์ฌ์ฉํด Bean ์์ฑ์ ์๋ตํ๊ธฐ
โ ์ธ์ Bean ์์ฑ์ ๋ง๋ค์๋๋ผ?
- Controller์์ Repository๊ฐ์ ธ์ฌ ๋
- Service ๊ฐ์ ธ์ฌ ๋
- Dao์์ Jdbc Template ๊ฐ์ ธ์ฌ ๋ ๋ฑ๋ฑ
๋ฐ๋ผ์ Lombok์ Bean์๋ ์ ์ฉ ๊ฐ๋ฅํ๋ค.
๐ก ๋ณดํต Bean์ ์ฃผ์
ํ ๋๋ final์ ๋ถ์ธ๋ค.
final: ์์๋ก, ๋ฐ๊ฟ ์ ์๊ฒ
ํ ๋ฒ Service, Repository, JdbcTemplate ๊ฐ์ ธ์ค๋ฉด ์ ๋ฐ๋๋๊น
1
2
3
4
5
6
7
8
9
10
//๐ถ๏ธ Controller์์ Repository๊ฐ์ ธ์ฌ ๋ Lombok์ฌ์ฉํด Bean ์์ฑ์ ์๋ตํ๊ธฐ
@RequiredArgsConstructor
@RestController
@RequestMapping("/api")
public class ElectronicStoreControllerLombok {
//๐ถ๏ธLombok ๋์ bean ์์ฑ์ ์๋ต๊ฐ๋ฅ
private final ElectronicStoreItemService electronicStoreItemService;
// public ElectronicStoreControllerLombok(ElectronicStoreItemService electronicStoreItemService) {
// this.electronicStoreItemService = electronicStoreItemService;
// }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//๐ถ๏ธ Dao์์ Jdbc Template ๊ฐ์ ธ์ฌ ๋Lombok์ฌ์ฉํด Bean ์์ฑ์ ์๋ตํ๊ธฐ
//๐ซ๐ซ๐ซ ํ์ง๋ง ์ด ์ฝ๋๋ lombok ์ฌ์ฉ ๋ถ๊ฐ ๐ซ๐ซ๐ซ
// @RequiredArgsConstructor โ
@Repository
public class AirlineTicketJdbcDao implements AirlineTicketRepository{
private final JdbcTemplate jdbcTemplate;
//๐ถ๏ธ์ผ๋ก bean ์์ฑ์ ์๋ตํ๋ ค๊ณ ํ์์ผ๋, ํ์ฌ jdbcTemplate์ด 2๊ฐ์ธ ์ํฉ
//๊ทธ๋์ ์ด๋ค jdbcTemplate์ธ์ง ๋ช
์ํด ์ฃผ์ด์ผ ํ๋ฏ๋ก constructor ์๋ต ๋ถ๊ฐ
//์ด๋ค jdbcTemplate์ธ์ง ๋ช
์ํ๊ธฐ ์ํด @Qualifier("jdbcTemplate2")
//๋ง์ฝ jdbcTemplateํ๋๋ฉด lombok์ผ๋ก bean ์์ฑ์ ์๋ต ๊ฐ๋ฅโญ๏ธ
public AirlineTicketJdbcDao(@Qualifier("jdbcTemplate2") JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
๐ถ๏ธ Lombok์ฌ์ฉํด Entity @AllArgsConstructor, @EqualsAndHashCode
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
@Getter
@Setter
@AllArgsConstructor
@EqualsAndHashCode(of= "id") //์ด๋ค ๊ฒ์ ๊ธฐ์ค์ผ๋ก equals ํ ๊ฒ์ธ๊ฐ? ๊ผญ ์กฐ๊ฑด์ ์๋ ค ์ค์ผ ํ๋ค.
public class ItemEntity {
private Integer id;
private String name;
private String type;
private Integer price;
private Integer storeId;
private Integer stock;
private String cpu;
private String capacity;
//๐ถ๏ธLombok ๋์ equals, hash ์๋ต๊ฐ๋ฅ
// @Override
// public boolean equals(Object o) {
// if (this == o) return true;
// if (!(o instanceof ItemEntity that)) return false;
// return Objects.equals(id, that.id);
// }
//
// @Override
// public int hashCode() {
// return Objects.hash(id);
// }
// ๐ถ๏ธLombok ๋์ constructor ์๋ต๊ฐ๋ฅ
// public ItemEntity(Integer id, String name, String type, Integer price, Integer storeId, Integer stock, String cpu, String capacity) {
// this.id = id;
// this.name = name;
// this.type = type;
// this.price = price;
// this.storeId = null;
// this.stock = 0;
// this.cpu = cpu;
// this.capacity = capacity;
// }
// ๐ถ๏ธLombok ๋์ getter, setter ์๋ต๊ฐ๋ฅ
// public Integer getId() {
// return id;
// }
//
// public void setId(Integer id) {
// this.id = id;
// }
//
// public String getName() {
// return name;
// }
//
// public void setName(String name) {
// this.name = name;
// }
//
// public String getType() {
// return type;
// }
//
// public void setType(String type) {
// this.type = type;
// }
//
// public Integer getPrice() {
// return price;
// }
//
// public void setPrice(Integer price) {
// this.price = price;
// }
//
// public String getCpu() {
// return cpu;
// }
//
// public void setCpu(String cpu) {
// this.cpu = cpu;
// }
//
// public String getCapacity() {
// return capacity;
// }
//
// public void setCapacity(String capacity) {
// this.capacity = capacity;
// }
//
//
// public Integer getStoreId() {
// return storeId;
// }
//
// public void setStoreId(Integer storeId) {
// this.storeId = storeId;
// }
//
// public Integer getStock() {
// return stock;
// }
//
// public void setStock(Integer stock) {
// this.stock = stock;
// }
}
๐ถ๏ธ Lombok์ฌ์ฉํด DAO์ RowMapper ๊ฐ์ @Builder
RowMapper๋ DAO์ ์์,
โ๏ธ ๊ทธ๋ฌ๋ @Build๋ Entity์ ์ถ๊ฐ
Lombok @Builder์ ์ฌ์ฉํ๋ฉด ์์๋ฅผ ๋ฐ๊ฟ๋ ์๊ด ์
์!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//๐ถ๏ธ Lombok์ฌ์ฉํด DAO์ RowMapper ๊ฐ์ ํ๊ธฐ
@Repository
public class ElectronicStoreItemJdbcDao implements ElectronicStoreItemRepository{
private JdbcTemplate jdbcTemplate;
public ElectronicStoreItemJdbcDao(@Qualifier("jdbcTemplate1") JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
//๊ธฐ์กด ์ฝ๋ RowMapper๋ ์์๋ฅผ ๋ง์ถฐ์ผ ํ๋ฏ๋ก ํท๊ฐ๋ฆด ์ ์์
//์ด๋ฅผ lombok builder๋ก ๊ฐ์
// static RowMapper<ItemEntity> itemEntityRowMapper= (((rs, rowNum)->
// new ItemEntity(
// rs.getInt("id"),
// rs.getNString("name"),
// rs.getNString("type"),
// rs.getInt("price"),
// rs.getInt("store_id"),
// rs.getInt("stock"),
// rs.getNString("cpu"),
// rs.getNString("capacity")
// )));
//๐ถ๏ธ Lombok์ฌ์ฉํด buildํ๋ฉด ๋ช
์๋ฅผ ํด์ฃผ์ด ์์ ํท๊ฐ๋ ค๋ ๊ด์ฐฎ์.
static RowMapper<ItemEntity> itemEntityRowMapper= (((rs, rowNum)->
new ItemEntity.ItemEntityBuilder()
.id(rs.getInt("id"))
.name(rs.getNString("name"))
.type(rs.getNString("type"))
.price(rs.getInt("price"))
.storeId(rs.getInt("store_id"))
.stock(rs.getInt("stock"))
.cpu(rs.getNString("cpu"))
.capacity(rs.getNString("capacity"))
.build()));
//โญ๏ธ @ Build๋ Entity์ ์ถ๊ฐ
@Getter
@Setter
@AllArgsConstructor
@EqualsAndHashCode(of= "id")
@Builder //โญ๏ธ
public class ItemEntity {
private Integer id;
private String name;
private String type;
private Integer price;
private Integer storeId;
private Integer stock;
private String cpu;
private String capacity;
>