[JAVA] LOMBOK이란? Getter, Setter ,NoArgContructor, ToString
[JAVA] LOMBOK이란? Getter, Setter ,NoArgContructor, ToString — #JAVAlombok #lombok #롬복 #자바롬복 #개발자의도구들 #Getter #Setter #NoArgContructor #ToS...
#JAVAlombok #lombok #롬복 #자바롬복 #개발자의도구들 #Getter #Setter #NoArgContructor #ToString
AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다
\* 현재 소켓통신 프로젝트를 진행중입니다. 전체적인 목차를 보시려면 여기에서 참고하세요
Lombok(롬복)이란?
Lombok은 자바 코드를 작성하실 때 좀 더 편하게 작성하게 끔 해주는 라이브러리인데요. Lombok을 사용하면 getter나 setter같은 꼭 필요하지만, 매번 작성하기에는 번거로운 메서드들을 간단하게 대신 만들어주어 코드의 가독성과 생산성을 높입니다.
Lombok은 annotation을 사용하여 해당 동작들을 지정합니다. getter함수를 만들고 싶으면 @Getter를, setter함수를 만들고 싶으면 @Setter를 사용하여 간단하게 표현할 수 있습니다.
설치방법
거두절미하고 바로 설치방법에 대해 알아봅시다. Lombok을 적용할 프로젝트의 build.gradle로 들어가주세요.
dependencies안에 코드를 추가합니다.
| implementation 'org.projectlombok:lombok:1.18.28' annotationProcessor 'org.projectlombok:lombok: 1.18.28' |
|---|
그 다음 \[file\] - \[settings\] - \[Build, Execution, Deployment\] - \[Compiler\] -- \[Annotation Processors\] - Enable annotation processing 체크 및 적용해주세요.
플러그인을 설치해야하는데, 최신 intellij는 자동으로 들어가 있기 때문에, build.gradle에 해당 옵션만 추가해주세요.
| plugins { id("io.freefair.lombok") version "8.0.1"} |
|---|
@Getter를 해보시고, 안된다면, IDE가 자동으로 해결하도록 만들어주세요.
사용방법
Lombok은 다양한 annotation을 지원하고 있습니다. 지원하는 annotation들은 공식사이트에서 확인하실 수 있습니다.
[Project Lombok
Project Lombok Features Community Order / Donate Install Download Get Lombok for Enterprise Project Lombok Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again, with one annotation your cla...
projectlombok.org](https://projectlombok.org/)
이번글에서는 자주 사용하는 기본적인 annotation만 다뤄보고자합니다.
@Getter @Setter
@Getter과 @Setter은 이름에서 알 수 있듯이 getter함수와 setter함수를 자동으로 만들어주는 anotation입니다.
간단한 코드를 통해 알아보겠습니다.
| package org.example;import lombok.Getter;import lombok.Setter;@Getter@Setterpublic class People { private String name; private int age; private String address; public People(String name, int age, String address) { this.name = name; this.age = age; this.address = address; }} |
|---|
| package org.example;public class Main { public static void main(String\[\] args) { People people = new People("minna", 10 , "seoul"); System.out.println(people.getName()); System.out.println(people.getAge()); System.out.println(people.getAddress()); }} |
|---|
People 클래스에서 딱히 getter과 Setter클래스를 만들지 않아도 코드가 잘 동작하는 것을 볼 수 있습니다.
@NoArgsConstuctor @AllArgsConstructor @RequiredArgsConstructor
생성자를 관여하는 Anotation입니다.
@NoArgsConstructor는 생성시 어떤 인자도 받지 않도록 하는 생성자를 만듭니다.
| package org.example;import lombok.Getter;import lombok.Setter;import lombok.NoArgsConstructor;@Getter@Setter@NoArgsConstructorpublic class People { private String name; private int age; private String address;} |
|---|
| package org.example;public class Main { public static void main(String\[\] args) { People people = new People(); people.setName("minna"); people.setAge(10); people.setAddress("seoul"); System.out.println(people.getName()); System.out.println(people.getAge()); System.out.println(people.getAddress()); }} |
|---|
People에 생성자가 없지만, 코드가 문제없이 작동하는 것을 볼 수 있어요. 이때 필드의 값은 setter로 주입시켜 줘야합니다.
@AllArgsConstructor는 @NoArgsConstructor와는 반대로 모든 필드에 대해서 생성시 주입시켜 줘야합니다.
| package org.example;import lombok.Getter;import lombok.Setter;import lombok.AllArgsConstructor;@Getter@Setter@AllArgsConstructorpublic class People { private String name; private int age; private String address;} |
|---|
| package org.example;public class Main { public static void main(String\[\] args) { People people = new People("minna", 10, "seoul"); System.out.println(people.getName()); System.out.println(people.getAge()); System.out.println(people.getAddress()); }} |
|---|
@RequiredArgsConstructor 는 final이 붙거나 @NotNull 이 붙은 필드에 대해서만 생성시 주입하도록 합니다.
| package org.example;import lombok.Getter;import lombok.Setter;import lombok.RequiredArgsConstructor;@Getter@Setter@RequiredArgsConstructorpublic class People { private fianl String name; private final nt age; private String address;} |
|---|
| package org.example;public class Main { public static void main(String\[\] args) { People people = new People("minna", 10); people.setAddress("seoul"); System.out.println(people.getName()); System.out.println(people.getAge()); System.out.println(people.getAddress()); }} |
|---|
address에는 final이 붙어있지 않았기 때문에 setter를 통해 데이터를 넣어줬습니다.
@ToString
코드 디버깅에 매우 유용하게 사용될 수 있는 anotation입니다. 개인적으로 너무나 편한 anotation이라고 생각됩니다!
| package org.example;import lombok.Getter;import lombok.Setter;import lombok.RequiredArgsConstructor;import lombok.ToString;@Getter@Setter@RequiredArgsConstructor@ToStringpublic class People { private fianl String name; private final nt age; private String address; private byte\[\] tall;} |
|---|
기존코드에서 tall이라는 정보를 byte\[\]로 받는다고 가정해봅시다.
| package org.example;public class Main { public static void main(String\[\] args) { People people = new People("minna", 10); people.setAddress("seoul"); people.setTall(new byte\[\] {100, 100, 100}); System.out.println(people); }} |
|---|
setter를 통해 byte\[\]를 넣어주었습니다. @ToString은 객체 자체를 출력할 수 있게 해주는데요.
원래 객체를 직접 출력하면 왼쪽 화면처럼 나오는게 정상이지만 @ToString을 통해 객체의 field정보를 한번에 확인할 수 있습니다.
디버깅에 너무나 편리한 기능이겠죠?
@Data
이 모든 기능들을 일일히 적기 귀찮으시다면, 그냥 @Data anotation을 사용하세요!
@Getter, @Setter, @ToString, @RequiredArgConstructor, @EqualsAndHashCode 등을 불러오지 않아도 사용할 수 있습니다!
| package org.example;import lombok.\*@Datapublic class People { private fianl String name; private final nt age; private String address; private byte\[\] tall;} |
|---|
| package org.example;public class Main { public static void main(String\[\] args) { People people = new People("minna", 10); people.setAddress("seoul"); people.setTall(new byte\[\] {100, 100, 100}); System.out.println(people); }} |
|---|






