Java

오늘 한 일 오늘은 조건검색기능을 QueryDSL을 이용해서 만들었다. 자바 백엔드 기술은 Spring Boot와 Spring Data JPA를 함께 사용한다. 하지만, 복잡한 쿼리, 동적 쿼리를 구현하는 데 있어 한계가 있다. 이러한 문제점을 해결할 수 있는 것이 QueryDSL이다. QueryDSL이 등장하기 이전에는 Mybatis, JPQL, Criteria 등 문자열 형태로 쿼리문을 작성하여 컴파일 시에 오류를 발견하는 것이 불가능했다. 하지만, QueryDSL은 자바 코드로 SQL 문을 작성할 수 있어 컴파일 시에 오류를 발생하여 잘못된 쿼리가 실행되는 것을 방지할 수 있다. 난 이 자바코드로 써서 코드에서 에러를 바로 찾아주는 부분이 정말 신세계 였다. 먼저 QueryDSL을 사용하기 위해서는..
오늘은 객체지향 프로그래밍에대한 내용부터 SOLID원칙까지 테크톡 준비를 해서 스터디 팀원들에게 발표했다. 그래서 이 글은 배운 객체지향의 원칙 5가지 SOLID원칙에 대한 정리 내용이다. 1. SRP(Single responsibility principle)​ 단일 책임 원칙​ 먼저 단일 책임 원칙이다. 1번 원칙은 단어를 하나씩 떼어서 생각해보면 직관적으로 뜻을 이해할 수 있는 원칙이다. 단일 : 하나의 객체(클래스) 책임 : 해당 클래스가 할 수 있는 기능, 혹은 정보만 원칙 : 원칙 정도로 정리가 되는데, 하나의 클래스는 하나의 책임만 가지며, 클래스가 가지는 모든 서비스는 그 책임을 수행하는데 집중되어 있어야 한다. 라는 원칙인데, 이것만 들어보면 잘 이해가 안 될 수 있다 아래를 보자 ​ 고양..
오늘한 일 오늘은 팀원들 코드를 pull받아서 기능 수정과 팀원들에게 코드를 조금 더 깔끔하게 바꿔달라는 요청을 받아서 코드들을 다 수정했다. 시간이 가장 많이 걸린건 모든곳에 다 쓰이는 주요 엔티티 이름 자체를 처음부터 잘못 지었다는 것이다... 이것 바꾼다고 시간을 많이 썼지만 이제 코드가 가독성도 좋아지고 깔끔해진 느낌이 들었다(이게 클린코드 인가...?) 메서드 명도 알아보기 힘들다며 혼남... 실수로 입력 안 하고 지나간 부분을 팀원이 집어줘서 더욱 클린한 코드로 개선했습니다! 엔티티 이름도 같이 고민했습니다! 내일할 일 내일은 비로소 조회수를 구현해서 완성하고, 시간이 남는다면 채팅기능까지 조금 공부해보도록 하겠다.. 바이...
해당 코드는 먼제 답을 말하자면 투 포인터를 사용하여 풀었다. 원래 3중for문을 쓰는 괴상한(?) 구조로 만들어서 동작은 했지만 메모리 초과가 발생해서 투 포인터를 사용했다. 문제 N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. 출력 첫째 줄에 경우의 수를 출력한다. 문제링크 : https:..
해당 문제는 무작위 문자열에서 같은 문자의 개수가 가장 많은(가장 닮은 문자)를 찾아서 해당 경우의 수의 틀린문자 차이(최소차이)를 구해내는 문제이다. 문제 설명​ 길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다. 두 문자열 A와 B가 주어진다. 이때, A의 길이는 B의 길이보다 작거나 같다. 이제 A의 길이가 B의 길이와 같아질 때 까지 다음과 같은 연산을 할 수 있다. - A의 앞에 아무 알파벳이나 추가한다. - A의 뒤에 아무 알파벳이나 추가한다. 이때, A와 B의 길이가 같으면서, A와 B의 차이를 최소로 하는 프로그램을 작성하시오. 입력 첫째 줄에 A와 ..
지금 확인해보니 2주차 WIL을 안 썼다... 일단 3주차 WIL 05.29(월) 월요일은 공휴일이어서 쉬었다 05.30(화) 키오스크 클래스 구조 틀 잡기 화요일은 키오스크 과제를 받아서 만들기위해 먼저 JAVA클래스 기본틀을 잡았다. 처음 해봐서 기본구조를 설계하고 잡는것도 많은 어려움이 있었다. 처음에는 추상화(abstract)까지 사용해서 카테고리별 메뉴를 클래스별로 모두 만들었었다. 그게 필요없다는걸 깨닫고 코드를 대대적으로 수정해 메뉴를 상속받는 카테고리별 클래스와 카테고리별 클래스들이 각각 메뉴필드를 들고있고, 부모 메뉴가 카테고리별 메뉴들을 포함관계가 되는것으로 변경했다. 05.31(수) 완성한 뒤 선택구현사항 구현 기본적인 완성본을 완성하고 그 뒤 장바구니 물건들이 중복되면 갯수로 합쳐..
오늘은 배운 JAVA를 이용해서 키오스크 만들기를 했다. 나는 제일 많이 써본 키오스크가 맥도날드인 관계로 맥도날드 키오스크를 완성했다. 문제점 처음에 아무것도 모른채로 배운걸 써먹을려고 코드를 짰는데, 카테고리와 주문 메뉴 음식들 모두 추상화까지 써서 클래스로 하나하나 만들어서 등록해줬었다. 시도해본 것들 클래스 Kiosk에서 Menu클래스를 포함하고 Menu클래스는 그 뒤에 카테고리별 클래스들이 상속하고, 카테고리별 클래스내에 음식을 카테고리별로 묶은 추상화abstract클래스를 상속하는 음식들을 포함한다. 해당 방법으로 구현은 완료되고 동작도 했으나 코드가 깔끔하지 못하고, 비효율적이다. 해결 팀원들과 코드리뷰에서 알게된 사실 카테고리별로만 클래스를 나누고 해당 클래스에 리스트형태로 생성자에서 ad..
오늘은 JAVA문법을 공부했다. 연산자와 조건문,반복문, 배열에 컬렉션등을 공부했다. 문제점 컬렉션 문제중 Map자료구조 사용중 순서대로 저장한 값을 출력하는 방법에서 Set이나 List와 같은 방법으로는 출력이 되지않음. 해당 List출력방법 ArrayList strList = new ArrayList(); while (true) { String desc = sc.nextLine(); strList.add(desc);//List에 해당 문자열을 add if (desc.equals("끝")) {//끝 문자를 입력시 반복중지 break; } } for(String str: strList){//forEach를 이용해 출력 System.out.println(str); } 시도해본 것들 위와 같은방법 시도 : ..
나모_
'Java' 태그의 글 목록