목록java (29)
ki-sd 님의 블로그
자바에서 가장 많이 사용되는 참조형 타입인 String 클래스의 내부 API와, 데이터의 안전성을 보장하는 핵심 개념인 '불변성'에 대해 학습했다. 1. 불변 객체(Immutable Object)로서의 StringString 타입으로 생성된 문자열 객체는 한 번 힙(Heap) 메모리에 할당되면 그 값을 절대 변경할 수 없다.만약 "Hello" + " World"처럼 문자열을 이어 붙이거나 수정하는 연산을 수행하면, 기존의 "Hello" 객체가 수정되는 것이 아니라 새로운 메모리 주소에 "Hello World"라는 완전히 새로운 객체가 생성된다. 기존 객체는 참조를 잃고 쓰레기 값(Garbage)이 된다.2. 메모리 효율과 설계의 고민이러한 불변성은 멀티 쓰레드 환경에서 데이터 동기화 문제 없이 안전하게 ..
자바의 진정한 이해는 메모리 구조를 파악하는 것에서 시작된다. JVM(Java Virtual Machine)의 메모리 영역 중에서도 특히 클래스 멤버와 인스턴스 멤버의 차이를 가르는 static 키워드의 본질을 깊이 파고들었다. 1. JVM 메모리 구조의 3대 영역메서드 영역(Method Area / Class Area): 프로그램이 실행될 때 클래스 파일이 메모리에 로드되면서 그 구조(필드, 메서드 정보 등)와 static 변수가 저장되는 공간이다. 프로그램이 시작될 때부터 종료될 때까지 메모리에 상주한다.힙 영역(Heap Area): new 키워드를 통해 동적으로 생성되는 객체(인스턴스)와 배열이 저장되는 공간이다. 더 이상 참조되지 않는 데이터는 가비지 컬렉터(Garbage Collector)에 의..
단순한 데이터 보관을 넘어, 2차원 이상의 다차원 배열을 활용하여 실제 애플리케이션의 뼈대가 되는 데이터 구조화 작업을 수행했다. 1. 다차원 배열의 물리적 구조2차원 배열(int[][] arr)은 개념적으로 행(Row)과 열(Column)로 이루어진 표(Table) 형태를 띤다.하지만 실제 자바 메모리상에서는 "배열을 저장하는 배열"로 구현된다는 점을 명확히 했다. 즉, 바깥쪽 배열의 각 요소가 또 다른 안쪽 배열들의 힙 메모리 주소값을 가리키는 중첩된 참조 구조를 가지고 있다. 이로 인해 각 행마다 열의 길이가 다른 가변 배열(Ragged Array)도 생성할 수 있다는 유연함을 배웠다.2. 실전 응용 1: 달력 시스템(Calendar) 로직1월부터 12월까지의 각 달이 가진 일수(31일, 28일 등..
수많은 데이터를 하나의 변수명으로 그룹화하여 관리하는 가장 기본적인 자료구조인 배열의 원리를 파헤쳤다. 1. 배열의 메모리 할당(Memory Allocation) 메커니즘자바에서 배열은 기본형 변수처럼 스택(Stack) 영역에 값을 통째로 저장하지 않는다.int[] arr = new int[5];를 선언하면, arr라는 참조 변수는 스택에 생성되지만 실제 5개의 정수가 들어갈 공간은 힙(Heap) 영역에 연속적인 블록 형태로 크게 할당된다. 그리고 스택의 arr 변수는 이 힙 메모리의 시작 **주소값(Reference)**을 저장하게 된다.메모리 공간이 연속적이기 때문에 데이터를 탐색하고 읽어오는 속도가 매우 빠르다는 구조적 장점을 이해했다.2. 고정 길이(Fixed-length)의 특성배열은 한 번 크..
반복문 내부에 또 다른 반복문이 존재하는 다중 루프 구조를 통해, 1차원적인 흐름을 넘어선 다차원 데이터 처리 방식을 익혔다. 1. 중첩 루프(Nested Loop)의 논리적 구조바깥쪽 루프(Outer Loop)의 인덱스가 1회전할 때, 안쪽 루프(Inner Loop)는 자신이 가진 조건의 전체 회차를 전부 순회한다.시각화 훈련: 시계의 시침(Outer)과 분침(Inner)의 관계로 이해했다. 구구단 출력(2단부터 9단까지, 각 단마다 1~9를 곱함)이나 별 찍기 실습을 통해 두 개의 변수(i, j)가 교차하며 만들어내는 매트릭스(Matrix) 형태의 데이터 출력을 완벽히 제어했다.2. 디버깅과 트레이싱(Tracing)머릿속으로만 계산하기 복잡한 다중 루프 로직을 검증하기 위해 변수의 변화 과정을 추적하..
1. for문 (횟수가 명확한 반복 체계)구조: for (초기화; 조건식; 증감식) { 실행문 }특징: 반복을 제어하는 인덱스 변수의 시작과 끝이 한 줄에 명시되어 있어 흐름을 파악하기 매우 용이하다. 배열이나 컬렉션처럼 크기가 정해진 데이터를 순차적으로 탐색할 때 가장 직관적인 구조다.내부 동작: 초기화는 단 한 번만 실행되며, 이후 조건식 검사 -> 실행문 -> 증감식의 사이클이 조건식이 false가 될 때까지 순환한다.2. while문 (조건 기반의 유동적 반복)구조: while (조건식) { 실행문 }특징: 반복 횟수가 예측 불가능하거나, 특정 상태가 변경될 때까지 무한히 대기해야 하는 경우(예: 사용자 입력 대기, 네트워크 연결 유지, 파일 끝 도달 확인 등)에 주로 사용된다.do-while문과..
