본문 바로가기

Back-End34

List객체를 toString()하게 되면 일어나는 일 https://thiswooin.tistory.com/9 TIL 230522 : toString()은 대괄호를 포함한 배열인 척하는 문자열이었다.향상된 for문으로 전체 출력을 해보려 했다. 오류 발생. for-each문에서는 배열이나 Iterable이 필요하다는 뜻 같다. 배열이 맞지않나?라는 생각으로 두가지로 출력해봤다. 배열 모양이 맞는 것 같았thiswooin.tistory.com지극히 자바에 아무것도 모르던 시절, 아무것도 모른채로 toString()에 대해 멋대로 해석한 포스팅을 우연히 다시보게 되고,다시 알게된 지식을 추가한 이 포스팅으로 Override하고자 합니다.Object클래스의 toString() 메소드자바에서는 어떤 클래스를 생성하든지 가장 상단에 Object클래스를 자동으로 상속.. 2024. 9. 4.
HashSet에 hashCode() 재정의 없이도 중복제거가 가능할까 결록적으로 중복제거는 된다.하지만, 그렇게 되면 Hash의 장점은 없이 LinkedList처럼 된다.해쉬 충돌을 피하게 해줘야하는 이유와 비슷하다.equals()를 재정의했다면 hashCode()도 같이 해주자. 코딩테스트 문제를 풀기 위해 자체 클래스 Path를 생성했다.이 Path들의 객체를 중복없이 모은다음 개수를 리턴하기 위해 Set를 생성했고,이를 위해 출발값과 도착값이 같으면 같은 객체로 인식하기 위한 일련의 과정을 정리했다. 0. 코드설명Path 클래스필드 : int[] from, int[] to생성자 : 두 필드에 입력값을 받는 생성자만 존재 (from, to 에 null값이 존재하면 안되도록)             큰 값이 from에 오도록 정렬하여 생성. (방향만 다른 경우를 만들지 않.. 2024. 7. 22.
연관관계를 설정하기 위해 필요한 id값을 알고 있다면 객체를 굳이 select할 필요가 있나? (쿼리 줄이기, getReferenceById) 고민기존 구현 사항Reply객체를 생성하기 위해 필요한 외래키는 User, Quiz이다.User : @AuthenticationPrincipal 을 통해 이미 가져온 User객체를 바로 활용 가능하다.Quiz : PathVariable을 통해 Id값은 이미 알고 있는 상황.  고민점위 코드처럼 퀴즈 객체를 불러와서 Reply에 넣어줘야 연관관계가 적용이 될텐데, 이후 Quiz객체는 사용되는 곳이 없다.실제로 위 코드대로 Reply를 Create하는 api를 실행해보면 실행된 쿼리는 아래와 같다.  이는 이미 알고있는 id값을 이용해 굳이 퀴즈 객체를 가져와 id 값만 쓰는 느낌이다.Quiz객체가 존재하는 지 체크를 해주는 의미가 있다한들, Select 쿼리가 낭비되는 느낌이다.   개선 점getOne메소.. 2023. 10. 24.
TIL 230802 : QueryDsl 사용하기 (JPAQueryFactory) 드디어 숱한 개념정리 끝에 QueryDsl을 사용할 순간이 왔다. 정리 1. QueryDsl 은 오픈소스 라이브러리이다. 2. 쿼리를 직접 쓰는 게 아니라 코드 형태로 쿼리를 만들 수 있게 해주는 방법들 중 하나다. (근데 현업에서 잘 쓴다) 3. QueryDsl에서 Q객체를 생성해서 객체를 활용한 쿼리를 만드는 데 쓰인다. 4. Q객체로 BooleanExpression을 만들 수도 있고, 쿼리에 필요한 변수를 만들 수도 있다. 5. Predicate를 활용하여 조건문을 만들어서 사용할 수도 있지만, JPAQueryFactory를 사용할 수도 있다. (현업에서 더 자주 쓰임.) 오늘은 JPAQueryFactory와 Q객체를 사용해서 DB기능을 만들어본다. QueryDsl로 로직 만들고 기존 구성에 추가하.. 2023. 8. 3.
TIL 230801 : QueryDSL 쓰려고 정리하는 배경지식들 (Predicate) 동적 쿼리 무조건 name만 가지고 조회하는 쿼리는 정적이다. 하지만 name이 아니라 age도 같이 조건으로 user를 조회하는 쿼리가 온다면? 아니면 아예 age만 조건으로 받는다면? 순간순간 다른 경우에 대응할 수 있게 그에 따른 쿼리가 만들어질 수 있게 하는게 동적쿼리라고 이해된다. https://ssdragon.tistory.com/91 https://tecoble.techcourse.co.kr/post/2022-10-11-jpa-dynamic-query/ 위 링크에서 소개되어 있는데, 동적쿼리를 쓰는 몇가지방법이 있는데 그중 하나가 QueryDSL이다. JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate.. 2023. 8. 2.
TIL 230731 : QueryDSL 어렵진 않은데 너무 복잡해 (1. ORM 발전 흐름) QueryDSL로 기존의 코드를 리팩토링 해보는 과제가 있었다. 그런데 명확하게 친절하고 Oneway한 튜토리얼, 가이드는 없었고 무수히 많은 방법들이 혼재되어 오히려 헷갈리게 됐다. 이번 TIL은 이 혼재된 정보들을 정리하며 하나씩 체화해보려 정리해나가는 글이다. 어떤 것들이 혼란스럽게 했나 QueryDSL을 쓰는 코드가 뭔데? (장점, 단점, 쓰는 문법, 세팅법) QClass Predicate QueryDslPredicateExecutor JPQL, RAW JPA, jdbc, DAO, Mybatis, ORM, ... 미묘하게 다른 용어들과 기술들. 몇가지씩 그룹해서 하나씩 아래 정리해본다. ORM의 발전 흐름 1. DB가 생겼다 : 서버를 개발하는 사람들은 DB에 접근하려고 코드를 짜기 시작했다. 하.. 2023. 8. 1.