개발 일지/Java 54

[Java] 스트림(Stream)

자바에서는 파일이나 콘솔의 입출력을 직접 다루지 않고 스트림(Stream)이라는 흐름을 통해 다룬다. 여기서 스트림은 배열, 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다. 스트림은 데이터 소스를 다루는 풍부한 메서드를 제공하며, 이를 통해 다량의 데이터에 복잡한 연산을 수행하면서도 가독성과 재사용성이 높은 코드를 작성할 수 있다. 스트림은 다음과 같은 핵심적인 특징이 있다. 스트림 처리 과정은 생성, 중간 연산, 최종 연산 세 단계의 파이프라인으로 구성된다. : 스트림 생성 -> 중간 연산 -> 최종 연산 -> 결과 리턴 원본 데이터 소스를 변경하지 않는다. : 오직 데이터를 읽어올 수 있으며 데이터에 대한 변경과 처리는 생성된 스트림 안에서만 수행된다. 일회용이다..

개발 일지/Java 2023.01.06

[Java] 람다식(Lambda Expression)

람다식(Lambda Expression)은 함수형 프로그래밍 기법을 지원하는 자바의 문법 요소이다. 간단히 말해서 메서드를 하나의 식으로 표현한 것이며, 코드를 매우 간결하면서 명확하게 표현할 수 있다는 장점이 있다. 다음은 람다식을 이용해서 표현한 식이다. //기존 메서드 표현 방식 int sum(int num1, int num2) { return num1 + num2; } //위의 코드를 람다식으로 표현한 식 (int num1, int num2) -> { return num1 + num2; } 이렇게 람다식은 반환타입과 메서드명을 생략해서 표현할 수 있다. 따라서 익명 함수(anonymous function)라고 부르기도 한다. 이 외에도 특정 조건이 충족된다면 람다식을 더 축약해서 표현할 수 있다...

개발 일지/Java 2023.01.06

[Java] 애너테이션(Annotation)

애너테이션(annotation)은 주석이랑 비슷한 기능을 하며, 마찬가지로 정보 전달을 위해 만들어진 문법 요소이다. 주석이랑 차이점이 있다면 정보를 전달하는 대상이 다르다는 것이다. 주석은 개발자에게 정보를 전달하는 반면, 애너테이션은 다른 프로그램에게 정보를 전달한다. 즉, 소스 코드가 컴파일되거나 실행될 때 컴파일러 및 다른 프로그램에게 필요한 정보를 전달해 준다. 애너테이션은 @로 시작하고 클래스, 인터페이스, 필드, 메서드 등에 붙여서 사용할 수 있다. public class ExampleClass implements ExampleInterface { @Override public void example() { } } 위 코드에서 @Override는 example()이 추상 메서드를 구현하거나 ..

개발 일지/Java 2023.01.06

[Java] 반복자(Iterator)

iterator의 사전적 의미는 '반복자'이며, 컬렉션에 저장된 요소들을 순차적으로 읽어오는 역할을 한다. Collection 인터페이스에 정의된 iterator()를 호출하면, iterator 타입의 인스턴스가 반환된다. 따라서 Collection 인터페이스를 상속받는 List와 Set 인터페이스를 구현한 클래스들은 interator() 메서드를 사용할 수 있다. 다음은 iterator 인터페이스에 정의된 메서드이다. hasNext() : 읽어올 객체가 남아 있으면 true를 리턴하고 없으면 false를 리턴한다. next() : 컬렉션에서 하나의 객체를 읽어온다. 이 때, next()를 호출하기 전에 hasNext()를 통해 읽어올 다음 요소가 있는지 먼저 확인해야 한다. remove() : next..

개발 일지/Java 2023.01.04

[Java] Map<K, V>

Map 인터페이스는 키(key)와 값(value)으로 구성된 객체를 저장하는 구조를 가지고 있다. 구성된 객체를 Entry 객체라고 하는데, 이 객체는 키와 값을 각각 Key 객체와 Value 객체로 저장한다. Map에서 key와 value는 모두 객체이며, 기본타입일 수 없다. 또한, key가 다르면 value가 같아도 다른 entry로 간주한다. 여기서 모든 키는 고유한 값을 가진다. 따라서 키는 중복 저장될 수 없지만, 값은 중복 저장이 가능하다. 이는 키의 역할이 값을 식별하는 것이기 때문이다. Map 인터페이스를 구현한 클래스에는 HashMap, HashTable, TreeMap, SortedMap 등이 있고 HashMap은 가장 대표적인 클래스이다. HashMap HashMap Map 인터페이..

개발 일지/Java 2023.01.04

[Java] Set<E>

