Generic과 HttpEntity (24.05.09)

YJ·2024년 5월 9일
post-thumbnail

블로그 작성법
목표 > 공부한 내용 > 얻었고, 앞으로 이걸 해봐야지 적기

✋ 수업 목표

  • 배열 vs 리스트에 대해 공부해보자.
  • HttpEntity에 대해 공부해보자.
  • Generic에 대해 공부해보자.

🤔 공부한 내용

배열 vs 리스트

크기: 고정 vs 동적
빈칸: 가능 vs 없다
조회: 빠름 vs 비교적 느림
데이터 중간 추가: 느리다 vs 빠르다
자료형: 기본, 참조 vs 참조

여기서 이어서 나온 개념이 Wrapper Class이다.

int vs Integer

  • Generics: 1.8에 등장
    데이터 타입을 일반화(generalize)한 것이 Generics이다.
    : 자바 컬렉션 API가 모든 자료형을 가지고 사용하게 해줘야 한다.
    List<> <= 참조 자료형 = 객체 = Object
    <= 기본 자료형 = 객체
    - int, char, float, double,... => Wrapper => 객체화 Integer, Long, Float

"오토 언박싱"
객체.필드 이러한 방식을 사용할 필요가 없다.

Wrapper Class로 생성자에 value를 넣는 방식은
version 9에 더 이상 사용되지 않는다.

아래와 같이 값을 저장할 수 있다.

Integer num2 = 9;

Generic과 HttpEntity

ResponseEntity

생성자가 여러 개이다.

ResponseEntity를 생성할 때,
body, headers, status code를 담을 수 있다.

그러면, StatusCode까지는 HttpStatus.() 이런 식으로 담아서 응답할 수 있는데, ResponseEntity에 객체를 담으려면 어떻게 해야할까?

@GetMapping("/products/{id})
public ResponseEntity<Product> findProduct(@PathVariable int id) {
	....
    return ResponseEntity<>(Product, HttpStatus.OK);
}

로그(log): 발자국을 찍는다.

  1. 이 시스템이 잘 돌아가나?
  2. 콘솔창 (사용자 화면) / 텍스트파일 (archiving)
  • 프로젝트 마무리 : 텍스트 파일
  1. 에러 찾는 용도

라이브러리: Logging, Logback, log4j
=> slf4j: gradle / Lombok

로그 레벨

리팩토링 기법 3가지
1) 메소드 추출 extract method
- 조건문이 길 때
- 하나의 메소드가 2개 이상의 기능을 할 때
setName(name, "홍길동"): name이 null일 때 "홍길동을 넣고
-> existName(name) / setName(name, "홍길동);
2 명명: 메소드 동사 시작, 필드/클래스 - 명사
3) 긍정문

  • 팀 레포 -> 포크 -> 개인 발표

Stream

java에서 Stream을 통해 Map을 List로 변환할 수 있다.

Map<Integer, Product> map = new HashMap<>();

public List<Product> findProducts(int limit, int currentPage) {
                return product_table.values().stream().toList();
    }

Edit Configuration

우리가 손수 이 Configuration을 통해 프로그램을 시작할 수 있다.


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

URL의 Parameter에 null 값 넣기


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

해결 방법
https://stackoverflow.com/questions/12296642/is-it-possible-to-have-empty-requestparam-values-use-the-defaultvalue

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


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

Log 확인

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

int -> Integer
Wrapper Class로 null 값이 허용될 수 있는 Integer로 변경해주었다.

😉 앞으로 이걸 해봐야지

오늘 많은 개념들을 배운 것 같다.
배열과 리스트의 비교부터 시작하여, 제네릭, HttpEntity
ResponseEntity의 오버로딩으로 인해 body도 넣는 생성자 확인 등
이러한 개념들을 쌓아나가 스프링 프로젝트에서 하나하나 녹여내야겠다.

profile
dev

0개의 댓글