본문 바로가기

분류 전체보기

(349)
[Java] 예외 처리 활용 앞서 만든 프로그램은 반환 값을 사용해서 예외를 처리했습니다. 이런 경우 다음과 같은 문제가 있었습니다. 정상 흐름과 예외 흐름이 섞여 있기 때문에 코드를 한눈에 이해하기 어렵다. 심지어 예외 흐름이 더 많은 코드 분량을 차지한다. 실무에서는 예외 처리가 훨씬 더 복잡하다. 우리가 처음 만들었던 프로그램에 자바 예외 처리를 도입해서 이 문제를 점진적으로 해결해보겠습니다. public class NetworkClientExceptionV2 extends Exception{ private String errorCode; public NetworkClientExceptionV2(String message, String errorCode) { super(message); this.errorCode = error..
[Java] 체크 예외 VS 언체크 예외 예외 처리가 필요한 이유 클래스 설명 NetworkClient : 외부 서버와 연결하고, 데이터를 전송하고, 연결을 종료하는 기능을 제공한다. NetworkService : NetworkClient 를 사용해서 데이터를 전송한다. NetworkClient 를 사용하려면 연결, 전송, 연결 종료와 같은 복잡한 흐름을 제어해야 하는데, 이런 부분을 NetworkService 가 담당한다. Main : 사용자의 입력을 받는다. 전체 흐름: Main 을 통해 사용자의 입력을 받으면 사용자의 입력을 NetworkService 에 전달한다. NetworkService 는 NetworkClient 를 사용해서 외부 서버에 연결하고, 데이터를 전송하고, 전송이 완료되면 연결을 종료한다. NetworkClient 사용법..
[Java] 중첩 클래스, 내부 클래스 중첩 클래스, 내부 클래스란? 다음과 같이 for문 안에 for문을 중첩하는 것을 중첩(Nested) for문이라 합니다. for (...) { //중첩 for문 for (...) { } } 마찬가지로 클래스 안에 클래스를 중첩해서 정의할 수 있는데, 이것을 중첩 클래스(Nested Class)라 합니다. class Outer { ... //중첩 클래스 class Nested { ... } } 중첩 클래스는 클래스를 정의하는 위치에 따라 분류됩니다. 중첩 클래스는 총 4가지가 있고, 크게 2가지로 분류할 수 있습니다. 정적 중첩 클래스 내부 클래스 종류 내부 클래스 지역 클래스 익명 클래스 중첩 클래스를 정의하는 위치는 변수의 선언 위치와 같습니다. 변수의 선언 위치 정적 변수(클래스 변수) 인스턴스 변..
[Java] 날짜와 시간 파싱, 포맷팅 날짜와 시간은 크게 특정 시점의 시간(시각)과 시간의 간격(기간) 2가지로 나눌 수 있습니다. 특정 시점의 시간(시각) 이 프로젝트는 2013년 8월 16일 까지 완료해야해 다음 회의는 11시 30분에 진행한다. 내 생일은 8월 16일이야. 시간의 간격(기간, 시간의 양) 앞으로 4년은 더 공부해야 해 이 프로젝트는 3개월 남았어 라면은 3분 동안 끓어야 해 특정 시점의 시간: Temporal ( TemporalAccessor 포함) 인터페이스를 구현한다. 구현으로 LocalDateTime , LocalDate , LocalTime , ZonedDateTime , OffsetDateTime , Instant 등이 있다. 시간의 간격(기간): TemporalAmount 인터페이스를 구현한다. 구현으로 Pe..
[Java] 날짜와 시간 날짜와 시간 라이브러리가 필요한 이유 날짜와 시간을 계산하는 것은 단순하게 생각하면 쉬워보이지만, 실제로는 매우 복잡하고 어렵습니다. 그렇다면 왜 어려울까요? 날짜와 시간 차이 계산 윤년 계산 일광 절약 시간(Daylight Saving Time, DST) 변환 타임존 계산 자바 날짜와 시간 라이브러리의 역사 자바는 날짜와 시간 라이브러리를 지속해서 업데이트 했습니다. JDK 1.0 (java.util.Date) 문제점 타임존 처리 부족: 초기 Date 클래스는 타임존(time zone)을 제대로 처리하지 못했다. 불편한 날짜 시간 연산: 날짜 간 연산이나 시간의 증감 등을 처리하기 어려웠다. 불변 객체 부재: Date 객체는 변경 가능(mutable)하여, 데이터가 쉽게 변경될 수 있었고 이로 인해 버..
[Java] 타입 안전 열거형 패턴 (Type-Safe-Enum Pattern) 문자열과 타입 안전성1 먼저 자바가 제공하는 열거형(Enum Type)이 만들어진 근본적인 이유를 알아봅시다. public class DiscountService { public int discount(String grade, int price) { int discountPercent = 0; if (grade.equals("BASIC")) { discountPercent = 10; } else if (grade.equals("GOLD")) { discountPercent = 20; } else if (grade.equals("DIAMOND")) { discountPercent = 30; } else { System.out.println(grade + ": 할인X"); } return price * di..
[Java] Math, Random 클래스 Math 클래스 Math는 수 많은 수학 문제를 해결해주는 클래스 입니다. 너무 많은 기능을 제공하기 때문에 나와있지 않는 기능은 API 문서를 찾아봅시다. 1. 기본 연산 메서드 abs(x) : 절대값 max(a, b) : 최대값 min(a, b) : 최소값 2. 지수 및 로그 연산 메서드 exp(x) : e^x 계산 log(x) : 자연 로그 log10(x) : 로그 10 pow(a, b) : a의 b 제곱 3. 반올림 및 정밀도 메서드 ceil(x) : 올림 floor(x) : 내림 rint(x) : 가장 가까운 정수로 반올림 round(x) : 반올림 4. 삼각 함수 메서드 sin(x) : 사인 cos(x) : 코사인 tan(x) : 탄젠트 5. 기타 유용한 메서드 sqrt(x) : 제곱근 cbr..
[Java] System 클래스 System 클래스는 시스템과 관련된 기본 기능들을 제공합니다. import java.util.Arrays; public class SystemMain { public static void main(String[] args) { // 현재 시간(밀리초)를 가져온다. long currentTimeMills = System.currentTimeMillis(); System.out.println("currentTimeMills = " + currentTimeMills); // 현재 시간(나노초)를 가져온다. long currentTimeNano = System.nanoTime(); System.out.println("currentTimeNano = " + currentTimeNano); // 환경 변수를 읽는..
[Java] Class 클래스?? 자바에서는 Class 클래스는 클래스의 정보(메타데이터)를 다루는데 사용됩니다. Class 클래스를 통해 개발자는 실행 중인 자바 애플리케이션 내에서 필요한 클래스의 속성과 메서드에 대한 정보를 조회하고 조작할 수 있습니다. Class 클래스의 주요 기능 타입 정보 얻기: 클래스의 이름, 슈퍼 클래스, 인터페이스, 접근 제한자 등과 같은 정보를 조회할 수 있다. 리플렉션: 클래스에 정의된 메소드,필드,생성자 등을 조회하고, 이들을 통해 객체 인스턴스를 생성하거나 메소드를 호출하는 등의 작업을 할 수 있다. 동적 로딩과 생성: Class.forName( ) 메서드를 사용하여 클래스를 동적으로 로드하고, newInstance( ) 메서드를 통해 새로운 인스턴스를 생성할 수 있다. 애노테이션 처리: 클래스에 ..
[Java] Wrapper class 기본형의 한계 자바는 객체 지향 언어입니다. 그런데 자바 안에 객체가 아닌 것이 있습니다. 바로 int, double 같은 기본형(Primitive Type) 입니다. 기본형은 객체가 아니기 때문에 한계가 있습니다. 객체가 아님: 기본형 데이터는 객체가 아니기 때문에, 객체 지향 프로그래밍의 장점을 살릴 수 없습니다. 예를 들어 객체는 유용한 메서드를 제공할 수 있는데, 기본형은 객체가 아니므로 메서드를 제공할 수 없다. 객체 참조가 필요한 컬렉션 프레임워크를 사용할 수 없다. 그리고 제네릭도 사용할 수 없다. null 값을 가질 수 없음: 기본형 데이터 타입은 null 값을 가질 수 없습니다. 때로는 데이터가 없음 이라는 상태를 나타내야 할 필요가 있다. 기본형은 항상 값을 가지기 때문에 이런 표현을 ..