본문 바로가기
728x90

Language167

[JAVA] 외부 라이브러리 없이 JSON/XML 파싱하기 : 표준 API의 숨겨진 힘 자바(Java) 프로젝트를 진행하다 보면 Jackson이나 GSON 같은 외부 라이브러리를 사용하는 것이 당연하게 느껴지곤 합니다. 하지만 보안상의 이유로 외부 라이브러리 반입이 제한된 환경이거나, 아주 가벼운 마이크로서비스를 구축해야 한다면 어떨까요? "순수 자바(Pure Java)만으로 데이터 파싱이 가능한가?"라는 질문에 대한 답은 "YES"입니다. 심지어 XML의 경우 자바 표준 스펙 내에 강력한 도구가 이미 포함되어 있습니다.1. XML 파싱: 자바 표준의 강력한 기본기 (JAXP)XML은 자바의 역사와 궤를 같이해왔습니다. 자바는 JAXP(Java API for XML Processing)를 통해 외부 라이브러리 없이도 DOM, SAX, StAX 세 가지 방식의 파싱을 완벽하게 지원합니다. 별.. 2026. 1. 20.
[JAVA] PrintStream vs PrintWriter : 당신의 출력 코드가 전문적인지 확인하는 법 자바 개발자라면 System.out.println()을 수만 번은 사용해 보셨을 겁니다. 하지만 정작 System.out이 어떤 클래스인지, 그리고 실무 파일 출력이나 네트워크 통신에서 왜 PrintStream 대신 PrintWriter를 권장하는지 명확히 답할 수 있는 개발자는 의외로 많지 않습니다. 오늘은 출력 스트림의 양대 산맥인 두 클래스를 완벽히 해부해 보겠습니다.1. 뿌리부터 다른 설계: Byte vs Character가장 근본적인 차이는 데이터를 다루는 단위에 있습니다. 자바의 I/O 시스템은 크게 바이트 기반 스트림(InputStream/OutputStream)과 문자 기반 스트림(Reader/Writer)으로 나뉩니다.PrintStream: 바이트 출력 스트림(OutputStream)의 .. 2026. 1. 20.
[JAVA] Scanner vs BufferedReader : 성능과 효율을 결정짓는 입력 방식의 모든 것 자바(Java)를 처음 접하면 가장 먼저 배우는 것 중 하나가 콘솔 입력입니다. 이때 우리는 보통 Scanner를 사용하곤 합니다. 하지만 알고리즘 문제를 풀거나 대용량 데이터를 처리하는 현업 프로젝트에 투입되면 "왜 BufferedReader를 써야 하는가?"라는 질문을 마주하게 됩니다. 단순히 '빠르다'는 이유를 넘어, 두 클래스가 내부적으로 어떻게 동작하며 어떤 상황에서 진가를 발휘하는지 전문적인 관점에서 심도 있게 분석해 보겠습니다.1. 왜 입력 방식의 선택이 중요한가?컴퓨터 시스템에서 I/O(Input/Output) 작업은 CPU 연산에 비해 압도적으로 느린 작업입니다. 표준 입력(System.in)으로부터 데이터를 읽어올 때, 매번 한 바이트씩 가져오느냐 아니면 한꺼번에 뭉텅이로 가져와 메모리.. 2026. 1. 20.
[JAVA] Java 파일 입출력의 진화: Legacy File 클래스 vs Modern NIO.2 완벽 분석 자바 개발자라면 반드시 알아야 할 데이터 스트림의 흐름, 구식 java.io와 신식 java.nio의 결정적 차이점을 심층 탐구합니다.1. 자바 파일 I/O의 역사적 배경자바 1.0부터 우리와 함께했던 java.io.File 클래스는 오랜 시간 동안 자바 파일 입출력의 대명사였습니다. 하지만 하드웨어의 발전과 대용량 데이터 처리 요구가 늘어남에 따라 기존 IO 방식의 한계가 드러나기 시작했습니다. 이를 극복하기 위해 JDK 1.4에서 NIO(New I/O)가 도입되었고, JDK 1.7에 이르러 NIO.2(JSR 203)를 통해 파일 시스템 접근 방식이 완전히 혁신되었습니다.단순히 "새로운 것이 좋으니까 쓴다"는 접근보다, 어떤 내부 메커니즘의 차이가 성능과 코드 유지보수성에 영향을 주는지 이해하는 것이 .. 2026. 1. 20.
[JAVA] serialVersionUID란 무엇인가요? 직렬화 버전 관리의 핵심 정리 자바 개발을 하다 보면 Serializable 인터페이스를 구현할 때 노란색 경고창과 함께 serialVersionUID를 선언하라는 메시지를 자주 보게 됩니다. 많은 개발자가 이를 단순히 경고를 없애기 위한 '형식적인 절차'로 치부하곤 하지만, 사실 이는 분산 시스템과 객체 영속화(Persistence)에서 데이터의 무결성을 지키는 최후의 보루와 같습니다. 오늘은 이 숫자가 왜 중요한지, 그리고 설정하지 않았을 때 어떤 대참사가 벌어지는지 심도 있게 다루어 보겠습니다.1. serialVersionUID의 본질적인 정의serialVersionUID는 자바의 객체 직렬화(Serialization) 메커니즘에서 사용되는 64비트 해시값입니다. 직렬화된 객체를 다시 읽어들이는 역직렬화(Deserializati.. 2026. 1. 20.
[JAVA] transient 키워드의 용도 : 직렬화에서 제외해야 할 데이터 관리법 자바 개발을 하다 보면 객체의 상태를 유지하기 위해 직렬화(Serialization)를 사용하게 됩니다. 하지만 객체의 모든 필드가 저장되거나 네트워크로 전송되어야 하는 것은 아닙니다. 보안상 민감한 정보이거나, 단순 계산을 통해 얻을 수 있는 휘발성 데이터인 경우 이를 직렬화 대상에서 제외해야 할 필요가 있습니다. 이때 사용하는 마법 같은 키워드가 바로 transient입니다. 오늘 포스팅에서는 이 키워드의 정확한 용도와 실무적인 활용 패턴을 심도 있게 파헤쳐 봅니다.1. transient 키워드란 무엇인가?transient는 사전적으로 '일시적인', '순간적인'이라는 의미를 가집니다. 자바 프로그래밍에서는 "이 필드는 객체의 핵심 상태가 아니므로, 직렬화할 때 무시하라"는 신호를 JVM(Java Vi.. 2026. 1. 20.
728x90