728x90

전체 글 216

[Java] 자바 java.time 패키지

자바에서의 날짜 및 시간 처리JDK 1.0에서는 Date 클래스를 사용하여 날짜에 관한 처리를 수행했지만, Date 클래스는 현재 대부분의 메소드가 사용을 권장하지 않고(deprecated) 있다.JDK 1.1부터 새롭게 제공된 Calendar 클래스는 날짜와 시간에 대한 정보를 손쉽게 얻을 수 있었지만, Calendar 클래스는 다음과 같은 문제점을 가지고 있다. 따라서 많은 자바 개발자들은 Calendar 클래스뿐만 아니라 더 나은 성능의 Joda-Time이라는 라이브러리를 함께 사용해 왔다.Calendar 인스턴스는 불변 객체(immutable object)가 아니라서 값이 수정될 수 있다.윤초(leap second)와 같은 특별한 상황을 고려하지 않는다.Calendar 클래스에서는 월(month)..

Language/Java 2024.04.28

[Java] 자바 스트림 API - Optional 클래스

java.util.Optional 클래스Optional 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)다. 따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있다.Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다. 즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게 된다.Optional 객체의 생성of() 메소드나 ofNullable() 메소드를 사용하여 Optional 객체를 생성할 수 있다.of() 메소드는 null이 아닌 명시된 값을 가지는 Optional 객체를 반환한다. 만약 of() 메소드를..

Language/Java 2024.04.28

[Java] 자바 스트림 API - 정의, 생성, 연산

스트림 APIJava SE 8부터 추가된 스트림 API는 앞서 입력과 출력 수업에서 살펴본 스트림과는 전혀 다른 개념이다.자바에서는 많은 양의 데이터를 저장하기 위해서 배열이나 컬렉션을 사용합니다. 이렇게 저장된 데이터에 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하여 매번 새로운 코드를 작성해야 한다. 하지만 이렇게 작성된 코드는 길이가 너무 길고 가독성도 떨어지며, 코드의 재사용이 거의 불가능하다.즉, 데이터베이스의 쿼리와 같이 정형화된 처리 패턴을 가지지 못했기에 데이터마다 다른 방법으로 접근해야만 했다. 이러한 문제점을 극복하기 위해서 Java SE 8부터 스트림(stream) API를 도입한다.스트림 API는 데이터를 추상화하여 다루므로, 다양한 방식으로 저장된 데이터를 읽고 쓰..

Language/Java 2024.04.28

[Java] 자바 람다 표현식 - 정의, 생성, 메소드 참조

람다 표현식(lambda expression)이란? 람다 표현식(lambda expression)이란 간단히 말해 메소드를 하나의 식으로 표현한 것이다. 람다 표현식은 메소드의 매개변수로 전달될 수도 있으며, 메소드의 결괏값으로 반환될 수도 있다. 따라서 람다 표현식을 사용하면, 기존의 불필요한 코드를 줄여주고, 작성된 코드의 가독성을 높여준다. Java SE 8부터는 이러한 람다 표현식을 사용하여 자바에서도 함수형 프로그래밍을 할 수 있게 되었다. // 일반 메소드 int min(int x, int y) { return x x < y ? x : y; 위의 예제처럼 메소드를 람다 표현식으로 표현하면, 클래스를 작성하고 객체를 생성하지 않아도 ..

Language/Java 2024.04.21

[Java] 자바 쓰레드 - 쓰레드, 멀티 쓰레드

프로세스(process)란? 프로세스(process)란 단순히 실행 중인 프로그램(program)이라고 할 수 있다. 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다. 이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다. 스레드(thread)란? 스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다. 또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 한다. 스레드의 생성과 실행 자바에서 스레드를 생성하는 방법에는 1. Runnable 인터페이스를 구현..

Language/Java 2024.04.21

[Java] 자바 입력과 출력 - 스트림, 파일 입출력

