먼저, lombok을 설치하자, 공식사이트를 들어가보면 설치하는 방법에 대해 설명되어 있다.
1. getter, setter 자동 생성
@Getter, @Setter : 각 전역변수에 선언해 주면 자동으로 getter, setter 메서드를 생성해 주지 않아도 된다.
public class User {
@Getter
@Setter(AccessLevel.PROTECTED)
private String name;
}
또한 @Setter(AccessLevel.PROTECTED) 접근권한을 제어할 수 있다.(AccessLevel.PUBLIC, AccessLevel.PRIVATE 등등..)
AccessLevel.NONE 설정을 통해 메소드 생성을 제한시킬 수 도 있다. -> 잘 쓸 것 같지는 않음
2. NULL 예외처리
@NonNull 말 그대로 NonNull이다. 멤버필드에 선언해 주면, 해당 변수 Setter에 null값이 들어 올 때 NullPointException을 발생시킨다.
public class User {
@NonNull
private String name;
}
3. 현재 객체 정보 출력
@ToString -> 객체.toString() 메서드를 대체하는 어노테이션으로 callSuper값을 true로 할 경우 상속받은 클래스의 정보까지 출력되며,
exclude를 통해 제외하고자 하는 변수를 선택할 수 있다. 설정하지 않을 경우 @ToString만 선언하면 된다.
@ToString(callSuper=true,exclude="phoneNumber")
public class User extends Address{
private String name;
private String phoneNumber;
/*
@override
public toString(){
return "Address(super = " + super.toString() +
", name = " + name + ")";
}
*/
}
4. 객체 비교
@EqualsAndHashCode -> 객체 비교에 사용되는 메소드를 대체하는 어노테이션
5. setter+getter+toString+nunNull+equalsAndHashCode 모두 사용할 경우
@Data -> 위의 어노테이션을 합체시킨 어노테이션, 그러나 각 어노테이션에서 설정할 수 있는 세분성까지는 제공하지 못한다. 위에 중요 따로 설정해서 사용할 어노테이션을 설정한 후, 추가적으로 사용하는 것을 권장한다.
@Data(staticConstructor="of") 매개 변수의 값을 원하는 메소드 이름(of)으로 설정하면 생성자를 private로 만들어 주고, 주어진 이름의 static factory method (new를 사용하지 않고 객체를 만들 수 있음)를 만들어준다.
@Data(staticConstructor="of")
public class User {
private String name;
}
public class Addredss {
static public void main(String []args){
User.of().getName();
}
}
6. 자동 자원 close
@cleanup -> try finally에서 close()를 대신 호출해주는 어노테이션
public class User {
static public void main(String [] args){
try {
@Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(new byte[] {'Y','e','s'});
System.out.println(baos.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
7. 동기화
java의 synchronized를 사용하면 객체 레벨에서 락이 걸려 여러가지 문제가 발생할 수 있다.
@Synchronized 어노테이션을 사용하면 가상의 필드 레벨에서 보다 더 안전하게 락을 걸어 준다.
@Synchronized
public class User {
public void ok(){
System.out.println("ok");
}
}
8. 불변 객체 클래스
class에 @Value 어노테이션을 선언하면, 불변 객체를 만들 수 있다.
@Value
public class User {
public String name; //setter 메소드 사용 불가능
}
9. 로그를 편하게
class에 @Slf4j, @Log 등 해당 어노테이션을 선언하면, log관련 static 메소드를 클래스 별로 선언할 필요가 없다.
@Controller
@Slf4j
public class HomeController {
@GetMapping(path="/")
public @responseBody String hello(){
log.info("hello!!!");
return "hello!!";
}
}
10. Builder 사용
class에 @Builder 어노테이션을 선언하면 생성자 대신에 빌더를 사용할 수 있다.
또한 @Singular 어노테이션을 collection 타입에 선언하게 되면 파라미터를 하나씩 추가할 수 있다.
@Builder
public class User {
private Long id;
private String name;
private String password;
@Singular
private List<String> habby;
@Singular
private Map<String, String> maps;
/* Example
User user = User.builder().id(0)
.name("javaboja")
.password("java123")
.habby("football")
.habby("Mountain climbing")
.maps("abc","abc")
.maps("def","def")
.build();
.
*/
}
사실상 업무 시 사용되는 어노테이션은 @Getter, @Setter, @Slf4j 등이 사용되며, 나머지 어노테이션은 가급적이면
사용하지 않는 것을 권장한다.(필자는 @Builder까지 사용할 생각이다.)
'spring boot' 카테고리의 다른 글
spring boot에 HTTP2 방식을 적용해보자. (0) | 2019.11.04 |
---|---|
Could not run build action using Gradle distribution 에러 (2) | 2019.06.20 |
sts4, spring boot(jar), gradle, jpa 시작 (0) | 2019.06.15 |