본문 바로가기

Backend/JAVA23

[JAVA] List 반복문 안에서 객체 remove (feat.ConcurrentModificationException) List 를 돌면서 조건에 부합하는 객체는 해당 List 에서 제거를 해줘야 했다. 하지만 List(Collection.....😩) 를 루프돌면서 remove 하는 것은 쉽고 간단하지 않았고 ( 테스트 도중 빈번하게 ConcurrentModificationException 요 아이와 마주했다;ㅎ) 구글링에 나오는 아래 두 가지 방법을 했지만 뭔가.. 소스 읽기도 힘들고 이중으로 돌아서 NPE 아이가 올 때도 있어서 아예 메소드를 리팩토링했다. 1. while(it.hasNext()) {} 2. for (Iterator it = List.iterator(); it.hasNext();) {} 바로 JAVA8 이상에서만 사용할 수 있는 List.removeIf() !! https://docs.oracle.co.. 2020. 8. 6.
[JAVA] 객체(Model) 를 통으로 화면에 찍기 (대체:@Data, .toString()) 이번에 신규 프로젝트를 작업하면서, 화면을 작업하다가 객체에 내가 원하는 데이터가 잘 있는지 디버깅해보고 싶어서 사용했던 방법을 공유하고자 글을 작성한다. 보통 화면에서 객체 디버깅을 한다면, 1. lombok 의 훌륭한 @Data 어노테이션을 사용하거나, 2. .toString() 메소드를 오버라이딩으로 확인하면 되겠지만, 이 글에선 두 방법 모두 사용하지 않고 Gson 으로 디버깅하였다. === TMI 개인적으로 @Data 어노테이션 남발을 금지하고, .toString() 오버라이딩은 지저분해보이고 별로 선호하지 않기 때문에.. 핵심은 GsonBuilder 의 .setPrettyPrinting() :) /** * 화면 출력용 컨트롤러 (임시) todo: 테스트 끝나면 제거 */ @PostMapping.. 2020. 5. 11.
[Java] 문자열이 Enum 에 포함되어 있는지 확인하는 방법 입력받은 문자열에 대한 검증이 필요했고, 그 문자열은 Enum 으로 관리하는 영역에 대한 문자열이었다. 고로.. 나는 입력받은 문자열이 Enum 의 값과 일치하는지 확인해야했다 :) #1. Stream 사용 Arrays.stream(이넘.values()).anyMatch(v -> v.name().equals(문자열)); #2. Enums 메소드 사용 Enums.getIfPresent(이넘.class, 문자열).isPresent(); #3. EnumUtils 사용 // 기본 EnumUtils.isValidEnum(이넘.class, 문자열); // 기본 + 대소문자 무시 EnumUtils.isValidEnumIgnoreCase(이넘.class, 문자열); 이 중 3번째 방법이, 대소문자 무시해주는 메소드가 .. 2020. 3. 23.
[JAVA] 사용했던 정규식 모음 DTO 에 받는 필드들의 유효성 검증을 위해 @Pattern 어노테이션을 활용하기로 했다. 그 중 사용했던 정규식을 잊지 않기 위해 정리함.. 😊 1. 우편번호 포멧 (6자리 숫자 또는 건물번호(n, nn, n-nn, nn-n, nn-nn)) [0-9]{4}[-]?[0-9]{2}[-]?[0-9]{2} "123-456" -> 성공 "12-34" -> 성공 "1234" -> 성공 "1234-" -> 실패 2. 날짜 포멧 (YYYY-MM-DD 또는 YYYYMMDD) [0-9]{4}[-]?[0-9]{2}[-]?[0-9]{2} "20200202" -> 성공 "2020-02-02" -> 성공 "2020-0202" -> 성공 "202002021" -> 실패 "2020-02--02" -> 실패 3. 비밀번호 포멧 (숫.. 2020. 3. 10.
JAVA 숫자 세자리 수 마다 콤마찍기 자바스크립트말고 자바에서 숫자를 세자리 수 마다 콤마(,) 를 찍는 방법은... 단순했다. (맨날 까먹어서 문제;) DecimalFormat 이 #,### 이라고 해서 딱 4자리까지만 처리되지않고 모든 자릿수에 대응된다 :) int returnData1 = 123123; DecimalFormat Commas = new DecimalFormat("#,###"); String returnData2 = (String)Commas.format(returnData1); return returnData2; 2018. 8. 8.
SimpleDateFormat 나만 몰랐을 수 있는 활용법 SimpleDateFormat 을 사용할 때 요일정보는 영어로 주는데Locale.KOREA 인자와 같이 주면 한국어로 한국어로 데이터를 넘겨준다 ㅋㅋㅋㅋㅋㅋㅋㅋ이걸 이제 .. 알았다 .... * 사용방법 *1SimpleDateFormat sdf = new SimpleDateFormat("MM월 dd일 (E) hh:mm a", Locale.KOREA);cs 2018. 8. 6.