무의식적으로 계속 쓰던 코드 중 하나는, 롬복에서 지원하는 NoArgsConstructor 어노테이션이였다. 그 중, @NoArgsConstructor(access = AccessLevel.PROTECTED) 는 어떤 의미를 말해주는 코드인지를 간략하게 내 글로 적고 넘어가 보려 한다.
기본적으로 자바는 클래스 생성 시, 기본 생성자를 통해 객체를 만들 수 있게 된다.
public class OrderMatching {
private String title;
}
OrderMatching orderMatching = new OrderMatching(); // ok
다만, 자바의 이러한 기본적인 부분이 객체를 생성해 개발할때, 오해를 불러일으킬 수 있는 코드가 될 수 있다.
'난 title 파라미터를 받는 생성자만 사용해서 객체를 생성할꺼야' 라고 했을때를 가정해보자.
public class OrderMatching {
private String title;
public OrderMatching(String title) {
this.title = title;
}
}
OrderMatching orderMatching1 = new OrderMatching("테스트1"); // ok
OrderMatching orderMatching2 = new OrderMatching(); // 의도하지 않음
우리가 의도한 객체 생성자는 orderMatching1 이였지만, orderMatching2 방식으로 할 수 있는걸 볼 수 있다. orderMatching2 방식은 쓰지 않으니 명시적으로 막아두는게 좋을 수 있다.
public class OrderMatching {
private String title;
protected OrderMatching() { }
public OrderMatching(String title) {
this.title = title;
}
}
OrderMatching orderMatching1 = new OrderMatching("테스트1"); // ok
OrderMatching orderMatching2 = new OrderMatching(); // 컴파일 에러
이걸 롬복 어노테이션을 통해 의미를 상단에 명시해줄 수 있다.
@NoArgsConstructor(access = AccessLevel.PROTECTED) // 추가
public class OrderMatching {
private String title;
// protected OrderMatching() { } // 삭제
public OrderMatching(String title) {
this.title = title;
}
}
OrderMatching orderMatching1 = new OrderMatching("테스트1"); // ok
OrderMatching orderMatching2 = new OrderMatching(); // 컴파일 에러
코드라는건 말하는 것, 글을 쓰는 것과 같다고 생각한다. 그렇기 때문에 무의식적으로 코드를 써내려가기 보다, 그 의미를 곱씹으면서 써 내려가는것이 좋겠다. 다른 사람들이 봤을때, 이 코드의 의도를 알 수 있게끔.
이상한점이 있다면 꼭 알려주세요!
글 잘 봤습니다.