Java/Spring์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ Lombok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค.

Lombok ๋•๋ถ„์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ํŽธํ–ˆ์ง€๋งŒ, ๋ฌด์ง€์„ฑ์œผ๋กœ ๋ง‰ ๊ฐ–๋‹ค์“ฐ๋‹ค๊ฐ€ ๋‚ญํŒจ๋ฅผ ๋ณธ ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ๋‹ค.(toString ์ˆœํ™˜ ์ฐธ์กฐ, ์ƒ์„ฑ์ž ์ˆœ์„œ ์•ˆ๋งž์Œ...)

 

 

Lombok์— ๋Œ€ํ•ด ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด๊ณ , ๋‹จ์ ๊ณผ ์ฃผ์˜์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ๋„ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค!

 

 

 

 

 

https://plugins.jetbrains.com/files/6317/502595/icon/pluginIcon.png

 

 

 

 

 

 Lombok์€ ์ธ๋„๋„ค์‹œ์•„์— ์žˆ๋Š” Lombok ์„ฌ์—์„œ ์ด๋ฆ„์„ ๋”ฐ์„œ ๋งŒ๋“ค์—ˆ๋‹ค๋Š”๋ฐ, ์™œ ์•„์ด์ฝ˜์€ Red chilli์ผ๊นŒ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.

Project Lombok์˜ ์Šฌ๋กœ๊ฑด์„ ๋ณด๋ฉด 'Spice up your java(์ž๋ฐ”์— ๋ง›์„ ๋”ํ•˜๋‹ค)'์ธ๋ฐ, 'Spice(ํ–ฅ์‹ ๋ฃŒ)' ๋•Œ๋ฌธ์— Red chilli ์•„์ด์ฝ˜์„ ์“ฐ๋Š” ๊ฒƒ ๊ฐ™๋‹ค! (์ถ”์ธก)

 

 

 

 

 

 

Lombok ์ด๋ž€?


 Lombok์€ ์ž๋™์ ์œผ๋กœ getter, setter, toString(), ์ƒ์„ฑ์ž ๋“ฑ์„ ์ƒ์„ฑํ•ด์ฃผ๋Š” ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

 

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ํด๋ž˜์Šค์— @์–ด๋…ธํ…Œ์ด์…˜๋งŒ ๋ถ™์ธ๋‹ค๋ฉด, ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์—์„œ ์•Œ์•„์„œ ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

 

 

 

 

 

Lombok ์ ์šฉ ์ „

public class Person {
    private String name;
    private int age;

    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 Person() {}

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}

 

 

 

Lombok ์ ์šฉ ํ›„

import lombok.*;

@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Person {
    private String name;
    private int age;
}

 

 

 

 

 

 

@์–ด๋…ธํ…Œ์ด์…˜ ์ข…๋ฅ˜


@Getter / @Setter

getter์™€ setter๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

 

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

 

 

 

 

 

@ToString

toString() ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

@Override
public String toString() {
	return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
}

 

 

 

 

@EqualsAndHashCode

equals(o) ๋ฉ”์†Œ๋“œ์™€ hashCode() ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

 

@Override
public boolean equals(Object o) {
	if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return age == person.age && Objects.equals(name, person.name);
}

@Override
public int hashCode() {
	return Objects.hash(name, age);
}

 

 

 

 

 

@NoArgsConstructor, @AllArgsConstructor

๊ฐ๊ฐ ๋นˆ ์ƒ์„ฑ์ž, ํ•„๋“œ๊ฐ€ ๋ชจ๋‘ ๋“ค์–ด๊ฐ„ ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

//@NoArgsConstructor
public Person() {}

//@AllArgsConstructor
public Person(String name, int age) {
	this.name = name;
    this.age = age;
}

 

 

 

@RequiredArgsConstructor

final์ด ๋ถ™๊ฑฐ๋‚˜ @NotNull์ด ๋ถ™์€ ํ•„๋“œ์˜ ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

@Service
@RequiredArgsConstructor
public class PersonService {
    private final PersonRepository personRepository;
}

 

 

Spring ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜์ธ ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹์„ ๋Œ€์ฒดํ•œ๋‹ค.

@Service
public class PersonService {
    private final PersonRepository personRepository;

    @Autowired
    public PersonService(PersonRepository personRepository) {
        this.personRepository = personRepository;
    }
}

 

 

 

 

@Data

@Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค.

 

@Getter
@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor
public class Person {
    private String name;
    private int age;
}

 

 

 

 

@Builder

Person.builder()
	.name("giraffe")
	.age("1")
	.build();

 

 

 

@Log

private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());

 

@Log4j ์™€ ๊ฐ™์€ ๋กœ๊ทธ๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

 

๊ทธ ์™ธ์˜ ์–ด๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•ด์„œ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

 

 

Lombok ์žฅ์ 


  • ์–ด๋…ธํ…Œ์ด์…˜๋งŒ ์“ฐ๋ฉด ์•Œ์•„์„œ ์ž๋™์œผ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํŽธํ•˜๋‹ค.
  • ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋“œ๋Ÿ‰์ด ์ค„์–ด๋“ ๋‹ค.

 

 

 

 

 

Lombok ๋‹จ์ ๊ณผ ์ฃผ์˜์‚ฌํ•ญ


  • IDE์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ด์•ผ ์ง€์›๋œ๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฅธ ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ Lombok ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, Lombok์œผ๋กœ ๊ฐœ๋ฐœํ–ˆ๋˜ ์ฝ”๋“œ๋Š” Lombok์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ด ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.

 

  • Lombok์„ ์“ฐ๊ฒŒ ๋˜๋ฉด, ์ฝ”๋“œ๊ฐ€ ์ƒ๋žต๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™๋˜๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. ๋งŒ์•ฝ toString, equals, hasCode์™€ ๊ฐ™์ด ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ์“ฐ๋Š” ๋ฉ”์†Œ๋“œ์—์„œ ๋””ํดํŠธ์™€ ๋‹ค๋ฅด๊ฒŒ ์žฌ์ •์˜ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. 

 

  • @Data๋Š” @RequiredArgsConstructor๋„ ํฌํ•จํ•˜๋Š”๋ฐ, @RequiredArgsConstructor๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์„ฑ์ž์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ ๋ถˆํŽธํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋ณดํ†ต @Builder๋ฅผ ๋งŽ์ด ์“ด๋‹ค.

 

  • @ToString ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ˆœํ™˜ ์ฐธ์กฐ์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

์ฐธ๊ณ 


  • Project Lombok ๊ณต์‹ํ™ˆํŽ˜์ด์ง€ : https://projectlombok.org
  • Lombok ๋„ˆ๋ฌด ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. (Lombok ์ฃผ์˜์ ) : https://lkhlkh23.tistory.com/159

 

'Backend > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] Window Eclipse ์ดํด๋ฆฝ์Šค ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๊ธฐ  (0) 2023.01.05
giraffe_