느린 것을 걱정하지 말고, 멈춰서는 것을 걱정하라
article thumbnail

스프링 부트를 공부하다가 문득 @Data라는 생소한 어노테이션을 발견하게 되었다. lombok이라는 어노테이션인데 bean 형태의 객체의 소스를 상당수를 줄여줄 수 있는 어노테이션 이라고 한다.

 

 

부푼 기대감을 안고 Maven에 lombok Dependency를 추가한 다음 @Data를 적용하였지만 소스상에 아무런 변화가 없다.

음? @Data라는 어노테이션을 추가하면 자동으로 생성자 메서드 및 Getter, Setter 메서드를 정의하여 준다고 하였지만 아무런 증상이 없다. 그러다 결국 dependency 추가만으로는 lombok을 사용할 수 없다는 사실을 알게 되었고 lombok을 적용하는 방법을 블로그에 포스팅 하고자 한다.

 

 

일단, lombok.jar가 설치된 폴더를 알아낸 다음 해당 폴더로 이동한다.

 

 

 

 

해당폴더로 이동한 다음 Command창을 열어야 하는데 나 같은 경우에는 Git Bash가 있으므로 Git bash를 이용하여 Command창을 열도록 하였다.

 

 

 

 

Command 창이 열리면 jar 실행 명령어인 java -jar lombok-1.18.8.jar 를 입력하여 lombok 과 관련된 jar를 실행한다.

 

 

 

 

Jar를 실행하면 다음과 같은 Project Installer 창이 뜨는데 Specify location 버튼을 누른다.

 

 

 

 

그런다음 내가 사용하고 있는 IDE인 SpringToolSuite4.exe가 있는 경로로 들어가서

해당 exe를 클릭 후 select 버튼을 눌러준다.

 

 

 

select 버튼을 누른 후, Install/Update 버튼을 눌러준다.

 

 

 

 

그런다음 Quit Installer 버튼을 눌러준다.

 

 

Spring Tool Suite 가 설치된 폴더의 SpringToolSuite4.ini 파일에 빨간색 네모에 들어가 있는 것처럼 lombok.jar와 관련된 매개변수가 포함되어있는지 확인한다. 만약 들어가 있으면 STS를 종료했다가 다시 시작한다.

 

 

 

 

 

우측에 보면 getter,setter, 및 생성자 함수, hashcode 함수등이 생성된 것을 볼 수 있다. 실감이 안날 수도 있으니 두개의 코드블록을 아래에 생성해서 비교해 보도록 하자.

 

 

 

@Data를 사용하지 않은 경우



@Component
public class Human {
	private String name;
	private int age=0;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	public Human() {
		super();
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Human other = (Human) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Human [name=" + name + ", age=" + age + "]";
	}
}

 

@Data를 사용한 경우

@Data
@Component
public class Human {
	private String name;
	private int age=0;
}

@Getter : getter 메서드를 정의

@Setter : setter 메서드를 정의

@EqualsAndHashCode : equals 및 hashcode 메서드를 정의

@AllArgsConstructor, @NoArgsConstructor, @RequiredArgsConstructor : 생성자를 정의

@ToString : toString 메서드를 정의

 

@Data : @Getter, @Setter, @EqualsAndHashCode, @RequiredArgsConstructor,@ToString 모두 포함하여 정의

 

 

이런 엄청난 소스의 경량화를 이뤄내는 어노테이션이 있다는 것은 상상조차 하지 못하였는데, 역시 책은 레퍼런스라기 보다는 이렇게 인사이트를 넓혀주는 기능을 하는데 아주 최적인것 같다. 항상 자만하지 말고 새로운 기술을 익히는데 있어서 소홀함이 없어야 할 것이다.

 

 

 

profile

느린 것을 걱정하지 말고, 멈춰서는 것을 걱정하라

@주현태

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!