Java

    [Java] HashMap의 원리에 대해

    HashMap의 원리에 대해 이 글은 이곳에서 제가 정리한 것보다 더 정리가 너무 잘 되어있어서 가져왔습니다. HashMap은 Key, Value를 저장하는 Map의 구현체 중 하나입니다. 자료구조에 Key를 넣으면 Value를 반환하도록 합니다. 그리고 HashMap은 Key를 Hashing을 하여 저장하여 빠르게 처리 그리하여 HashMap이란 입력과 삭제에 대해 시간복잡도가 O(1)인 자료구조라고 합니다. initialize 우리가 Java를 사용할때 HashMap을 사용한다고 한다면 가장먼저 초기화를 해야합니다. (Key, Value는 모두 String이라고 하겠습니다.) 그러면 아래와같이 초기화 할 것입니다. Map map = new HashMap();이때 내부에서는 어떤일이 일어나는지 보겠습니..

    [Java] CheckedException과 UncheckedException 에 대해

    Checked Exception과 Unchecked Exception 에 대해 Error는 시스템이 비정상적인 상황이 생겼을 때 발생한다. 시스템 레벨에서 발생하기 때문에 심각한 수준의 오류이다. 개발자가 미리 예측할 수 없기 때문에 애플리케이션에 오류에 대한 처리를 하지 않아도 된다. Exception은 구현한 로직에서 발생한다. 예외는 발생할 상황을 미리 예측하고 처리할 수 있다. Checked Exception Unchecked Exception 처리 여부 반드시 예외를 처리해야 함 명시적인 처리를 강제하지 않음 확인 시점 컴파일 단계 실행 단계 예외 발생 시 트랜잭션 처리 roll-back 하지 않음 roll-back 함 대표 예외 Exception을 상속받는 하위 클래스 중 RuntimeExce..

    [Java] JUnit 가지고 놀아보기

    JUnit 가지고 놀아보기 String[] strings = "1,2".split(","); assertThat(strings).contains("1"); //true assertThat(strings).containsExactly("1"); //false assertThat("Cowboy Bebop").contains("Cowboy"); assertThat("The Legend Of Zelda") .startsWith("The") .contains("he L") .endsWith("Zelda"); 위와 같이 contains를 다양하게 이용할 수 있다. 위의 코드 외에도 다양한 contains 관련 메서드가 있다. assertThat(100).as("100 equals Test").isEqualTo(10..

    [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 이다. 이 둘은 가변성을 가지기 때문에 동일 메모리에서 문자열 변경이 가능하다. 다음..