전체 글

전체 글

    [Java] Comparable과 Comparator의 차이에 대해

    Comparable과 Comparator의 차이에 대해 Comparable Comparable 인터페이스는 해당 인터페이스를 구현한 객체에게 기본 정렬 규칙을 설정하는 목적으로 사용된다. 정렬 수행 시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의하는 인터페이스다. int[] nums = {4, 5, 1, 3, 2, 7, 6}; Arrays.sort(nums); Arrays.stream(nums).forEach(System.out::println); // 오름차순으로 출력됨 Java에서 제공되는 정렬이 가능한 클래스들은 모두 Comparable 인터페이스를 구현하고 있으며, 정렬 시에 이에 맞게 정렬이 수행된다. 위의 코드도 마찬가지이며 오름차순으로 출력이 된다. 그렇다면 다음의 경우에는 어떤식으로..

    [자료구조] 대표적인 Sort 알고리즘과 그 특징에 대해

    대표적인 Sort 알고리즘과 그 특징에 대해 선택 정렬 (Selection Sort) 순차 탐색을 해서 최소/최대 값을 찾는다. 해당 값을 현재 인덱스의 값과 바꿔준다. 다음 인덱스에서 위의 과정을 반복해준다. 첫 회차 때에 n-1개로 시작해서 1개씩 그 수가 줄어들며 n-2개, ... , 1개를 탐색하게 된다. 시간 복잡도는 배열과 상관없이 전체 비교를 하여 항상 O(N^2) 가 된다. public static void selectionSort(int[] arr) { int index; for (int i = 0; i < arr.length - 1; i++) { index = i; for (int j = i + 1; j < arr.length; j++) { if (arr[j] < arr[index]) ..

    [Java] Map의 Collection API 에 대해

    Map의 Collection API 에 대해 HashMap은 자바를 사용하다보면 필연적으로 많이 사용하게 되는 컬렉션이다. 이를 더욱 사용하기 편리하게 해주는 Collection API 에 대해 알아보겠다. getOrDefault default V getOrDefault(Object key, V defaultValue) { V v; return (((v = get(key)) != null) || containsKey(key)) ? v : defaultValue; } Map map = new HashMap(); map.put(1, 1); map.put(2, 2); System.out.println(map.getOrDefault(1, 10)); System.out.println(map.getOrDefault..

    [Java] String 객체와 String 리터럴에 대해

    String 객체와 String 리터럴에 대해 String str1 = new String("abc"); String str2 = "abc"; String은 다음과 같은 방법으로 선언할 수 있다. 그렇다면 이 두 방법의 차이점은 과연 무엇일까?? String str1 = new String("abc") 는 new 연산자를 이용한 생성법이고, String str2 = "abc"; 는 문자열 리터럴 생성법이다. new 연산자는 메모리의 heap 영역에 할당되고 리터럴 방식은 String Constant Pool 영역에 할당된다. String Constant Pool 영역은 Java Heap Memory 내에 문자열 리터럴을 저장한 공간이며 HashMap으로 구현되어 있다. 한 번 생성된 문자열 리터럴은 변경..

    [Java] String, StringBuilder, StringBuffer 에 대해

    String, StringBuilder, StringBuffer 에 대해 String 은 불변 객체이다. 불변 객체에 대해 잘 모른다면 이 포스팅부터 보자 (불변 객체) String str = "a"; str = str + "b"; System.out.println(str); // "ab" 위의 String 연산은 기존의 str에 "b"가 붙어서 "ab"가 된 것처럼 보이지만 사실은 새로운 메모리 영역을 할당한 것이다. 이 말인 즉슨, String을 통한 문자열 추가 삭제를 빈번히 하게된다면 힙 메모리 영역에 많은 가비지가 생기게 된다는 것이다. 이럴 때에 사용하는 것이 StringBuilder, StringBuffer 이다. 이 둘은 가변성을 가지기 때문에 동일 메모리에서 문자열 변경이 가능하다. 다음..

    [Java] Immutable Object (불변 객체) 에 대해

    보기 더 편한 양식은 여기서~!(github.com/Be-poz/TIL/blob/master/Java/Immutable%20Object%20(%EB%B6%88%EB%B3%80%20%EA%B0%9D%EC%B2%B4)%20%EC%97%90%20%EB%8C%80%ED%95%B4.md) Immutable Object (불변 객체) 에 대해 불변 객체는 생성 후에 그 상태를 바꿀 수 없는 객체를 말한다. 반대 말로는 가변 객체(mutable)가 있다. 불변 객체는 복제나 비교를 위한 조작을 단순화 시켜주고 성능 개선에 도움을 주지만, 변경 가능한 데이터를 많이 가지고 있는 경우에는 오히려 독이 되기도 한다. class Ex{ public int num; public Ex(int num){ this.num = nu..

    [Spring] @BeforeEach @BeforeAll @AfterEach @AfterAll 에 대해

    @BeforeEach @BeforeAll @AfterEach @AfterAll 에 대해 테스트를 실행 시에 반복되는 세팅 로직 등이 있을 때에 이 어노테이션들을 사용할 수가 있다. 코드로 바로 확인해보자 @SpringBootTest public class eachAllTest { @BeforeEach public void beforeEach() { System.out.println("BeforeEach"); } @BeforeAll static void beforeAll(){ System.out.println("BeforeAll"); } @AfterEach public void afterEach() { System.out.println("AfterEach"); } @AfterAll static void a..

    [Spring] Validator 생성 시 주의해야 할 점, Invalid target 오류

    Validator 생성 시 주의해야 할 점, Invalid target 오류 Custom 한 Validator 를 많이들 생성할 것이다. 이번에 나는 프로젝트를 수행 도중에 크게 막히는 부분이 있었다. Invalid target for Validator [com.ticket.captain.festival.validator.FestivalCreateValidator@5d035ab6]: com.ticket.captain.festival.dto.FestivalUpdateDto@3407ded1 바로 다음과 같은 오류였다. 이 오류가 발생할 당시에 코드는 다음과 같았다. // validate 메서드는 생략 @Component @RequiredArgsConstructor public class FestivalCre..