spread

ES6에 spread와 rest라는 문법이 도입 되었습니다.
spread는 펼치다 또는 퍼뜨리다라는 의미를 가집니다. 객체 혹은 배열에 사용되고 값들을 펼쳐줍니다.

  • spread 미사용
const student = {
    name: '학생1'
}

const smartStudent = {
    name: '학생1',
    attribute: '똑똑한'
}

const tallSmartStudent = {
    name: '학생1',
    attribute: '똑똑한',
    height: 185
}

console.log(student);          // { name: '학생1' }
console.log(smartStudent);     // { name: '학생1', attribute: '똑똑한' }
console.log(tallSmartStudent); // { name: '학생1', attribute: '똑똑한', height: 185 }
  • spread 사용
const student = {
    name: '학생1'
}

const smartStudent = {
    ...student,
    attribute: '똑똑한'
}

const tallSmartStudent = {
    ...smartStudent,
    height: 185
}

console.log(student);          // { name: '학생1' }
console.log(smartStudent);     // { name: '학생1', attribute: '똑똑한' }
console.log(tallSmartStudent); // { name: '학생1', attribute: '똑똑한', height: 185 }

rest

spread와 반대의 개념이라고 생각하면 됩니다. 퍼져있는 것을 다시 모아오는 역할을 합니다.
rest는 객체, 배열, 그리고 함수의 파라미터에서 사용이 가능합니다

  • 객체에 적용
const tallSmartStudent = {
    name: '학생1',
    attribute: '똑똑한',
    height: 185
}

const { height, ...attributes } = tallSmartStudent;
console.log(height);     // 185
console.log(attributes); // { name: '학생1', attribute: '똑똑한' }
  • 배열 적용
const numbers = [1, 2, 3, 4, 5];
const [one, two, ...rest] = numbers
console.log(one);  // 1
console.log(two);  // 2
console.log(rest); // [3, 4, 5]
  • 함수에 적용
function sum(a, b, c, d, e, f, g) {
    return a + b + c + d + e + f + g;
}
console.log(sum(1, 2, 3, 4, 5, 6, 7)); // 28

function sumRest(...rest) {
    return rest.reduce((acc, current) => acc + current, 0);
}
console.log(sumRest(1, 2, 3, 4, 5, 6, 7)); // 28
블로그 이미지

yhmane

댓글을 달아 주세요

스프링 4.3에 release된 annotation 중 mapping 관련하여 포스팅을 하려고 합니다.


먼저, @RequestMapping은 url을 통해 들어온 request를 method와 연결하여 주는 annotation이었습니다.


여기에, 속성으로 method를 지정하여 


method = RequestMethod.GET


method = RequestMethod.POST 형식으로 지정하여 주었습니다.




하지만, 이러한 불편함을 대체하여 주고, 코드의 가독성을 높여주는 annotation들이 spring 4.3 버전 이후로 출시가 되었습니다.


간단하게 코드로 알아보겠습니다.



@RequestMapping(value = "/" , method = RequestMethod.GET)
public String getMethod(HttpServletRequest request, HttpServletResponse response) {
return "";
}

@GetMapping("/test/get")
public String getMethod2(HttpServletRequest request, HttpServletResponse response) {
return "";
}

@PostMapping("/test/post")
public String postMethod(HttpServletRequest request, HttpServletResponse response) {
return "";
}

@PutMapping("/test/put")
public String putMethod(HttpServletRequest request, HttpServletResponse response) {
return "";
}

@DeleteMapping("/test/delete")
public String deleteMethod(HttpServletRequest request, HttpServletResponse response) {
return "";
}

@PatchMapping("/test/patch")
public String patchMethod(HttpServletRequest request, HttpServletResponse response) {
return "";
}

위의 방식으로 기존 @RequstMapping( value = "", method = RequestMethod.XXXX)를 간략히 쓸 수 있습니다.






/**
* Annotation for mapping HTTP {@code GET} requests onto specific handler
* methods.
*
* <p>Specifically, {@code @GetMapping} is a <em>composed annotation</em> that
* acts as a shortcut for {@code @RequestMapping(method = RequestMethod.GET)}.
*
*
* @author Sam Brannen
* @since 4.3
* @see PostMapping
* @see PutMapping
* @see DeleteMapping
* @see PatchMapping
* @see RequestMapping
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.GET)
public @interface GetMapping {

/**
* Alias for {@link RequestMapping#name}.
*/
@AliasFor(annotation = RequestMapping.class)
String name() default "";



@GetMapping의 소스를 조금 더 까보면

@RequestMapping(method = RequestMethod.GET)이 선언 되어 있는 것을 볼 수 있습니다.




[참조]


Http Rest Service 예제 

https://spring.io/guides/tutorials/bookmarks/


Spring @RequestMapping New Shortcut Annotations 예제

https://www.baeldung.com/spring-new-requestmapping-shortcuts


블로그 이미지

yhmane

댓글을 달아 주세요