2024-04-04 (79일차) - ERD 수정, 마이페이지 count 구현, int & Integer 타입

·2024년 4월 4일

프로젝트

목록 보기
42/57

[프로젝트 남은 TODOs]

  • 필터
    • 필터 다중조건 (다중선택)
    • 필터 전체선택 전체해제 버튼
  • 회원
    • 회원 비밀번호 찾기
    • 로그인아이디 찾기
    • 나의 게시글 jsp
  • 카페 스크랩
  • 검색
    • 조건별 추천검색어에서 '카페'라는 단어가 포함되어있다면 파싱하여 제외시켜 검색시키기
    • 검색결과 없을 경우에 대한 처리
    • 제휴문의 (관리자에게 이메일보내기 기능) 구글폼 사용

완료

  • 카페 좋아요 (90%) (수정필요)
    - 사용자 위치기반 카페와의 거리 표시 (구현 x, 기능에서 제외)
    - 검색창
  • 메인페이지 하단
    - 추천카페, 인기카페, 신규카페
  • 필터 자잘한 오류 수정
  • 선택 필터 색상 css 처리
  • 마이페이지 (내가쓴글, 내가한 질문, 나의 댓글, 내가찜한카페 count 가져오기)

vs code 세팅

cmd

npm install classnames
npm install react-icons --save


ERD 수정


마이페이지 게시글 count 가져오기

마이페이지에서 내가쓴글, 내가한 질문, 나의 댓글, 내가찜한카페 갯수 보여주기를 구현하고자 아래처럼 컨트롤러 -> 서비스 -> 레파지토리 그리고 JSP를 구현했는데..

마이페이지 접속을 하면 해당 에러가 뜸..

"Optional int parameter 'memberId' is present but cannot be translated into a null value due to being declared as a primitive type."


콘솔에 회원번호로 SELECT COUNT(*)쿼리가 뜨고 회원번호도 나오는데.. 원인을 모르겠어서 결국 ChatGPT에게 상황을 설명하고 원인을 물어보니.. 변수타입을 int에서 Integer로 바꿔줌으로써 memberId가 NULL일 수 있음을 표시하라고 한다.

원시타입을 사용해야 하는 이유

참고사이트

원시 타입
    - stack에 값이 그대로 저장되는 타입을 말한다.
    - 어딜 참조하고 있는게 아니므로 보다 빠르게 값에 접근할 수 있다.

참조 타입
    - stack에 값이 그대로 저장되어 있지 않다.
    - stack에는 heap의 어딘가를 가리키는 주소가 저장되어 있다. 해당 주소를 따라가면 값을 찾을 수 있다.
    - 실제 값이 stack에 저장되어 있는 것이 아니라 stack을 갔다가 heap을 가서 해당 값을 찾아야하므로 
    원시 타입에 비해 데이터 접근 속도가 느리다.


- 참조 타입은 보통 원시 타입에 비해 기능을 더 많이 제공해준다. 그래서 메모리를 더 많이 잡아먹는다.
- 자바에서 원시 타입은 제네릭 타입을 사용할 수 없지만 참조 타입은 가능하다.
 

 

int와 Integer의 차이
- int는 원시 타입이고 Integer는 int를 감싸서 만든 참조 타입이다.
- 따라서 int는 그냥 stack에 그 값이 저장되어 있지만 Integer는 stack에 heap을 가리키는 주소 값이 존재한다.

위에서 설명한 것처럼 int를 사용하는 것이 계산 속도와 메모리 사용 측면에서 이점이 있다.

 

단, java에서 int는 null을 넣을 수 없지만 Integer는 null을 처리할 수 있다. 
그리고 Integer는 int를 감싸서 만든 것이므로 int를 갖고 할 수 있는 여러 메서드들을 제공해준다.

결론:

자바에서 int는 원시타입이기 때문에 null을 넣을 수 없지만 Integer는 참조타입으로써 null을 처리할 수 있다.

그래서, int memeberId를 Integer memberId로 선언해주고 에러 해결과 동시에 원하는 데이터의 갯수를 잘 보여준다!

profile
hello world

0개의 댓글