목록전체 글 (74)
나의개발일지
📌 PrintPrimes오늘은 클린코드 책에서 나온 재미있는 예제를 분석해 볼 예정이다. PrintPrimes 라는 Literate Programming에 나오는 예제를 자바 버전으로 변경한 예제이다. 먼저 코드롤 살펴보자.package literatePrimes;public class PrintPrimes { public static void main(String[] args) { final int M = 1000; final int RR = 50; final int CC = 4; final int WW = 10; final int ORDMAX = 30; int P[] = new int[M + 1]; int ..
📌 String, StringBuilder, StringBuilderJava를 공부하다 보면 문자열을 다루는 세 가지 대표 클래스인 String, StringBuffer, StringBuilder를 만나게 됩니다. 이들은 모두 문자열을 다루지만 내부 동작 방식, 성능, 쓰레드 안정성에서 차이를 보입니다. 오늘은 이 세 가지의 차이점과 언제 어떤 것을 사용해야 하는지 정리해보겠습니다. String은 따로 이전 포스트에 정리해놓았습니다.2025.05.14 - [기본기를 다지자/자료구조] - [java] StringString, StringBuffer, StringBuilder 비교 한눈에 보기특징StringStringBufferStringBuilder변경 가능 여부불변 (Immutable)가변 (Mutab..
📌 StringString은 우리가 코딩을 하다보면 자주 접하는 문자열을 표현하는 클래스이다. 자바 공식문서를 한번 확인 해 보자 해석 및 요약을 해보자면 String은 Java에서 가장 자주 사용되는 클래스 중 하나입니다.불변성, 다양한 문자열 처리 기능, 유니코드 지원 등으로 인해 안정적이고 강력한 문자열 처리를 제공합니다.성능이 중요한 경우 StringBuilder나 StringBuffer 사용을 고려할 수 있습니다. 그렇다면 이러한 String은 어디에서 사용될까? Http 요청/응답 처리데이터베이스와의 연동로그인 및 인증URL, 경로, 라우팅 처리입력값 검증 및 필터링로깅, 에러 메시지 출력 String은 개발을 진행시 매우 중요한 역할을 해주고 있다. 그러면 String도 클래스기 때문에 생..
📌 Set이란?오늘은 Set에 대해서 알아보자 일단 자바 DOC 를 보자 Set는 중복을 허용하지 않는 컬렉션 이다수학적 집합(Set) 개념을 모델링 한것 원칙e1.equals(e2)를 만족하는 두 요소(e1, e2)를 동시에 가질 수 없다.최대 하나의 null 요소만 허용한다. 주의 사항Set에 변경 가능한 객체(mutable object)를 요소로 사용할 때는 조심해야 한다.Set에 들어간 객체의 값이 변경되어 equals() 결과가 바뀌면, Set의 정상 동작이 보장되지 않는다.예외적으로 Set 자신(Set 객체 본인) 을 자신의 요소로 추가하는 것도 금지된다. 📌 HashSetHashSet은 Set 인터페이스를 구현한 클래스이다 내부적으로 HashMap 인스턴스를 이용해 데이터를 저장한다중복을..
📌 Red-Black 삭제요번 포스팅에서는 레드-블랙 트리의 삭제에 대해 알아보자. 이전 포스트에서도 말했듯이 레드-블랙 트리는 이진 탐색 트리 중에서 균형을 보장하는 대표적인 자료구조이다. 삭제하기전 알아야 할 개념- Extra Black삭제시 필요한 개념으로 노드에 임시로 부여 할 수 있다. - Doubly BlackBlack 노드에 Extra Black이 붙은 경우이다. - Red-and-BlackRed 노드에 Extra Black이 붙은 경우이다. - Successor오른쪽 서브트리에서 가장 작은 값 ❗ 레드-블랙 트리에서 삭제 대상 노드가 자식 들을 가질 경우, 실제로 삭제되는 노드는 successor이다 레드-블랙 트리 삭제의 흐름삭제할 노드를 찾는다.자식이 둘이면 successor와 교체..
📌 Red-Black 트리란?레드-블랙 트리는 이진 탐색 트리의 한 종류 이며 일반적인 BST의 worst case(한쪽으로 편향)의 단점을 개선한 트리이다.레드-블랙 트리는 스스로 균형을 잡으며 모든 노드는 red 혹은 black이다. 레드 블랙 트리의 속성모든 노드는 red 혹은 black루트 노드는 black모든 nil 노드는 blackred의 자녀들은 black -> red가 연속적으로 존재할 수 없다.임의의 노드에서 자손 nil 노드 까지 가는 경로들의 black수는 같다 (자기 자신 제외) nil 노드존재하지 않음을 의미하는 노드이고 레드 블랙 트리에서 leaf 노드를 nil노드로 표기한다. 시간복잡도이진 탐색트리와 레드 블랙 트리의 시간 복잡도를 보면 레드 블랙 트리는 최악의 경우 O(..
📌 TreeMap?음.. Map을 공부하다 보니 TreeMap이란 것을 알게되었다. Tree랑 Map이 합쳐지다니 벌써부터 어떤 자료 구조인지 궁금하다. 알아보러 가자 역시 먼저 자바 DOC에서 TreeMap에 대한 설명을 확인해 보자Treemap은 레드-블랙 트리를 기반으로 한 NavigableMap 구현체이다. 이 맵은 키의 자연 순서대로, 또는 맵 생성시 제공된 Comparator에 따라 정렬된다.이 구현체는 containsKey, get, put, remove 연산에 대해 log(n) 시간 복잡도를 보장한다.compareTo와 equals의 일관성을 유지해야한다. ( 두개의 키가 compareTo에 의해 같다고 판정되면, TreeMap 입장에서 이 두 키는 같다고 간주된다. 여기서 레드-블랙 트..
📌 HashMap이란?오늘도 역시 HashMap에 대한 자바 공식문서를 보자 해석 및 요약을 해보자면HashMap은 키-값 쌍을 저장하기 위해 해시 테이블을 사용하는 자료구조입니다. HashMap은 Map 인터페이스의 모든 선택적 메서드를 제공하며, null 값을 허용합니다(null 키도 허용). HashMap은 동기화되지 않으며, Hashtable과 달리 null을 허용하는 차이점이 있습니다. 순서를 보장하지 않는 Map인것 같다. 이름 부터 HashMap이니 당연하게도 hash가 사용된다 hash에 대한 설명은 이전 포스트를 확인 바란다. 2025.03.05 - [기본기를 다지자/자료구조] - [java] Hash ✏️ 생성자HashMap()기본 생성자로, 초기용량 16과 기본 로드 팩터 0.75..
📌 Hash?해시란 주어진 키를 숫자로 변환하는 값이다. 이 숫자는 HashMap 내부 배열의 인덱스를 결정하는데 사용된다. 간단한 해시함수의 예시이다. 예시에서는 나머지를 이용하여 해시 테이블에서 인덱스로 활용하고 있다. 하지만 이러한 해시 함수에서는 필연적으로 충돌이 발생 할 수 있다. 아래의 예시를 확인해보자 값2의 키값이 만약 22라면 해시함수를 지나면 2가 된다. 하지만 이미 값1이 해시함수를 지나 나온 해시 코드가 2임으로 충돌이 발생한다. Java에서는 어떠한 알고리즘으로 해시 충돌을 피하고, 해시 함수를 정의 하는지 궁금하다. 알아보자Java의 HashMap에서는 Object 클래스의 hashCode() 메서드를 사용해 키의 해시코드를 생성한다. 코드를 확인해 보자 Object의 해시코드..
📌 Map이란?Map이란 키-값을 저장하는 자료 구조 이다. 각 키는 중복될 수 없으며, 각 키는 하나의 값에만 매핑된다. 즉 하나의 키는 하나의 값과 연결되며, 동일한 키를 다시 추가하면 기존 값이 덮어쓰여 진다.Map의 구현체로는 HashMap, TreeMap, LinkedHashMap 등이 있다. 자바 공식문서를 확인해 보자 자바 Doc를 요약해보자면 Map은 키-값 쌍을 저장하며, 중복된 키를 허용하지 않는다.세 가지 컬렉션 뷰(키, 값, 키-값 쌍)를 제공한다.키로는 변경 가능한 객체를 사용하는 것이 위험할 수 있다.표준 생성자로는 인자가 없는 생성자와 다른 맵을 복사하는 생성자가 있다.적절하지 않은 키나 값을 삽입 시 예외가 발생할 수 있다.일부 메서드는 equals 메서드를 기반으로 동작하..