분류 전체보기

Backend

java Test 코드 작성 시 lombok을 사용할 수 없는 경우 해결법

때때로 스프링 프로젝트에서 테스트 패키지의 테스트 메소드에서 롬복을 사용하려고 하는 경우가 있다. 하지만 main 패키지에서는 잘 되는데 test 패키지에서는 안되는 경우가 종종 발생한다. build.gradle 에 다음과 같은 내용을 추가해주어야 한다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' // 아래에 testCompil..

Computer Science/Data Structure

편향 이진탐색트리를 해결하기 위한 방법(2) RED-BLACK TREE

이전에 포스팅 했던 편향 이진 탐색 트리를 해결 하기 위한 방법 중 하나인 AVL TREE 가 아닌 또 다른 해결 방법인 RED-BLACK TREE에 대해서 알아보자. RED-BLACK TREE 레드-블랙 트리도 처음 공부할 때, 많이 헷갈릴 수 있다. 특히 나중에 해결하기 위한 방법으로 Recoloring 과 Restructuring 방식 두 가지가 나오는데, 언제 적용해야 하는지가 분명하지만 이상하게도 자주 헷갈린다! 이를 쉽게 구분하기 위한 개인적인 팁도 제공해보려고 한다. 먼저 RED-BLACK TREE 의 특징에 대해서 알아보자. RED-BLACK TREE 특징 모든 노드는 빨간색 or 검은색 이다. 루트 노드는 무조건 검은색이다. RED-BLACK 트리에 존재하는 NIL은 검은색이다. 빨간색 ..

Language/Java

enum의 Enum 상수 객체의 변수 사용과 생성

Enum 상수 컬렉션을 정의하는데 사용하는 특수한 자바 유형이다. Enum 클래스로 상수를 정의할 때에는 다음과 같이 정의를 한다. enum Constants { AA, BB, CC, DD } enum에 접근 할 때에는 Constants.AA 와 같이 스태틱 변수에 접근하는 것처럼 접근을 할 수 있고, 각 값에 대해서 ordinal 순서에 대한 값이 생긴다. 어떻게 생기는 것일까? 위에 힌트가 있다. 자세히 살펴보면 Enum 클래스라고 명시를 했는데, 선언을 하는 것을 보니 enum이라고 되어 있다. 사실 enum은 Enum 클래스를 생성하는 특수한 방식이다. Enum 클래스의 생성자를 살펴보면 그 비밀을 알 수 있다. /** * Sole constructor. Programmers cannot invo..

Computer Science/Data Structure

Hash Fuction, Hash Table, Hash Collision

Hash Function 데이터의 효율적인 관리를 목적으로 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다. 해시 함수와 관련된 용어를 먼저 살펴보자. Key : 매핑 전 값 Hash value : 매핑 후의 값 Hashing : 매핑하는 과정 위의 용어들을 기본으로 두고 자세히 살펴보자. Hash Table 해시 테이블은 Key를 Hash Function을 사용하여 Hash value로 매핑하고, 이 Hash Value를 index로 Data를 저장하는 방식이다. 듣다보면 파이썬, JS의 Dictionary, 자바의 Map이 떠오를건데 바로 Hash Table을 방식을 택한 자료구조 이다. 위 사진을 보면 buckets 라는 것이 보인다. buckets 는 해시 테이블에서 데이터가 저장..

Computer Science/Data Structure

편향 이진탐색트리를 해결하기 위한 방법(1) AVL TREE

AVL(Adelson-Velsky and Landis)TREE AVL의 full form은 발명자의 이름이다. 먼저 AVL 트리의 특징에 대해서 살펴보자. 특징 이진탐색트리의 속성을 그대로 가진다. 왼쪽, 오른쪽 서브트리의 높이 차이가 최대 1이어야 한다. 높이 차이가 1보다 커지면 Rotation을 통해 균형을 맞춘다. Rotation 방식을 설명하기 전에, 먼저 높이 차이를 비교하는 BF에 대해서 먼저 이해할 필요가 있다. BF(Balance Factor) $ BF(K) = K_{leftHeight} - K_{rightHeight} $, K = Node 수식처럼 노드의 왼쪽 높이와 오른쪽 높이를 비교하는 요소를 BF 라고 한다. 만약 height의 의미가 이해가 안된다면, 트리의 특징에서 height..

회고

2023년 4월 2주차 정리

4월 1주차에 자바의 정석을 다 보기로 했지만, 생각보다 쓰레드, Lambda, Stream에서 많은 시간이 할애되었다. 하지만 Stream의 동작방식에 이어, Optional의 구조와 함수형 인터페이스의 종류를 알고 나니, 어떻게 사용해야할지에 대해서 감이 잡히게 되었고, Stream을 사용하는 방식에 대해서 감이 잡히기 시작했다. 그러나 partitioningBy, groupingBy 는 너무 어려웠다. 어느 상황에 써야 될지는 알겠지만, collectingThen을 사용해서 반환 타입을 달리 바꾸어 collect하는 과정이 눈에 익숙해지진 않았다. Thread 파트에서는 지금 하고 있는 CS 면접 스터디가 많은 도움이 되었다. 아마, 운영체제적으로 Thread가 어떻게 동작하는지에 대해서, 이해하지..

Language/Java

7-7 내부 클래스 (재업로드), 익명 클래스

내부 클래스 내부 클래스는 이름 그대로 클래스 안의 클래스이고, 말 그대로 클래스 안에 클래스를 선언하는 것과 같다. 우리는 지금까지 클래스끼리는 격리 시켜서 생성했는데 내부에도 클래스를 생성할 수 있다는 것이다. 다음과 같이 말이다. // 기존의 방식 class A { } class B { } ============= class AA { class BB { } } 위처럼 구성이 되어있을 때 BB를 AA 클래스의 내부 클래스, AA를 BB 클래스의 외부 클래스라고 부른다. 그럼 위와 같은 내부 클래스를 사용하는 이유는 무엇일까? 결론부터 얘기하자면, 캡슐화 및 코드의 복잡성을 줄이는 것이다. 예를 들어서 BB라는 클래스는 AA의 클래스만 사용을 한다고 가정하자. 그럼 BB 클래스는 AA 클래스의 객체를 ..

Language/Java

12. Generic 제너릭

Generic JDK1.5 부터 도입된 제너릭스는 다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주어 타입 안정성을 높이고 형변환의 번거로움을 줄여줄 수 있는 최근에는 꼭 사용해야 할 기능이다. 이제는 공식문서를 볼 때 제너릭스를 알지 못하면 공식문서 분석도 버거울 정도이다. 실제로도 이러한 문제를 몸소 겪어서, 이번에 제너릭스에 대해 한 번 자세히 들여다보았습니다. 제너릭스는 다음과 같이 선언이 가능하다. class Box { T item; void setItem(T item) { this.item = item; } } 기존의 보던 클래스와 다른 점을 살펴보면 제너릭 타입변수 T가 생긴 것을 볼 수 있다. 여기서 한 가지 의문을 가질 수 있는 경우는 T의 의미인데 f(x..

Bombo_
'분류 전체보기' 카테고리의 글 목록 (11 Page)