JAVA-LOMBOK 롬복

2024. 11. 13. 15:27·개발/JAVA
목차
  1. Lombok(롬복) 이란?
  2. Lombok 설치
  3. 주로 사용하는 어노테이션
  4. 단점
728x90
반응형

Lombok(롬복) 이란?

반복되는 메서드를 Annotation(어노테이션)을 사용해 자동으로 작성해 주는 라이브러리.

보통 Getter / Setter 를 주로 사용.

 

Lombok 설치

IntelliJ

플러그인에서 lombok 설치 후

Settings(win)/preference(mac) - 검색에 annotation processors - Enable annotation processing 체크

 

dependencies

// gradle - build.gradle
dependencies {
	...
	// lombok 라이브러리 추가
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
    
	testCompileOnly 'org.projectlombok:lombok'
	testAnnotationProcessor 'org.projectlombok:lombok'
	//
    ...
}

// maven - pom.xml
<dependencies> 
	<dependency>   
    	<groupId>org.projectlombok</groupId>   
        <artifactId>lombok</artifactId>   
        <version>1.18.24</version>   
        <scope>provided</scope> 
    </dependency> 
</dependencies>

 

주로 사용하는 어노테이션

@Getter / @Setter

// lombok 적용시
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class User {
    private String name;
    private int age;
}
  • User 클래스는 getName(), setName(), getAge(), setAge() 메서드를 가지게 된다.

 

@ToString

import lombok.ToString;

@ToString
public class User {
    private String name;
    private int age;
}

 

@EqualsAndHashCode

import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class User {
    private String name;
    private int age;
}
  • User 클래스에 대해 eqauls()와 hashCode() 메서드를 자동으로 생성하고 객체비교와 해시코드를 생성

 

@NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor

import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.NonNull;

@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class User {
    @NonNull private String name;
    private int age;
}
  • @NoArgsConstructor: 매개변수가 없는 기본 생성자를 생성
  • @AllArgsConstructor: 모든 필드를 포함하는 생성자를 생성
  • @RequiredArgsConstructor: final 또는 @NonNull이 붙은 필드만 포함하는 생성자를 생성

 

@Data

import lombok.Data;

@Data
public class User {
    private String name;
    private int age;
}
  • @Data는 @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 모두 포함하는 종합 어노테이션

 

@Builder

import lombok.Builder;

@Builder
public class User {
    private String name;
    private int age;
}

// 사용 예시
User user = User.builder()
                .name("Alice")
                .age(30)
                .build();

 

롬복 미사용 시 코드

더보기
public class User {
    private String name;
    private int age;

    // 기본 생성자
    public User() {}

    // 모든 필드를 포함하는 생성자
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // getter 및 setter 메서드
    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;
    }

    // toString 메서드
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    // equals 및 hashCode 메서드
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        User user = (User) o;

        if (age != user.age) return false;
        return name != null ? name.equals(user.name) : user.name == null;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }

    // 빌더 패턴 구현
    public static class Builder {
        private String name;
        private int age;

        public Builder name(String name) {
            this.name = name;
            return this;
        }

        public Builder age(int age) {
            this.age = age;
            return this;
        }

        public User build() {
            return new User(name, age);
        }
    }

    public static Builder builder() {
        return new Builder();
    }
}

// 위와 같은 코드 사용시 User 클래스 사용방법
// 객체 생성 예시
User user1 = new User("Alice", 30);

// getter 및 setter 호출 예시
System.out.println(user1.getName()); // "Alice"
user1.setAge(31);
System.out.println(user1.getAge()); // 31

// toString 메서드 호출 예시
System.out.println(user1.toString()); // "User{name='Alice', age=31}"

// equals 및 hashCode 메서드 호출 예시
User user2 = new User("Alice", 31);
System.out.println(user1.equals(user2)); // true

// 빌더 패턴을 통한 객체 생성 예시
User user3 = User.builder()
                 .name("Bob")
                 .age(25)
                 .build();
System.out.println(user3.toString()); // "User{name='Bob', age=25}"

 

단점

  • @Data 같은 어노테이션은 기본적으로 모든 것을 생성하기 때문에 필요하지 않은 메서드도 생성되며 프로그램이 무거워질 수 있다.
  • 구조파악이나 협업 시 롬복을 모르면 파악이 힘들 수도 있다.
  • 고로 @Getter / @Setter 정도만 사용하는 것이 협업에선 좋을 수 도 있다.

하지만 요즘 툴에선 생성자나 게터쎄터 단축키가 있어서 일일이 치지 않아도 생성되기 때문에 적절히 사용하면 될 것 같다.

728x90
반응형
저작자표시 (새창열림)

'개발 > JAVA' 카테고리의 다른 글

JAVA-ORACLE 연동 feat.IntelliJ  (0) 2024.05.14
문자열 비교, ==와 equals() 그리고 compareTo()  (0) 2024.05.07
[annotation] @Autowired와 @Qualifier  (0) 2024.04.24
25. JAVA JDBC (Java Database Connectivity) - 3  (0) 2020.06.08
24. JAVA JDBC (Java Database Connectivity) - 2  (0) 2020.06.08
  1. Lombok(롬복) 이란?
  2. Lombok 설치
  3. 주로 사용하는 어노테이션
  4. 단점
'개발/JAVA' 카테고리의 다른 글
  • JAVA-ORACLE 연동 feat.IntelliJ
  • 문자열 비교, ==와 equals() 그리고 compareTo()
  • [annotation] @Autowired와 @Qualifier
  • 25. JAVA JDBC (Java Database Connectivity) - 3
joolog
joolog
  • joolog
    JOO
    joolog
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • 개발 (83)
        • JAVA (29)
        • PYTHON (9)
        • AWS (15)
        • DOCKER (2)
        • PERCONA (2)
        • ORACLE (14)
        • MYSQL (1)
        • 알고리즘 (0)
        • 기타 (11)
      • 툴 (5)
        • MARKDOWN (1)
        • GIT (1)
        • DOCKER (1)
        • PyCharm (2)
        • IntelliJ (0)
      • 일상 (35)
        • 맛집 (6)
        • 카페 (2)
        • 요리 (4)
        • 글씨 연습 (2)
        • 그저 일상 (7)
        • 내돈 내산 (11)
        • 홍보 (1)
      • 국내 여행 (1)
      • 해외 여행 (15)
        • 체코-오스트리아 (10)
        • 일본 (5)
      • 암 일지 (26)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 관리
    • 티스토리 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    히로시마
    자바JDBC
    갑상선 암
    저요오드식
    오블완
    체코
    잘츠부르크
    티스토리챌린지
    요양병원
    재발
    오닉스 리프3
    mysql
    오스트리아
    오라클
    자바
    동위원소
    성모샘쉼터
    글씨연습
    Oracle
    jdbc
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
joolog
JAVA-LOMBOK 롬복

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.