728x90 Language/Java158 [JAVA] finally 블록이 실행되지 않는 예외적인 4가지 시나리오 분석 자바 프로그래밍을 처음 배울 때 우리는 "finally 블록은 예외 발생 여부와 상관없이 무조건 실행된다"고 배웁니다. 하지만 시니어 개발자로 거듭나기 위해서는 이 '무조건'이라는 단어 뒤에 숨겨진 예외 상황들을 정확히 파악하고 있어야 합니다. 시스템의 안정성을 설계할 때 finally에만 의존했다가 자원이 해제되지 않는 치명적인 버그를 마주할 수 있기 때문입니다. 오늘 포스팅에서는 자바 가상 머신(JVM)의 동작 원리를 바탕으로, finally 블록이 실행되지 않는 아주 특별하고 구체적인 사례들을 정리해 보겠습니다.1. finally 블록의 일반적인 메커니즘일반적으로 finally는 리소스 반납(파일 클로즈, DB 연결 종료 등)을 보장하기 위해 사용됩니다. try 블록에서 return이 발생하더라도 .. 2026. 1. 20. [JAVA] 다중 catch 블록 작성 시 주의점 : 예외 상속 계층의 이해 자바 프로그래밍에서 예외 처리(Exception Handling)는 프로그램의 안정성을 결정짓는 핵심적인 요소입니다. 특히 하나의 try 블록에서 여러 개의 예외가 발생할 수 있을 때 사용하는 다중 catch 블록은 매우 유용하지만, 작성 시 반드시 지켜야 할 '상속 관계의 규칙'이 있습니다. 이 규칙을 어길 경우 컴파일 에러가 발생하여 코드 실행조차 불가능해집니다. 오늘 포스팅에서는 자바 개발자가 흔히 실수하기 쉬운 다중 catch 블록의 배치 순서와 상속 계층 구조가 미치는 영향에 대해 심도 있게 다뤄보겠습니다.1. 다중 catch 블록의 기본 개념다중 catch 블록은 하나의 예외 상황이 아닌, 발생 가능한 여러 시나리오를 각각 별도의 방식으로 처리하고자 할 때 사용합니다. 예를 들어, 파일을 읽는.. 2026. 1. 20. [JAVA] 자바 예외 계층 구조 완벽 가이드 : Checked와 Unchecked의 결정적 차이 자바 프로그래밍에서 '예외 처리'는 단순히 에러를 막는 기술이 아닙니다. 이는 프로그램의 신뢰성을 결정짓는 설계의 영역입니다. 자바는 모든 예외와 에러를 객체로 취급하며, 이를 체계적인 계층 구조(Hierarchy)로 관리합니다. 이 구조를 정확히 이해해야만 '언제 예외를 던지고(throw)', '어디서 잡을지(catch)'에 대한 전문적인 판단이 가능해집니다.1. 모든 것의 시작: Throwable 클래스자바 예외 계층의 최상위에는 java.lang.Throwable 클래스가 존재합니다. 모든 예외 객체는 이 클래스를 상속받아야 하며, 크게 Error(에러)와 Exception(예외) 두 갈래로 나뉩니다.Error: 시스템 레벨의 심각한 문제입니다. JVM 자체의 결함이나 리소스 부족(OutOfMemo.. 2026. 1. 20. [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. 이전 1 ··· 7 8 9 10 11 12 13 ··· 27 다음 728x90