ㅁ Lombok (롬복)
- 해당 클래스에 작성되어있는 필드를 가지고 내부적으로 생성자, getter/setter, toString 등을 만들어주는 어노테이션을 제공하는 라이브러리다. (스프링과는 전혀 상관 없다)
- 클래스에 필드만 작성하고 클래스 상단에 필요로하는 생성자 또는 메소드 어노테이션을 기술하면 된다.
- 필드가 나중에 변경(타입, 이름, 추가 등)될 경우 매번 일일이 생성자 또는 메소드를 수정할 필요가 없다.
ㅁ pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<modelVersion>4.0.0</modelVersion>
<groupId>com.br</groupId>
<artifactId>mvc</artifactId>
<name>02_Spring_MVC</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>11</java-version>
<org.springframework-version>5.3.27</org.springframework-version>
<org.aspectj-version>1.9.19</org.aspectj-version>
<org.slf4j-version>2.0.7</org.slf4j-version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- Lombok 라이브러리 추가 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
- 나온지 좀 되고 usages가 많은 1.18.12 버전을 사용해본다.
- 1.18.12 버전을 클릭해서 dependency 태그를 복사해서 pom.xml에 추가한다.
- maven을 쓰지 않았다면 직접 jar 파일을 다운받아서 lib 폴더에 둬야 한다.
- pom.xml에 dependency 태그를 복사해서 저장하면 progress 바에서 다운되는게 보인다.
다 다운되면 Maven dependencies에도 뜬다.
- 그런데 lombok 특징이 라이브러리를 추가했다고 바로 반영이 되지 않는다. 설치하고 재실행까지 해야 반영된다.
저 경로를 직접 찾아가서 jar 파일을 더블릭해서 설치한다.
- 설치하지 않아도 라이브러리는 추가되어 있으므로 import는 되는데 빨간 에러가 뜬다.
- "lombok-1.19.12.jar"를 더블클릭한다.
- Lombok을 쓰려면 어떤 IDE 환경에서 쓸건지 선택해야 한다.
- c드라이브에 있으면 잘 뜨는데 안뜨면 Specify locaion..으로 직접 ~를 선택해야 한다.
- 설치가 되어있으면 저 경로 옆에 아이콘이 보인다. 아이콘이 없으니 설치되지 않은 것이다.
- 이클립스에도 설치했다.
=================================================================================
ㅁ MemberDto
package com.br.mvc.dto;
public class MemberDto {
private String name;
private int age;
private String addr;
}
- 필드만 두고 다 지웠다.
ㅁ
- Getter, Setter는 lombok 걸로 import한다.
- 필드 age의 자료형을 int에서 String으로 변경했다.
필드를 추가, 삭제, 수정하면 바로 반영된다.
ㅁ 그런데 롬복이 알아서 메소드를 만드는데 이때 명명규칙이 프레임워크가 요구하는 이름이 아닐 수 있다.
- mName 필드일 경우 setmName, getmName 이름으로 만들어져야 하는데 롬복은 setMName, getMName으로 만든다.
- el구문이나 바이바티스나 필드명 제시해서 값을 꺼낼 때가 많다.
이때 setmName, getmName 메소드를 찾기 때문에 데이터가 제대로 안꺼내질 수 있다.
- 프레임워크 기능을 이용해서 필드에 매핑시키거나 값을 꺼낼 때 제대로 매핑을 못하거나 값을 가져오지 못할 수 있다.
#{mName}, ${mName}
- 필드명에 소문자 1개 이후에 대문자가 오지않게 하면 된다.
롬복을 쓸거면 필드는 소문자 최소 2개 이상으로 시작하는 이름으로 지어야 한다.
ㅁ 유의사항
- 롬복 라이브러리 추가만으로 바로 사용이 불가능하다.
- 해당 IDE(통합개발환경, Eclipse, STS)에서 롬복을 사용할 수 있도록 설치해주는 과정이 필요하다. 설치후 재실행해야 한다.
- 롬복 라이브러리(.jar)를 실행시키면 설치창이 뜬다.
- 롬복을 사용하면 age의 값을 넘기지 않아도 오류가 나지 않는다.