목록전체 글 (117)
변수의 기록
코딩 테스트, 이제 나의 기록을 시작하며이직을 준비하면서, CS 공부를 정리하는 블로그를 꾸준히 써왔다.그 과정에서 문득 이런 생각이 들었다.단순히 지식을 쌓는 것만큼이나,나의 사고 과정을 돌아보고 기록하는 일도매우 소중하다는 것.그래서 코딩 테스트 문제들도단순히 "정답을 맞혔다"는 결과에만 집중하지 않고왜 이 방식은 더 나았는지,다른 방법은 왜 채택하지 않았는지스스로 되묻고 돌아보는작은 회고록처럼 정리해보려고 한다.이 시작이 어쩌면 초라해 보일 수도 있다.시작한 지 며칠 되지 않았고,이미 훌륭한 전공자들과 뛰어난 개발자들이 많다는 사실에잠시 주춤하기도 했다.하지만 좌절하지 않을 것이다.나는 머리가 뛰어난 사람은 아닐지 몰라도성실함과 통찰력이라는 나만의 강점을 믿는다.그리고 그 믿음을 바탕으로천천히, 그..

1. Set이란 무엇인가? (ADT 관점)Set은 데이터를 저장하는 추상 자료형(ADT) 중 하나입니다.특징적으로 다음과 같은 성질을 가집니다:중복을 허용하지 않는다요소의 순서를 보장하지 않는다데이터의 존재 유무를 빠르게 확인할 수 있다이러한 동작을 제공하는 구조만 정의된 것이 Set이라는 ADT이고,Java에서는 Set 인터페이스와 이를 구현하는 다양한 클래스(HashSet, LinkedHashSet, TreeSet)를 통해 이 ADT를 실현합니다.2. Set의 사용 목적 및 언제 사용하는가✅ Set이 유리한 상황중복 제거가 필요한 경우→ 예: 사용자 입력값 정제, 태그 중복 제거 등순서가 중요하지 않은 데이터 집합→ 예: 허용된 IP 주소 목록, 이미 방문한 노드 기록 등특정 데이터가 존재하는지 여부..

1. Map의 개념핵심 특징Key - Value 쌍으로 구성Key는 중복 불가, Value는 중복 가능Key를 기준으로 빠르게 검색 및 저장 가능Java에서는 Map 인터페이스를 통해 이 ADT를 정의하고, 여러 구현체를 제공합니다.2. Map의 주요 구현체구현체특징HashMap내부적으로 Hash Table 구조 사용. 평균 O(1) 접근TreeMap내부적으로 Red-Black Tree 기반. O(log n) 접근LinkedHashMap해시 구조 + 삽입 순서 유지이 글에서는 가장 널리 사용되는 HashMap을 기준으로 설명합니다.3. Hash Table 기반 Map 구조HashMap은 내부적으로 다음 구조를 가집니다:📌 구성 요소배열: 일정 크기의 버킷 공간 (예: 8, 16 등)Hash 함수: Ke..

Java에서는 데이터를 저장할 때 다양한 형태의 배열 구조를 사용할 수 있습니다.세 가지 대표적인 구조인 기본 배열(Array), 동적 배열(Dynamic Array), 연관 배열(Associative Array)의 개념과 내부 동작 원리를 설명하겠습니다.1. 배열 (Array)배열은 같은 타입의 데이터를 일정한 순서로 나열하여 저장하는 자료구조입니다. Java에서 배열은 다음과 같은 특성을 가집니다:📌 특징동일한 데이터 타입만 저장 가능→ 예: int[], String[] 등고정 크기→ 생성 시 크기를 지정하면 이후 변경 불가연속된 메모리 공간에 저장→ 메모리의 주소가 연속적으로 할당되어 있음인덱스를 통한 접근→ 0부터 시작하는 정수 인덱스를 사용하여 요소 접근 int[] nums = new int[..
먼저 이 글을 쓰게 된 시작 점은 treeMap을 굳이 왜 써야할까? 어떤 상황에서 사용하면 이점이 클까? 그리고 어떤 구조로 관리가 될까? DB에서 원하는 정렬된 값을 받아와 hashmap에 담으면 되는데? 라는 아주 얇팍한 지식으로 시작됐다....정리 시작해 보겠습니다. Java Map 컬렉션 정리 – HashMap, LinkedHashMap, TreeMap1. Map 컬렉션이란?Map은 키(key)와 값(value)의 쌍으로 데이터를 저장하는 자료구조다.중복된 키는 허용하지 않으며, 각 키는 하나의 값만 가질 수 있다.Java에서 대표적인 Map 구현체는 아래 3가지다.HashMap: 기본 해시 기반 MapLinkedHashMap: 순서 보장 + 해시 기반 MapTreeMap: 정렬 기반 Map2...

📌 비동기(Asynchronous) 프로그래밍과 운영체제 관점의 이해 1. 비동기(Asynchronous)의 기본 개념비동기(Asynchronous)란 작업의 수행 순서가 반드시 직렬적일 필요가 없는 처리 방식이다. 요청을 보낸 후 그 결과가 도착할 때까지 대기하지 않고, 다른 작업을 수행하거나 나중에 콜백/이벤트로 결과를 받아 처리한다.즉, 비동기 프로그래밍은 독립적이다. 한 작업의 결과를 기다리지 않아도 다른 작업을 병렬로 진행할 수 있다.2. 비동기의 다양한 쓰레드 모델 예시아래는 비동기 프로그램이 어떻게 다양한 쓰레드 모델로 구현될 수 있는지를 설명한 사례다.(1) 쓰레드 1개에 1작업 (기본 싱글 스레드 모델)구조: 하나의 쓰레드가 하나의 작업을 수행대표 사례: JavaScript, Node...

회사 프로젝트에서 기존 이클립스 쓰다가 IntelliJ로 툴 변경함.환경 설정하면서 JSP 화면 반영이 안 되는 문제가 생김.🔍 문제 상황이클립스에선 JSP 수정하면 바로 반영됐음IntelliJ에선 서버는 잘 뜨는데 JSP 변경이 적용 안 됨심지어 jsp 파일이 호출은 되는데, 수정 내용이 안 보이는 상태였음처음엔 캐시 문제인가 싶어서 서버 재시작도 해보고, clean도 해봤지만 소용없었음🧩 원인Run > Edit Configurations... 들어가보니Environment 항목 아래 Working directory가 비어 있었음* 만약 Working directory 필드가 안보인다면 -> Modify options -> Working directory 체크 하면 필드 표시 됨.!!!!!!!..

Block I/O vs Non-block I/O (소켓 I/O 기반 설명)1. I/O란?I/O(Input/Output)는 데이터의 입출력을 의미합니다. 일반적으로 아래와 같은 형태가 있습니다:네트워크 I/O (소켓): 네트워크 통신은 소켓을 통해 데이터를 송수신합니다.파일 I/O: 디스크에서 파일을 읽거나 쓰는 작업.파이프 I/O: 프로세스 간 통신.디바이스 I/O: 키보드 입력, 화면 출력 등 하드웨어 장치와의 데이터 송수신.소켓 I/O는 네트워크 프로그램에서 가장 핵심적인 요소이며, 클라이언트-서버 간 통신에 사용됩니다.2. Block I/O vs Non-block I/O🔸 Block I/O (Blocking I/O)I/O 요청을 하면 작업이 완료될 때까지 쓰레드는 대기(블로킹) 상태가 됩니다.예:..