본문 바로가기
728x90

전체 글1368

[JAVA SCRIPT] typeof null이 왜 "object"로 나오나요? 30년 된 설계 오류의 비밀 자바스크립트(JavaScript)를 공부하다 보면 누구나 한 번쯤 당혹스러운 순간을 마주합니다. 분명히 비어 있는 값을 의미하는 null을 typeof 연산자로 검사했는데, 결과가 "object"라고 나오기 때문입니다. 객체가 아닌데 객체라고 주장하는 이 현상은 단순한 실수가 아니라, 자바스크립트의 탄생 비화와 깊은 연관이 있습니다. 오늘은 이 '역사적 유산'이 왜 발생했는지, 그리고 현대 개발 환경에서는 이를 어떻게 다뤄야 하는지 심층 분석해 보겠습니다.1. 1995년, 10일의 기적이 남긴 흔적자바스크립트의 창시자 브렌던 아이크(Brendan Eich)는 단 10일 만에 이 언어의 초안을 설계했습니다. 급박한 일정 속에서 데이터 타입을 메모리에 저장하는 방식이 결정되었는데, 이것이 30년이 지난 지금.. 2026. 1. 27.
[JAVA] Generic의 Type Erasure란 무엇인가? 컴파일 타임의 마법과 런타임의 진실 자바 5(Java 5)에서 제네릭(Generic)이 도입되었을 때, 이는 혁명적인 변화였습니다. 코드의 재사용성을 높이고 컴파일 시점에 강력한 타입 체크를 가능하게 했기 때문입니다. 하지만 많은 자바 개발자가 간과하는 사실이 하나 있습니다. 우리가 코드에 정성껏 작성한 나 같은 타입 정보가 컴파일이 끝난 뒤에는 바이트코드에서 흔적도 없이 사라진다는 점입니다. 오늘은 이 현상인 Type Erasure(타입 소거)의 본질과 자바가 왜 이런 방식을 택했는지, 그리고 이로 인해 발생하는 제약 사항들을 심층적으로 파헤쳐 보겠습니다.1. Type Erasure(타입 소거)란 무엇인가?Type Erasure는 자바 컴파일러가 제네릭 타입을 처리하는 방식입니다. 컴파일러는 컴파일 시점에만 제네릭 타입 정보를 사용하여.. 2026. 1. 26.
[JAVA] Checked Exception과 Unchecked Exception의 전략적 선택 기준 자바 프로그래밍에서 예외 처리(Exception Handling)는 단순히 에러를 막는 수단이 아닙니다. 이는 시스템의 복구 가능성(Recoverability)과 코드의 가독성, 그리고 API의 설계 철학을 결정짓는 핵심적인 요소입니다. 많은 개발자들이 Checked Exception과 Unchecked Exception의 기술적 차이는 알고 있지만, "언제 무엇을 사용해야 하는가?"라는 설계적 고민 앞에서는 흔들리곤 합니다. 본 포스팅에서는 실무적인 관점에서 두 예외의 본질을 파헤치고, 최신 자바 트렌드에 맞는 전략적 선택 기준을 제시합니다.1. 예외의 계층 구조와 본질적 차이자바의 모든 예외는 java.lang.Throwable 클래스를 상속받습니다. 여기서 핵심은 RuntimeException의 상.. 2026. 1. 26.
[JAVA] Try-with-resources의 동작 원리와 AutoCloseable 인터페이스 : 완벽한 자원 해제 가이드 자바 프로그래밍에서 데이터베이스 연결, 파일 입출력, 네트워크 소켓과 같은 외부 자원(External Resources)을 다룰 때 가장 빈번하게 발생하는 실수가 바로 자원 해제 누락입니다. 이는 곧 시스템의 메모리 누수(Memory Leak)와 성능 저하로 직결됩니다. 과거 finally 블록을 이용한 수동 해제 방식의 한계를 극복하기 위해 도입된 Try-with-resources 문법과 그 핵심인 AutoCloseable 인터페이스에 대해 심층적으로 분석해 보겠습니다.1. 기존 방식의 한계: 왜 Try-with-resources인가?자바 7 이전에는 자원을 반납하기 위해 finally 블록에서 close() 메서드를 호출해야 했습니다. 하지만 이 방식은 다음과 같은 치명적인 단점이 있었습니다. 코드.. 2026. 1. 26.
[JAVA] HashCode와 Equals를 함께 재정의 해야 하는 이유는? (전략적 가이드) 자바 개발을 하다 보면 클래스를 설계할 때 equals()와 hashCode()를 재정의(Override)해야 한다는 이야기를 귀가 따갑게 듣습니다. 하지만 "왜 굳이 둘을 세트로 처리해야 하는가?"에 대해 명확한 논리를 가진 개발자는 의외로 많지 않습니다. 본 포스팅에서는 단순히 이론적인 설명을 넘어, 이 규칙을 어겼을 때 발생하는 실무적인 결함과 자바 콜렉션 프레임워크의 동작 원리를 심층적으로 분석합니다.1. Equals와 HashCode의 역할 정의자바의 모든 객체는 Object 클래스를 상속받으며, 기본적으로 두 메서드를 가지고 있습니다.equals(): 두 객체의 '논리적 동등성(Logical Equality)'을 비교합니다. 기본값은 주소값 비교(==)입니다.hashCode(): 객체를 식별하.. 2026. 1. 26.
[JAVA] JVM의 내부 구조 완벽 해부 : 메모리 관리의 핵심 원리 자바 프로그래머라면 코드가 '어디서' 실행되는지 이해하는 것이 매우 중요합니다. 우리가 작성한 자바 코드는 운영체제 위에서 직접 실행되는 것이 아니라, JVM(Java Virtual Machine, 자바 가상 머신)이라는 중개자를 통해 실행됩니다. 이 구조 덕분에 자바는 'Write Once, Run Anywhere'라는 철학을 실현할 수 있었습니다. 이번 글에서는 JVM의 전체 구조와 핵심 메모리 영역인 Runtime Data Areas의 각 역할을 깊이 있게 살펴보겠습니다.1. JVM의 전체 아키텍처 구조JVM은 단순히 코드를 해석하는 엔진을 넘어, 메모리 관리와 실행 최적화를 담당하는 복합적인 시스템입니다. 전체 구조는 크게 세 가지 서브시스템으로 나뉩니다.Class Loader System: 컴파.. 2026. 1. 25.
728x90