Post

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;
>
This post is licensed under CC BY 4.0 by the author.