결론부터 말하면, 네, 가능합니다. 상위 클래스의 메서드가 특정 예외를 던지도록 선언되어 있더라도, 이를 오버라이드(재정의)하는 하위 클래스의 메서드는 아무런 예외도 던지지 않도록 구현할 수 있습니다.오버라이딩과 예외 규칙Java에서 메서드 오버라이딩 시 예외 처리에는 다음과 같은 규칙이 적용됩니다.하위 클래스에서 던질 수 있는 확인된 예외(Checked Exception)는 상위 클래스 메서드가 선언한 예외와 같거나 그 하위 타입이어야 합니다.반대로, 상위 클래스 메서드가 예외를 던진다고 해서 하위 클래스 메서드도 반드시 예외를
결합도(Coupling)는 한 객체가 다른 객체에 얼마나 의존하고 있는지를 나타내는 개념입니다. 두 객체가 서로 완전히 독립적이라면, 한쪽에서 발생한 변경이 다른 쪽에 영향을 주지 않습니다. 이처럼 객체 간의 의존성이 낮은 상태를 느슨한 결합(Loose Coupling)이라고 부릅니다. 반대로 한 객체의 변경이 다른 객체에 직접적인 영향을 미치는 경우에는 긴밀한 결합(Tight Coupling)이라 하며, 이는 코드 유지보수성과 확장성을 떨어뜨리는 요인이 됩니다. 자바에서 느슨한 결합을 구현하는 방법 자바에서는 인터페이스(Inter
자바(Java)에서 인터페이스(interface)는 클래스와 비슷하지만, 추상 메서드와 static이며 final인 필드만 가질 수 있다는 점이 다릅니다. 그리고 클래스를 상속하듯이 extends 키워드를 사용하면 한 인터페이스가 다른 인터페이스를 확장할 수 있습니다.interface ArithmeticCalculations { public abstract int addition(int a, int b); public abstract int subtraction(int a, int b); } interface Math
Flexjson은 자바 빈(Bean), 맵(Map), 배열, 컬렉션 등을 JSON 형식으로 직렬화하고 역직렬화할 수 있는 경량급 자바 라이브러리입니다. JSONSerializer는 자바 객체를 JSON으로 변환하는 직렬화 작업을 담당하는 핵심 클래스이며, 기본적으로 얕은 직렬화(shallow serialization) 방식으로 동작합니다. 직렬화된 JSON 데이터를 특정 키 값으로 한 번 감싸고 싶다면 JSONSerializer 클래스가 제공하는 rootName() 메서드를 활용하면 됩니다. 이 메서드는 최종 JSON 결과물을 r
Java에서 숫자 문자열 앞에 붙어 있는 불필요한 0(선행 제로)을 제거해야 하는 경우가 종종 있습니다. 이럴 때 String 클래스의 replaceAll() 메서드와 정규식을 활용하면 간단하게 처리할 수 있습니다.replaceAll() 메서드는 두 개의 문자열 인수를 받습니다. 첫 번째는 매칭에 사용할 정규식(regular expression), 두 번째는 대체할 문자열(replacement String)이며, 정규식과 일치하는 부분을 지정한 문자열로 치환합니다.선행 0을 찾는 정규식문자열의 선행 0을 매칭하기 위한 정규식은 다음
문자열 앞에 붙은 불필요한 0(제로)을 제거하고 싶을 때, Apache Commons Lang 라이브러리의 StringUtils.stripStart() 메서드를 사용하면 간단하게 처리할 수 있습니다.stripStart() 메서드란?org.apache.commons.lang3.StringUtils 클래스의 stripStart() 메서드는 두 개의 문자열을 인자로 받습니다. 첫 번째 인자로 전달된 문자열에서, 두 번째 인자로 지정한 문자 집합에 해당하는 문자들을 문자열 시작 부분부터 제거합니다. 이를 활용하면 선행 0을 손쉽게 없앨 수
Java에서는 Double 값을 String으로 변환할 수 있는 다양한 메소드를 제공합니다. 이 글에서는 가장 많이 사용되는 네 가지 변환 방법과 각각의 예제 코드를 살펴보겠습니다.1. Double 클래스의 toString() 메소드toString() 메소드는 현재 Double 객체의 문자열 표현을 반환합니다. 이 메소드를 사용하여 Double 값을 String으로 변환하는 절차는 다음과 같습니다.필요한 기본형(primitive) double 값을 Double 클래스 참조 변수에 담습니다. (오토박싱이 자동으로 일어납니다.)toSt
StringBuilder 클래스의 append() 메서드는 문자열(String) 값을 인자로 받아 현재 객체의 끝에 추가합니다. Java에서 문자열은 불변(immutable)이기 때문에 반복적인 문자열 연결 작업 시에는 StringBuilder를 사용하는 것이 성능 면에서 훨씬 효율적입니다.문자열을 StringBuilder로 변환하는 단계문자열 값을 StringBuilder 객체로 변환하는 과정은 매우 간단합니다.변환할 문자열 값을 준비합니다.append() 메서드를 사용하여 해당 문자열을 StringBuilder 객체에 추가합니다
Java에서 StringBuilder 객체의 내용을 문자열로 변환하는 것은 매우 간단합니다. StringBuilder 클래스가 제공하는 toString() 메서드는 현재 객체가 담고 있는 내용을 String 값으로 반환합니다. 따라서 StringBuilder를 String으로 변환하려면 해당 객체에 대해 toString() 메서드를 호출하기만 하면 됩니다.변환 절차먼저 StringBuilder 클래스의 인스턴스를 생성합니다.append() 메서드를 사용하여 데이터를 추가합니다.toString() 메서드를 호출하여 StringBuil
Java에서 BufferedWriter 객체를 사용해 스트림에 데이터를 쓸 때는 주의할 점이 있습니다. write() 메서드를 호출하더라도 데이터는 우선 내부 버퍼에만 저장될 뿐, 실제로 출력되지 않습니다.바로 이때 flush() 메서드가 필요합니다. flush()는 버퍼에 임시로 저장된 내용을 기반 스트림(underlying stream)으로 밀어 넣어 실제 출력을 수행하는 역할을 합니다.flush() 없이 write()만 호출한 예제다음 Java 프로그램은 콘솔(표준 출력 스트림)에 한 줄의 문장을 출력하려고 합니다. 필요한 문
Java의 java.io 패키지에 포함된 File 클래스는 시스템상의 파일이나 디렉터리(경로 이름)를 나타내는 클래스입니다. 이 클래스는 파일 및 디렉터리에 대한 다양한 작업을 수행할 수 있는 여러 메서드를 제공합니다.그중 mkdir() 메서드는 현재 객체가 나타내는 경로에 디렉터리를 생성하는 역할을 합니다.디렉터리 계층 구조 생성하기새로운 디렉터리 계층 구조를 한 번에 생성하려면 같은 클래스의 mkdirs() 메서드를 사용하면 됩니다. 이 메서드는 현재 객체가 가리키는 경로에 디렉터리를 생성할 뿐만 아니라, 존재하지 않는 상위(부
자바의 바이트 스트림(Byte Stream)은 데이터를 8비트 단위의 바이트로 처리하는 입출력 방식입니다. 텍스트뿐만 아니라 이미지, 오디오, 비디오 등 모든 종류의 데이터를 다룰 수 있어 자바 I/O의 기본이 되는 핵심 개념입니다.바이트 스트림의 최상위 클래스: InputStream과 OutputStream바이트 스트림 클래스들은 모두 두 개의 추상 클래스를 기반으로 구성됩니다.InputStream: 바이트 단위로 데이터를 읽는(입력) 모든 스트림 클래스의 최상위 부모 클래스OutputStream: 바이트 단위로 데이터를 쓰는(출
문자 스트림(Character Stream)이란?자바의 문자 스트림(Character Stream)은 16비트 유니코드(Unicode) 단위로 데이터를 입출력하는 스트림입니다. 바이트 스트림과 달리 텍스트 데이터 전용으로 사용되며, 한글처럼 멀티바이트 문자를 포함한 다양한 언어의 텍스트를 안전하게 읽고 쓸 수 있다는 장점이 있습니다.모든 문자 스트림 클래스는 추상 클래스인 Reader(입력)와 Writer(출력)를 최상위 부모로 가집니다. 자바에서 기본 제공하는 대표적인 문자 스트림 클래스는 아래 표와 같습니다.Reader (입력)
Java의 Console 클래스는 콘솔(키보드·화면) 장치와 데이터를 주고받을 때 사용합니다. 이 클래스는 키보드로부터 한 줄을 읽어 들이는 readLine() 메서드를 제공하며, System.console() 메서드를 호출하면 Console 객체를 얻을 수 있습니다.참고 − 이 프로그램은 대화형(인터랙티브) 환경에서만 동작합니다. IDE처럼 콘솔이 연결되지 않은 비대화형 환경에서 실행하면 정상적으로 작동하지 않으므로, 반드시 명령 프롬프트(터미널)에서 실행해야 합니다.주요 특징readLine(): 키보드로부터 한 줄의
Java에서는 서로 연관된 클래스와 인터페이스를 하나의 패키지(package)로 묶어 관리합니다. 패키지란 특정 개념과 관련된 클래스와 인터페이스를 저장하는 디렉터리라고 할 수 있습니다. 예를 들어, 입력·출력 작업과 관련된 모든 클래스와 인터페이스는 java.io 패키지에 포함되어 있습니다.패키지 생성하기필요한 클래스와 인터페이스를 하나의 패키지로 그룹화하려면 파일 최상단에 package 키워드를 사용해 패키지를 선언하기만 하면 됩니다.예제package com.tutorialspoint.mypackage; public class
단위 테스트(unit testing)나 특정 애플리케이션 로직을 처리할 때처럼, 프로그램 실행 중에 임시 파일을 생성해야 하는 경우가 종종 있습니다. Java에서는 java.io.File 클래스가 제공하는 메서드만으로 임시 파일을 손쉽게 만들고 삭제할 수 있습니다.임시 파일 생성하기Java의 File 클래스는 임시 파일을 생성하는 createTempFile() 메서드를 제공합니다. 이 메서드는 세 개의 매개변수를 받습니다.prefix: 임시 파일의 접두사(파일 이름 시작 부분)suffix: 임시 파일의 접미사(확장자)director
java.io 패키지의 File 클래스는 시스템에 존재하는 파일 또는 디렉터리(경로명)를 추상화하여 표현합니다. 특정 디렉터리 안에 있는 모든 파일과 하위 디렉터리의 목록을 조회하고 싶을 때, 이 클래스는 list()와 listFiles() 두 가지 메서드를 제공합니다. list()와 listFiles()의 핵심 차이점 list() 메서드는 지정된 디렉터리 내의 모든 파일 및 디렉터리 이름(String)을 String 배열 형태로 반환합니다. listFiles() 메서드는 지정된 디렉터리 내의 파일 및 디렉터리 객체(File)를
ObjectMapper 클래스는 Jackson 라이브러리에서 가장 핵심적인 클래스입니다. 이 클래스의 readValue() 메서드를 사용하면 JSON 문자열을 Java 객체로 손쉽게 변환할 수 있습니다. readValue()는 주어진 JSON 콘텐츠(문자열)를 역직렬화(deserialize)하여 지정한 Java 클래스 타입의 객체로 반환하는 역할을 담당합니다. readValue() 메서드 구문 public <T> readValue(String content, JavaType valueType) throws IOEx
Java에서는 DeflaterOutputStream 클래스를 사용해 주어진 데이터를 압축하고, 그 결과를 출력 대상으로 스트리밍할 수 있습니다.이 클래스의 write() 메서드는 데이터(정수 또는 바이트 형식)를 받아 압축한 뒤, 현재 DeflaterOutputStream 객체가 연결된 출력 대상에 기록합니다. 이 메서드를 활용해 파일을 압축하려면 다음 단계를 따르면 됩니다.파일 압축 절차압축할 파일의 경로를 문자열(String) 형태로 생성자에 전달하여 FileInputStream 객체를 생성합니다.압축 결과를 저장할 출력 파일의
Java는 InflaterInputStream이라는 클래스를 제공하며, 이 클래스는 압축된 파일의 압축을 해제(uncompress)하는 데 사용됩니다. 이 클래스의 read() 메서드는 입력 스트림에서 압축된 데이터를 한 번에 한 바이트씩 읽어옵니다. 이 메서드를 활용하여 압축 파일의 압축을 해제하는 절차는 다음과 같습니다. FileInputStream 객체를 생성하고, 생성자의 매개변수로 압축 파일의 경로를 String 형식으로 전달합니다. FileOutputStream 객체를 생성하고, 생성자의 매개변수로 출력 파일(압축이