Java/Spring์ผ๋ก ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ Lombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ์๋ค.
Lombok ๋๋ถ์ ์ฝ๋๋ฅผ ์์ฑํ ๋ ํธํ์ง๋ง, ๋ฌด์ง์ฑ์ผ๋ก ๋ง ๊ฐ๋ค์ฐ๋ค๊ฐ ๋ญํจ๋ฅผ ๋ณธ ๊ฒฝ์ฐ๋ ์์๋ค.(toString ์ํ ์ฐธ์กฐ, ์์ฑ์ ์์ ์๋ง์...)
Lombok์ ๋ํด ๋ค์ ์ ๋ฆฌํด๋ณด๊ณ , ๋จ์ ๊ณผ ์ฃผ์์ฌํญ์ ๋ํด์๋ ์์๋ณด๊ณ ์ ํ๋ค!
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 |
---|