반응형

@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;
    }
}

결과

반응형

↓ 클릭시 이동

복사했습니다!