Set 인터페이스를 구현한 모든 Set 컬렉션 클래스는 다음과 같은 특징을 가진다. 요소의 저장 순서를 유지하지 않는다. 같은 요소의 중복 저장을 허용하지 않는다. 대표적인 Set을 구현한 클래스는 HashSet, TreeSet이 있다. HashSet HashSet은 Set 인터페이스를 구현한 가장 대표적인 컬렉션 클래스 중 하나이며, 알고리즘(hash algorithm)을 사용하여 검색 속도가 매우 빠르다는 장점이 있다. 역시 Set 인터페이스의 특성을 그대로 물려받기 때문에 중복된 값을 허용하지 않으며, 저장 순서를 유지하지 않는다. 다음은 HashSet에 값을 추가할 때 해당 값이 중복된 값인지 판단하는 과정이다. add(Object o)를 통해 객체를 저장하고자 한다. 이 때, 저장하고자 하는 객..

개발 일지/Java 2023.01.04

[Java] List<E>

List 인터페이스는 배열과 같이 객체를 일렬로 늘어놓는 구조를 가지고 있으며 List 컬렉션 클래스는 다음과 같은 특징을 가진다. 요소의 저장 순서 유지 같은 요소의 중복 저장 허용 객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동으로 인덱스가 부여되고, 인덱스로 객체를 검색, 추가, 삭제할 수 있는 등의 여러 기능을 제공한다. List 인터페이스를 구현한 클래스는 ArrayList, Vector, LinkedList, Stack 등이 있다. ArrayList ArrayList는 컬렉션 프레임워크에서 가장 많이 사용되는 컬렉션 클래스 중 하나이다. JDK 1.2부터 제공된 ArrayList 클래스는 내부적으로 배열을 이용하여 요소를 저장한다. 기능적으로는 Vector와 동일하지만 기존의 Vector..

개발 일지/Java 2023.01.04

[Java] 컬렉션 프레임워크(Collection Framework)

자바에서 컬렉션 프레임워크(collection framework)란, 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 말한다. 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현한 것이다. 컬렉션 프레임워크는 특정 자료 구조에 데이터를 추가하고, 삭제하고, 수정하고, 검색하는 등의 동작을 수행하는 편리한 메서드들을 제공해준다. 따라서, 컬렉션 프레임워크가 제공하는 다양한 인터페이스와 구현 클래스를 활용하면 보다 객체 지향적이고 재사용성 높은 코드를 작성할 수 있다. 컬렉션 프레임워크의 구조 컬렉션 프레임워크는 자바의 인터페이스를 사용하여 구현된다. 다음은 핵심이 되는 주요 인터페이스이다. List List는 데이터의 순서가 유..

개발 일지/Java 2023.01.04

[Java] 예외 처리(Exception Handling)

예외 처리(exception handling)란, 개발자가 예기치 못한 예외의 발생에 미리 대처하는 코드를 작성하는 것이다. 실행 중인 프로그램의 비정상적인 종료를 방지하고 정상적인 실행 상태를 유지하는 것이 목적이다. 자바에서는 예외가 발생하면 예외 클래스로부터 객체를 생성하여 해당 인스턴스를 통해 예외처리를 한다. 자바의 모든 에러와 예외 클래스는 Throwable 클래스로부터 확장되며, 모든 예외의 최고 상위 클래스는 Exception 클래스이다. 일반 예외 클래스(Exception) 런타임 시에 발생하는 RuntimeException 클래스와 그 하위 클래스를 제외한 모든 Exception 클래스와 그 하위 클래스를 가리킨다. 주로 외부의 영향으로 발생할 수 있는 것들로 I/O 입출력에 의해 발생..

개발 일지/Java 2023.01.04

[Java] 에러(Error)

프로그램을 만들거나 실행하다 보면 에러와 마주치는 상황이 자주 발생할 것이다. 에러(error)가 발생하면 프로그램은 의도한 대로 동작하지 않거나 심각한 경우에는 비정상적으로 종료되기도 한다. 에러가 발생하는 원인은 수없이 다양하며, 크게 외부적인 요인과 내부적인 요인으로 구분할 수 있다. 대표적인 외부적인 요인으로는 하드웨어의 문제, 네트워크의 연결 끊김, 사용자 조작 오류 등이 있고 내부적인 요인으로는 대표적으로 개발자의 코드 작성 에러가 있다. 컴파일 에러, 런타임 에러 코드를 작성하다 보면 IDE에서 빨간 줄로 잘못된 부분을 표시해주는 모습을 확인할 수 있다. 이러한 경우를 컴파일 에러(Compile Time Error)라고 하며, IDE에서는 아무런 경고를 보내주지 않았는데 코드를 실행한 시점에..

개발 일지/Java 2023.01.04