스트림(stream) 자바에서는 파일이나 콘솔의 입출력을 직접 다루지 않고, 스트림(stream)이라는 흐름을 통해 다룬다. 스트림(stream)이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미한다. 즉, 스트림은 운영체제에 의해 생성되는 가상의 연결 고리를 의미하며, 중간 매개자 역할을 한다. Java SE 8 버전부터 추가된 스트림 API는 앞서 설명한 스트림과는 전혀 다른 개념이다. 입출력 스트림 스트림은 한 방향으로만 통신할 수 있으므로, 입력과 출력을 동시에 처리할 수는 없다. 따라서 스트림은 사용 목적에 따라 입력 스트림과 출력 스트림으로 구분된다. 자바에서는 java.io 패키지를 통해 InputStream과 OutputStream 클래스를 별도로 제공하고 있다. 자바에서의 ..

Language/Java 2024.04.21

[Java] 자바 예외 처리 - 오류와 예외

오류(error)와 예외(exception) 자바 프로그램을 작성할 때 자바 문법에 맞지 않게 코드를 작성하고 컴파일하려고 하면, 자바 컴파일러는 문법 오류(syntax error)를 발생시킨다. 또한, 자바 문법에는 맞게 작성되었다 하더라도 프로그램이 실행되면서 예상하지 못한 오류가 발생할 수 있다. 이렇게 컴퓨터 시스템이 동작하는 도중에 예상하지 못한 사태가 발생하여 실행 중인 프로그램이 영향을 받는 것을 오류(error)와 예외(exception) 두 가지로 구분할 수 있다. 오류(error)는 시스템 레벨에서 프로그램에 심각한 문제를 야기하여 실행 중인 프로그램을 종료시킨다. 이러한 오류는 개발자가 미리 예측하여 처리할 수 없는 것이 대부분이므로, 오류에 대한 처리는 할 수 없다. 하지만 예외(e..

Language/Java 2024.04.21

[Java] 자바 컬렉션 프레임워크 - Comparable과 Comparator

Comparable 인터페이스 Comparable 인터페이스는 객체를 정렬하는 데 사용되는 메소드인 compareTo() 메소드를 정의하고 있다. 자바에서 같은 타입의 인스턴스를 서로 비교해야만 하는 클래스들은 모두 Comparable 인터페이스를 구현하고 있다. 따라서 Boolean을 제외한 래퍼 클래스나 String, Time, Date와 같은 클래스의 인스턴스는 모두 정렬 가능하다. 이때 기본 정렬 순서는 작은 값에서 큰 값으로 정렬되는 오름차순이다. class Car implements Comparable { private String modelName; private int modelYear; private String color; Car(String mn, int my, String c) { ..

Language/Java 2024.04.21

[Java] 자바 컬렉션 프레임워크 - Iterator(반복자)와 ListIteratorIterator(리스트 반복자)

Iterator 인터페이스 자바의 컬렉션 프레임워크는 컬렉션에 저장된 요소를 읽어오는 방법을 Iterator 인터페이스로 표준화하고 있다. Collection 인터페이스에서는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메소드를 정의하여 각 요소에 접근하도록 하고 있다. 따라서 Collection 인터페이스를 상속받는 List와 Set 인터페이스에서도 iterator() 메소드를 사용할 수 있다. // 연결 리스트를 반복자(iterator)를 사용하여 순회 LinkedList lnkList = new LinkedList(); lnkList.add(4); lnkList.add(2); lnkList.add(3); lnkList.add(1); Iterator iter =..

Language/Java 2024.04.20

[Java] 자바 컬렉션 프레임워크 - Map 컬렉션 클래스

Map 컬렉션 클래스 Map 인터페이스는 Collection 인터페이스와는 다른 저장 방식을 가진다. Map 인터페이스를 구현한 Map 컬렉션 클래스들은 키와 값을 하나의 쌍으로 저장하는 방식(key-value 방식)을 사용한다. 여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 한다. Map 인터페이스를 구현한 모든 Map 컬렉션 클래스는 다음과 같은 특징을 가진다. 1. 요소의 저장 순서를 유지하지 않는다. 2. 키는 중복을 허용하지 않지만, 값의 중복은 허용한다. 대표적인 Map 컬렉션 클래스에 속하는 클래스는 1. HashMap, 2. Hashtable, 3. TreeMap과 같다. HashMap 클래스 HashMap 클래스는 Map 컬렉션 클래스에서 가장 많이 사용되는 클..

Language/Java 2024.04.14
728x90