본문 바로가기

Java

(63)
[Java 복습] 추상 클래스, 인터페이스 추상 클래스미완성 설계도. 미완성 메서드를 갖고 있는 클래스abstract class Player { // 추상클래스(미완성 클래스) abstract void play(int pos); // 추상메서드(몸통{}이 없는 미완성 메서드) abstract void stop(); // 추상 메서드} 다른 클래스 작성에 도움을 주기 위한 것(인스턴스 생성 불가)Player p = new Player(); X 상속을 통해 추상 메서드를 완성해야 인스턴스 생성가능구현: 추상 메서드 구현 해주기AudioPlayer ap = new AudioPlayer(); // Ok (AudioPlay는 Player를 구현한 구현 클래스)Play p = new AudioPlayer(); // OK 실제 p에 쓸 수있는 것은..
[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( ) 메서드를 통해 새로운 인스턴스를 생성할 수 있다. 애노테이션 처리: 클래스에 ..