
블로그 작성법
목표 > 공부한 내용 > 얻었고, 앞으로 이걸 해봐야지 적기
크기: 고정 vs 동적
빈칸: 가능 vs 없다
조회: 빠름 vs 비교적 느림
데이터 중간 추가: 느리다 vs 빠르다
자료형: 기본, 참조 vs 참조
여기서 이어서 나온 개념이 Wrapper Class이다.
"오토 언박싱"
객체.필드 이러한 방식을 사용할 필요가 없다.

Wrapper Class로 생성자에 value를 넣는 방식은
version 9에 더 이상 사용되지 않는다.
아래와 같이 값을 저장할 수 있다.
Integer num2 = 9;
생성자가 여러 개이다.

ResponseEntity를 생성할 때,
body, headers, status code를 담을 수 있다.
그러면, StatusCode까지는 HttpStatus.() 이런 식으로 담아서 응답할 수 있는데, ResponseEntity에 객체를 담으려면 어떻게 해야할까?
@GetMapping("/products/{id})
public ResponseEntity<Product> findProduct(@PathVariable int id) {
....
return ResponseEntity<>(Product, HttpStatus.OK);
}
라이브러리: Logging, Logback, log4j
=> slf4j: gradle / Lombok
리팩토링 기법 3가지
1) 메소드 추출 extract method
- 조건문이 길 때
- 하나의 메소드가 2개 이상의 기능을 할 때
setName(name, "홍길동"): name이 null일 때 "홍길동을 넣고
-> existName(name) / setName(name, "홍길동);
2 명명: 메소드 동사 시작, 필드/클래스 - 명사
3) 긍정문
java에서 Stream을 통해 Map을 List로 변환할 수 있다.

Map<Integer, Product> map = new HashMap<>();
public List<Product> findProducts(int limit, int currentPage) {
return product_table.values().stream().toList();
}
우리가 손수 이 Configuration을 통해 프로그램을 시작할 수 있다.


나중에 jdk를 변경해가면서 실행하고자 할 때, 유용할 것 같다.

이런식으로 url에 아무값도 넣어주지 않으면 bad request가 발생한다.

@RequestParam(value = "categoryId", required=false)

위 처럼 설정하고 확인해보니 Internal Server Error가 발생하였다.
Log 확인

null 값이 들어가려면 어떻게 해야할까?

int -> Integer
Wrapper Class로 null 값이 허용될 수 있는 Integer로 변경해주었다.
오늘 많은 개념들을 배운 것 같다.
배열과 리스트의 비교부터 시작하여, 제네릭, HttpEntity
ResponseEntity의 오버로딩으로 인해 body도 넣는 생성자 확인 등
이러한 개념들을 쌓아나가 스프링 프로젝트에서 하나하나 녹여내야겠다.