본문 바로가기

전체 글290

서버에서 내려주는 에러 메시지를 직접 정의해야만 하는 이유 1차원적으로 개발자가 에러 메시지를 마음대로 컨트롤할 수 없음이 제일 큰 문제이다. 이유를 좀 더 상세하게 풀어보자. 스프링 프레임워크에서 기본으로 제공되는 형식화된 StatusCode, ErrorMessage로 응답을 내려주기 때문에, 소통하는 상대 서버나 클라이언트가 이해할 수 없다. 또, 상호 간에 정해놓은 에러 메시지에 대한 규칙이 깨질 수 있다. 에러 메시지를 서버에서 커스텀하게 정의해주지 않게 되면, 스프링 프레임워크에 종속적인 에러 메시지를 가져다 쓰게 되는 것이고 자연스레 개발자는 스프링 프레임워크에 의존적이게 되는 것이다. 어느 날 갑자기 스프링 프레임워크가 특정 에러에 대한 업데이트를 한다면, 갑자기 클라이언트에서 예상치 못한 장애가 발생할 수 있게 된다. 또 다른 이유로는 의도치 않게.. 2023. 4. 22.
Java 에러 - Exception in thread "main" java.util.regex.PatternSyntaxException 다음과 같이, "+"를 구분자로 split() 메서드를 이용해서 문자열을 분리하려 했다. 에러 메시지는 다음과 같았다. 구글링을 통해 확인해보니, ?, *, +, (, ), [, ], {, } 와 같은 일부 특수 문자를 replace(), replaceAll(), split() 메서드의 구분자나 기준으로 사용할 때 발생하는 에러라고 한다. 해결방안은 위 특수문자 앞에 역슬래쉬 2개(\\)를 같이 넣어주면 가볍게 해결할 수 있다. // example String str = "123+456"; String[] strArr = str.split("\\+"); // 역슬래쉬 = 원화 표시 // strArr = ["123", "456"] ++ 위 특수문자 양 옆에 대괄호([])로 감싸줘도 가능하다. // exam.. 2023. 3. 20.
우선순위 큐(Priority Queue)를 공부하면서 Queue는 먼저 선입선출(FIFO)이라는 특징을 가지는 구조이다. (Stack은 후입선출 - LIFO) 그럼 우선순위 큐는? 우선순위 큐는 말 그대로 우선순위가 높은 데이터를 먼저 뽑아내는 구조를 말한다. 그럼 여기서 의아할 게 어떤 기준을 가지고 우선순위를 정하는 걸까 싶은데, 단순히 요소의 크기를 우선순위를 잡고 오름차순, 내림차순 정렬을 할 수 있고, 우선순위 큐의 타입을 배열로 지정한다면, 특정 요소의 크기순으로 우선순위 기준을 잡을 수도 있다. Queue pq = new PriorityQueue(Comparator.comparingInt(o -> o[1])); (pq라는 우선순위 큐에는 int타입의 1차원 배열이 들어가게 되고, 배열의 1번째 인덱스의 값을 기준으로 정렬이 된다) Java에서 .. 2023. 3. 6.
2023년 2월 27일 - SI 탈출용 백엔드 학습 공략집 웨비나 회고 부트캠프 수료를 하고, 백엔드 개발과 관련된 세미나는 원 없이 듣고 싶었다. 부트캠프에서 프로젝트를 하면서 AWS 서비스를 사용해보지 못해서 관련된 지식을 좀 쌓고 싶었기 때문에, 첫 번째로 AWS에 관련된 웨비나를 들었다. 여러 AWS 서비스와 EC2, S3, RDS 등등 직접 과정을 진행하는 웨비나였는데, 큰 도움은 되지 못했다. 그 후에 들었던 것이 이 SI 탈출용 백엔드 학습 공략집 웨비나였다. 현재 취준생인 나는, 이직을 주제로 하는 이 웨비나와는 살짝 거리가 있었지만, 꽤나 도움은 됐다. 이 웨비나를 통해, 현재의 나에게 도움이 되었던 말 5가지는 다음과 같다. 인생은 선택이 전부다. 한정된 선택의 기회 중에서 좋은 선택은 인생을 좌우한다. 이직에 관련된 웨비나였기에, 이직에 대한 좋은 기회는.. 2023. 3. 5.
작성중) 클린 코드(Clean Code) - Uncle Bob; Robert Cecil Martin 책의 제목 그대로 깨끗한 코드 작성법을 알기 위해 읽게 되었다. 이 책에서 워드 커닝햄(Ward Cunningham)의 말을 인용한 부분이 인상깊었다. 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면, 깨끗한 코드라 불러도 되겠다. 코드가 그 문제를 풀기 위한 언어처럼 보인다면, 아름다운 코드라 불러도 되겠다. 깨끗한 코드는 읽으면서 놀랄 필요가 없어야 한다고 워드는 말한다. 즉, 코드를 독해하느라 머리를 쥐어짤 필요가 없어야 한다고 말한다. 프로그래밍 공부를 시작한지 별로 안되었지만, 이 인용문을 보면서 저절로 고개를 끄덕이게 되었다. 반드시 알아야 하는 객체 지향 설계의 다섯 가지 원칙은 다음과 같다. SRP(The Single Responsibilty Principle) : 클래스에는 .. 2023. 3. 3.
Java 진수 변환 10진수 → n진수 public class Test { public static void main(String[] args) { int k = 15; System.out.println("10진수 → 2진수"); System.out.println(Integer.toString(k,2)); System.out.println(Integer.toBinaryString(k)); System.out.println(); System.out.println("10진수 → 3진수"); System.out.println(Integer.toString(k,3)); System.out.println(); System.out.println("10진수 → 4진수"); System.out.println(Integer.toString.. 2023. 2. 18.
2개 리스트의 교집합, 합집합, 차집합 구하기 교집합 retainAll() 메서드로 두 리스트의 교집합 구하기 import java.util.Set; import java.util.HashSet; import java.util.Arrays; import java.util.List; import java.util.ArrayList; public class Test { public static void main(String[] args) { Set str1Set = new HashSet(Arrays.asList("ab", "bc", "cd", "ef", "fg")); Set str2Set = new HashSet(Arrays.asList("cd", "ef", "fg", "gh", "hi")); Set intersection = new HashSet(st.. 2023. 2. 17.
2개의 List를 Stream을 사용하여 비교하기 noneMatch ( 불일치하는 요소 ) import java.util.Arrays; import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; public class Test { public static void main(String[] args) { List str1List = Arrays.asList("ab", "bc", "cd", "ef", "fg"); List str2List = Arrays.asList("cd", "ef", "fg", "gh", "hi"); List filteredList = str1List.stream() .filter(el -> str2List.stream().n.. 2023. 2. 17.
Map 순회하기 Iterator 사용 Map map = new HashMap(); Iterator keys = map.keySet().iterator(); while (keys.hasNext()) { String key = keys.next(); map.get(key); } entrySet 사용 Map map = new HashMap(); for (Map.Entry entry : map.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); } Map은 Key-Value 쌍으로 이루어져있고, 이 한 묶음을 Entry라고 표현한다. keySet 사용 Map map = new HashMap(); for (String key : map.keySe.. 2023. 2. 10.