반응형
@RestController
- @RestController = @Controller + @ResponseBody
- API 통신을 위해 @RestController 사용
- https://chb2005.tistory.com/60 여기서 @Controller을 사용해 View를 return 해주는 예제를 만들어 봤음
- @Controller의 메소드에서 return "hello-page"를 해주면 프로젝트의 resources 폴더에서 hello-page.html 파일을 화면에 띄워줬음
- 만약 @RestController의 메소드에서 똑같이 return "hello-page"를 해주면 Response Body에 "hello-page"라는 문자열을 담아 return 하게 됨
- 화면에 "hello-page" 출력
lombok
- lombok 라이브러리를 사용하면 다양한 어노테이션들을 사용할 수 있음
- 어노테이션 사용을 통해 반복되는 코드들을 줄일 수 있기 때문에 가독성 및 유지보수성을 향상시킬 수 있음
lombok 라이브러리 추가
- build.gradle에 아래 코드 추가
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
lombok의 대표적인 어노테이션 정리
- 다음과 같은 User 객체가 있다고 생각해보자
public class User {
private String nickname;
private String password;
}
@Getter, @Setter
- Java에서 정보은닉을 위해 Object class의 변수들을 private로 함
- 다른 파일에서 User의 nickname, password를 set, get 하기 위해선 아래와 같은 코드를 따로 작성해야 했음
public String getNickname() { return nickname; }
public void setNickname(String nickname) { this.nickname = nickname; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
- 변수가 2개 뿐인데도 4개의 메소드가 필요
- 변수가 많아질수록 메소드가 많이 필요해지고 코드도 길어짐
- getter, setter은 매우 많이 쓰는 메소드이기 때문에 이를 어노테이션으로 정리
- 아래와 같이 User 클래스에 @Getter, @Setter 어노테이션을 써주면 따로 getter, setter 메소드 작성 안해줘도 user.getNickname(), user.setPassword() 등을 사용할 수 있음
@Getter
@Setter
public class User {
private String nickname;
private String password;
}
@Data
- @Data = @Getter + @Setter + @RequiredArgsConstructor + @ToString + @EqualsAndHashCode
- @Data 만 써주면 위에서 배운 @Getter, @Setter을 포함한 여러가지 어노테이션들을 한 번에 추가할 수 있음
- 매우 편리해보이지만 @Setter와 같이 아무때나 사용하면 안되는 어노테이션도 포함한 만큼 사용시 주의가 필요함
@AllArgsConstructor
- 해당 클래스의 모든 변수들을 포함한 생성자를 자동으로 만들어줌
- 위의 User의 모든 변수(nickname, password)를 포함한 생성자의 코드는 아래와 같음
public User(String nickname, String password) {
this.nickname = nickname;
this.password = password;
}
- @AllArgsConstructor을 User 클래스에 적용하면 이 생성자 코드가 필요 없어짐
- 대신 User을 생성할 때 new User("aaa", "1234") 와 같이 변수들의 순서대로 모두 넣어줘야 함
@AllArgsConstructor
public class User {
private String nickname;
private String password;
}
@Slf4j
- Controller 와 같은 클래스에 붙여주면 log.info 사용 가능
- log.info를 통해 로그를 찍을 수 있음
// 로그 찍는 방법
log.info("Hello");
// 로그로 변수 출력 방법
log.info("x + y = {}", x + y);
위의 어노테이션들을 활용한 예제
@Slf4j
@RestController
public class UserController {
@GetMapping("user-api")
public Map<Integer, User> userApi() {
User user1 = new User("Harry", 20);
User user2 = new User("Tom", 21);
log.info("user 1 = {}, {}", user1.getName(), user1.getAge());
log.info("user 2 = {}, {}", user2.getName(), user2.getAge());
HashMap<Integer, User> map = new HashMap<>();
map.put(1, user1);
map.put(2, user2);
return map;
}
@Data
@AllArgsConstructor
static class User {
private String name;
private Integer age;
}
}
결과
반응형
'Spring Boot > 문법 정리' 카테고리의 다른 글
[Spring Boot] DI, @Autowired, @RequiredArgsConstructor (0) | 2022.05.17 |
---|---|
[Spring Boot] 테스트 코드 작성 예제 (0) | 2022.05.12 |
[Spring Boot] MVC 정의 및 예제 (0) | 2022.04.26 |
[Spring Boot] 정적 페이지 생성 예제 (0) | 2022.04.26 |
[Spring Boot] 프로젝트 생성 및 실행, Java 버전 에러 해결 방법 (0) | 2022.04.26 |