1. 문제 제기 (Introduction & Problem Statement)관찰 현상 또는 질문:자바에서 객체를 문자열로 변환할 때 String.valueOf(), Object.toString(), "" + object 등 다양한 방법이 존재합니다. 개발을 하다 보면 무심코 이 방법들을 혼용하게 되는데, "과연 이들 사이에 어떤 차이가 있으며, 어떤 상황에서 무엇을 사용하는 것이 가장 적절한가?"라는 의문이 생겼습니다. 특히 null 값을 다룰 때 각 방식의 동작이 달라 예기치 않은 버그를 유발할 수 있습니다.탐구 목표:본 아티클에서는 각 문자열 변환 방식의 내부 동작 원리, 특히 NullPointerException (NPE) 발생 가능성과 성능상의 미묘한 차이를 비교 분석하고자 합니다. 이를 통해 ..
🚀 이 주제를 선택한 이유 & 학습 목표선택 배경: 자바 컬렉션 프레임워크를 사용하면서 List, Map과 같이 타입을 지정하는 문법을 당연하게 사용해왔습니다. 하지만 제네릭이 내부적으로 어떻게 동작하는지, 왜 필요한지에 대한 깊이 있는 이해가 부족하다고 느껴졌습니다. 특히 면접에서 타입 소거(Type Erasure)나 와일드카드(Wildcard)에 대한 질문을 받을 경우 명확하게 설명하기 위해 이번 기회에 제대로 정리하고 싶었습니다.학습 목표:제네릭의 필요성과 장점을 명확히 설명할 수 있게 됩니다.타입 소거(Type Erasure)의 개념과 그로 인해 발생하는 제약을 이해합니다.제네릭 와일드카드(Wildcards)의 종류(? extends T, ? super T)를 이해하고, PECS 원칙을 설명할 ..
🚀 이 주제를 선택한 이유 & 학습 목표선택 배경: NCS 직무 기술서나 채용 공고에서 '애자일', '스크럼'과 같은 개발 방법론에 대한 이해를 요구하는 경우가 많았습니다. 정보처리기사 필기시험을 준비하며 학습했던 다양한 소프트웨어 생명 주기 모델들을 다시 복습하여, 각 방법론의 특징과 차이점을 명확히 정리하고 실제 개발 프로세스에 대한 이해를 높이고자 합니다.학습 목표: 전통적인 폭포수 모델부터 현대적인 애자일 모델까지 각 개발 방법론의 핵심 개념과 장단점을 설명할 수 있게 됩니다. 특히 애자일 방법론의 대표적인 예시인 XP(eXtreme Programming)의 핵심 가치와 실천사항을 이해하고, 다른 모델과 비교하여 언제 어떤 모델이 적합한지 판단하는 기준을 정립합니다.📚 핵심 개념 및 원리소프트..
🚀 이 주제를 선택한 이유 & 학습 목표선택 배경: 객체 지향 프로그래밍의 핵심인 캡슐화를 공부하던 중, private 키워드와 함께 사용되는 static, final의 미묘한 차이가 혼란스러웠습니다. 특히 '어차피 불변인데 공유와 개별의 차이가 무엇인가?'라는 의문을 해결하고, 각 키워드의 역할을 명확히 이해하여 올바른 객체 설계를 하고 싶었습니다.학습 목표:private, static, final 각각의 핵심 역할을 자신의 언어로 설명할 수 있다.이 키워드들의 조합(private static, private final, private static final)이 필드의 '성격'을 어떻게 규정하는지 설명할 수 있다.'개별적인 불변 값(final)'과 '공유되는 불변 값(static final)'의 차이..
🚀 이 주제를 선택한 이유 & 학습 목표선택 배경: SICP 2.3.4절을 학습하며 데이터의 통계적 특성을 이용해 최적의 자료구조(트리)를 동적으로 생성하는 과정에 깊은 인상을 받았습니다. 단순한 이론을 넘어 실제 데이터 압축 기술의 근간을 이루는 이 알고리즘을 CS 학습 템플릿에 맞추어 제대로 소화하고 싶었습니다.학습 목표:고정 길이 부호화의 한계와 가변 길이 부호화의 필요성을 설명할 수 있다.'접두부호(Prefix Code)'가 왜 필요한지, 그리고 허프만 트리가 어떻게 이 규칙을 보장하는지 이해한다.탐욕 알고리즘(Greedy Algorithm)을 기반으로 허프만 트리를 구축하는 과정을 단계별로 설명할 수 있다.생성된 트리를 이용해 메시지를 인코딩(부호화)하고 디코딩(복호화)하는 원리를 설명할 수 ..
🚀 이 주제를 선택한 이유 & 학습 목표선택 배경:이전 글에서 분할 정복 기반의 병합 정렬과 퀵 정렬을 학습하며, 두 알고리즘이 가진 명확한 트레이드오프를 확인했습니다. 병합 정렬은 항상 O(n log n) 성능을 보장하지만 O(n)의 추가 공간이 필요했고, 퀵 정렬은 O(log n)의 공간만 사용하지만 최악의 경우 O(n²)의 성능 저하 위험이 있었습니다. 이에 "메모리도 적게 쓰면서, 최악의 경우에도 O(n log n)을 보장하는 정렬은 없을까?"라는 질문에 대한 답을 찾기 위해 힙 정렬을 학습합니다.학습 목표:'힙(Heap)' 자료구조의 정의(완전 이진 트리, 힙 속성)를 이해하고, 배열로 힙을 표현하는 원리를 설명할 수 있습니다.힙 정렬의 두 가지 핵심 단계인 '힙 구성(Build-Heap)'과..