목록분류 전체보기 (138)
DOing
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cAwJNm/btrmFo6kuEk/APTanrk7JlQHtyP9Yw59Sk/img.png)
제네릭 제네릭은 프로그램의 안정성을 도와주는 도구 중 하나로, 컴파일 단계에서 자료형을 체크해주는 도구이다. 제네릭을 왜 사용해야 하는 지, 어떻게 프로그램의 안정성을 제공해준다는 것 인지 예시를 통해 알아보자. chicken만을 넣는 chickenBox가 있다. class Chicken{ } class ChickenBox{ private Chicken[] box = new Chicken[10]; int cursor = 0; void putData(Chicken chicken){ box[cursor++] = chicken; } Chicken getData(){ Chicken chicken = box[cursor - 1] box[cursor - 1] = null; cursor--; return chicke..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/KBEDi/btrmCBTaC4s/96iKK3eOL0WagUAS2aFQak/img.png)
폭포수 개발 폭포수처럼 각 단계가 위에서 아래로 물이 떨어지듯 차례대로 진행되어 이름이 붙여졌다. 한 단계가 끝나면 다음 단계로 내려가며 소프트웨어를 한번에 한 단계 씩 만들어나가는 방식이다. SDLC(Software Development Life Cycle, 소프트웨어 개발 수명 주기)를 순차적으로 따라간다. 애자일이 등장하기 전 개발 프로젝트 대부분은 폭포수 개발 방식을 사용했다. 계획 중심 : 폭포수는 일에 필요한 모든 사항을 완벽하게 측정하여 계획을 수립한다. 마지막 단계에 테스트 : 폭포수는 마지막 전까지 통합하지 않기 때문에 마지막까지 테스트할 수 없지만, 초기에 모든 것을 고려하여 계획을 세웠기 때문에 계획대로 진행한다면 버그는 없을 것으로 기대한다. 빅뱅 (Big Bang) 릴리즈 : 요구..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/WqJUQ/btre4NsyGxW/QrZaE74iHPYZ1S2qKimQV0/img.png)
하드 코딩을 상수로 고치는 과정 중에서 static과 final에 대한 의문이 생겼습니다. 이번 포스팅을 통해 static과 final에 대한 개념을 잡고가려고 합니다. 🖐 잠깐! 하드 코딩이란? 프로그램의 소스 코드에 데이터를 직접 입력해서 저장하는 것을 의미합니다. // 테마 내 색깔 개수 확인 if(3>=colorSet.size() || colorSet.size()>6){ throw new ApiRequestException(" 테마 내 색은 최소 3개, 최대 6개입니다"); } 하드 코딩을 상수화 하자! // 테마 내 색깔 개수 확인 if(COLOR_SIZE_MIN>=colorSet.size() || colorSet.size()>COLOR_SIZE_MAX){ throw new ApiRequestE..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dsVaGw/btre5aUMbZs/HMGpmuRmsIg8LEVwDGYpGK/img.jpg)
새 프로젝트의 요구사항 중에 '리스트 내 요소들은 중복되지 않아야 합니다'가 있었습니다. 리스트 내 요소들이 중복되는지를 확인하고, 있다면 예외를 발생시켜야 했습니다. 이와 같은 상황을 어떻게 자바에서 해결해야할지 알아보도록 하겠습니다. 1. Set 이용 : Set은 중복을 허용하지 않는 자료구조 입니다. : 리스트를 set으로 변환해서 크기를 비교합니다. 크기가 달라졌다면 리스트에 중복된 요소가 있었다는 것을 의미합니다. public static void main(String[] args) { List numList = Arrays.asList(1,1,2,3,4,5); // Set 으로 변환 Set numSet = new HashSet(numList); if(numSet.size()!= numList...
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b5RK9x/btreQ75g9IU/ukiVqYdFM5toXLCMNG18A0/img.png)
이전 프로젝트에서는 Request로 오는 객체를 모두 Service단에서 검증했었다. 그러다보니 Service단이 너무 뚱뚱해지는 기분이 들었다. Service단은 핵심 비지니스 로직에만 집중할 수 있게 만들어야한다고 생각하며 다른 방법을 알아보던 중 Bean validation이라는 것을 알게되었다. 🌱 Bean validation Bean validation은 클래스의 필드에 annotation을 이용하여 필드가 갖는 제약 조건을 정의하는 구조로 이루어진 검사다. validator가 그 클래스로 생성된 객체의 유효성 여부를 확인한다. 어떠한 비즈니스적 로직에 대한 검증이 아닌, 객체 자체의 필드에 대한 검증을 한다. 🌱 build.gradle에 의존성 추가 // Spring Boot Bean Vali..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/R6I2f/btrbYubO7YK/qns4aMTIGK3hXxT7oHSkH1/img.png)
💡 컬렉션? 자바에서 자료구조를 표현하는 인터페이스이다. 컬렉션을 구현한 자료구조에는 List, Stack, Queue, Set, Map이 있다. 자바의 자료형은 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 나누어진다. 대표적으로 기본 타입에는 char, int, float, double, boolean 등이 있고 참조 타입은 class, interface 등이 있다. Collection의 자료형에는 primitive 타입은 올 수 없다. primitive 타입에 해당하는 wrapper class 가 존재하니 그것을 대신 사용하자. List ingeterList = new ArrayList(); List stringList = new ArrayList(); 💡..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/8gBjN/btreJQRMm9t/nibKqMsz9mJsJ1RtXkjEP1/img.png)
LocalDate : 날짜 타입 LocalTime : 시간 타입 LocalDateTime : 날짜 + 시간 타입 💡 현재 시간 알아내기 public class Main { public static void main(String[] args) { System.out.println("현재 시간 알아내기"); LocalDate date = LocalDate.now(); LocalTime time = LocalTime.now(); LocalDateTime dateTime = LocalDateTime.now(); System.out.println(date); // 2021-08-12 System.out.println(time); // 12:30:33.0000021 System.out.println(dateTime..
Querydsl 도입 - 복잡한 조회쿼리의 경우에는 JPQL을 짜야한다. 근데 JPQL을 작성하다가 현타옴 코드도 너무 안예쁘고 이럴거면 JPA 왜도입했나.. MyBatis가 낫겠다.. 팀원들이 모두 이런 생각을 가졌고 Querydsl을 도입하면 훨씬 자바스럽게 코드를 짤 수 있다는 것을 알았다. 그리고 팀원들이 모두 합의해서 Querydsl를 공부하여 도입하기로 했다. 새로운 기술을 도입하는 것임에도 불구하고 팀원들은 모두 기대된다며 적극적으로 배우고 도입하려했다. 이모습에 정말 자극과 힘을 받았다. JPQL 극혐,. Querydsl을 점차 도입하고 있다. JPA로 도대체 어떻게 DB를 조회하다는거냐???라는 의문이 항상있었다. 그러나 이제는 그런 의문들이 해결되고 있고 Querydsl이야 말로 정말 ..