Java 17

스트림(stream) - 기본

스트림은 데이터 컬렉션(예: 리스트, 배열, 집합)을 함수형 프로그래밍 스타일로 처리하기 위해 주로 람다식과 메소드 레퍼런스와 같이 사용되며, 코드를 간결하게 작성하고 병렬 처리를 쉽게 수행할 수 있도록 데이터를 다루는 강력한 도구이다.*참고* 병렬 처리란? 하나의 작업을 여러 부분으로 나누어 동시에 처리하는 컴퓨팅 기술이다. 컴퓨터의 성능을 최대한 활용해서 작업을 보다 빠르게 수행할 수 있도록 목표함.데이터 집합에서 원하는 결과를 얻기 위해서는 일반적으로 for문이나 Iterator를 사용한다. 그러나 이러한 방식은 코드의 가독성이나 재사용성 면에서 떨어질 수 있으며, 또 다른 문제는 데이터 소스마다 각각의 방식대로 데이터를 다루고 각 컬렉션 클래스에는 같은 기능의 메서드들이 중복 정의가 되어 있다. ..

객체 지향 설계의 기본 :: 역할과 구현의 분리

다형성, 역할과 구현의 분리 다형성(Polymorphism)은 객체지향 프로그램밍에서 중요한 개념으로, 하나의 추상적인 역할(인터페이스나 추상 클래스)을 여러 다른 구체적인 개념으로 구현할 수 있는 능력을 가리킨다. 역할과 구현의 분리는 다형성의 핵심 원칙이며, 코드의 역할과 분리가 명확해질수록 코드가 단순해지고 유지보수가 용이해진다. 즉, 새로운 구현을 추가하거나 기존 구현을 변경할 때 다른 부분에 미치는 영향이 적을수록 역할과 구현이 잘 분리되었다고 말할 수 있다. 다음은 역할과 구현의 분리를 실세계의 비유로 표현한 그림이다. 위 예시 그림으로 다형성의 역할과 구현의 분리 개념을 설명하면 이렇다. 사용자(클라이언트)는 대상의 역할(인터페이스)만 알면 된다. - 즉, 스마트폰(갤럭시, 아이폰)의 사용 ..

Java 2023.09.25

예외 처리: 사용자 정의 예외

사용자 정의 예외(User-Defined Exception) 사용자 정의 예외란 Java에서 기본적으로 제공되는 예외 클래스를 상속받아 사용자가 직접 예외 클래스를 정의하는 것을 의미한다. 사용자 정의 예외는 기존의 예외 클래스를 확장하여 프로그래머가 특정 예외 상황을 더 명확하게 표현하고 예외 처리를 할 수 있게 한다. 아래는 RuntimeException 클래스를 상속받은 사용자 정의 예외 클래스를 작성한 예이다. public static void main(String[] args) { throw new customException("사용자 정의 예외 발생"); } } class customException extends RuntimeException { // 사용자 정의 예외 RuntimeExcep..

Java/예외처리 2023.09.14

예외처리: throw와 throws

throw 키워드 throw 키워드는 프로그래머가 고의로 예외를 발생시키는 키워드이며, 연산자 new를 이용해서 발생시키려는 예외 클래스의 인스턴스를 생성시킨다. 예시 try{ throw new Exeption("고의로 예외 발생")// 예외 발생 }catch(Exception e){ System.out.println("에러 메시지:"+ e.getMessage()); e.printStackTrace(); } System.out.println("프로그램 정상 종료"); 출력 결과를 보면, throw키워드를 이용하여 Exception 예외를 고의로 발생시킨 것을 확인할 수 있다. throw 키워드는 일반적으로 개발자가 원하는 시점에서 예외를 생성하고 프로그램의 제어 흐름을 변경하는데 사용된다. throws ..

Java/예외처리 2023.09.14

try-catch, printStackTrace(), getMessage()와 예외 처리 흐름

예외처리 실행 중의 '에러(심각한 오류)'는 프로그래머가 해결을 할 수 없지만, 예외는 처리를 해주어야 한다. 예외처리란 프로그램 실행 시 발생할 수 있는 예상하지 못한 예외의 발생에 대비한 코드를 작성하는 것이다. 예외 처리는 예외 발생에 의한 프로그램의 비정상적 종료를 예방하고, 정상적인 실행상태를 유지하기 위함이다. try-catch-finally문 : try-catch-finally문은 자바에서 예외 처리를 위해 사용되는 구문이다. try블록: 예외가 발생할 수 있는 코드를 블럭 내에 작성하고, 이 블록 안에서 예외가 발생하면 제어 흐름은 try문 아래에 있는 catch 블록 중 하나로 이동된다. catch블록: try에서 예외가 발생하면 해당하는 catch 블록으로 제어 흐름이 이동한다. 예외 ..

Java/예외처리 2023.09.14

오류와 예외, 예외 클래스(checked, unchecked)

프로그램 오류 프로그램 실행 중 어떤 원인에 의해서 예기치 않은 결과가 발생하거나 비정상적으로 종료되는 결과를 프로그램 오류 또는 에러라고 표현한다. 프로그램 오류는 크게 아래 3가지로 구분될 수 있다. 종류 설명 컴파일 에러 컴파일 시에 발생하는 에러 런타임 에러 실행 시에 발생하는 에러 논리적 에러 실행은 되지만, 프로그래머 의도와 다르게 동작하는 것 컴파일의 동작 흐름 자바에서 소스코드를 컴파일하는 과정은 프로그래밍의 기본이다. 컴파일러는 소스코드(.java)를 검사하여 오타, 문법 오류, 자료형 불일치 등의 기본적인 오류를 확인하고 보고해준다. 이를 통해 개발자는 코드를 수정하여 컴파일을 성공적으로 완료할 수 있으며, 성공적인 컴파일 후에는 클래스 파일(.class)이 생성되어, 파일이 실행된다...

Java/예외처리 2023.09.14

java.util.function 패키지

Java에서 함수형 프로그래밍을 지원하기 위해 인터페이스와 함수형 인터페이스를 포함하는 패키지이다. 이 패키지는 람다 표현식과 스트림API와 함께 사용되며, 함수형 프로그래밍 스타일로 코드를 작성할 수 있게 도와 준다.  매번 새로운 함수형 인터페이스를 정의하는 것보다 가능하면, function 패키지의 인터페이스를 활용하는 것이 일관성 측면이나, 재사용성에서 효율이 좋다.function 패키지의 주요 함수형 인터페이스 함수형 인터페이스메서드설명java.lang.Runnablevoid run()- 매개변수 x- 반환 값 xSupplierT get()- 매개변수 x- 반환 값 oConsumervoid accept(T t)- 매개변수 o- 반환 값 x- Supplier와 반대FunctionR apply(T ..

Set 컬렉션 - TreeSet(개념)

Set 컬렉션 - TreeSet (개념)TreeSet은 Set 인터페이스를 구현한 컬렉션 클래스이며, 이진 검색 트리(binary search tree)라는 자료구조의 형태로 데이터를 저장한다. 이진 검색 트리는 검색, 범위 검색, 정렬에 높은 성능을 제공하는 자료구조이며, TreeSet은 이진 검색 트리의 성능에서 향상된 '레드-블랙 트리(Red-Black tree)로 구현되어 있다. *참고* 이진 검색 트리의 성능을 향상시키기 위해 여러 가지 변형과 최적화된 자료 구조가 개발되었다. 향상된 자료 구조는 특정 작업에서 더 빠른 속도와 효율성을 제공하며, 시간 복잡도 문제를 완화해준다. 이처럼 향상된 이진 검색 트리 중에 TreeSet은 트리의 높이를 최소화하는 데 중점을 둔 구조인 '균형 이진 검색 트..

(람다식) 함수형 인터페이스와 메소드 레퍼런스

함수형 인터페이스(Functional Interface) 함수형 인터페이스는 Java에서 함수형 프로그래밍을 지원하기 위해 람다 표현식을 편리하게 다룰 수 있도록 Java 8에 도입된 개념이다. 함수형 인터페이스는 인터페이스가 단 하나의 추상 메서드만을 가지는 것이 주요 특징이며, 이를 람다 표현식으로 해당 추상 메서드의 구현을 간결하게 만든다. *참고* 함수형 인터페이스는 단 하나의 추상메서드만 가지고 있다는 조건이 성립하면, default 메서드 또는 static 메서드를 여러 개 가지고 있어도 상관 없다. 앞서 포스팅한 블로그에서는 람다식을 "익명 함수"라고 표현했지만, 자바에서의 람다식은 익명 클래스의 객체와 동등하다고 말할 수 있다. 즉, 자바에 함수형 프로그래밍을 적용하기 위해 함수를 객체로 ..

람다식이란?

람다식(Lambda Expression) 람다식은 JDK1.8부터 추가된 개념이며, 람다식의 도입으로 자바는 객체지향언어인 동시에 함수형 언어가 되었다. 람다식은 간단히 말해서 메소드를 '하나의 식'으로 간결하게 정의하고 전달할 수 있게 해주는 문법적 구조이다. 메소드를 람다식의 문법 구조로 작성하면 메소드의 이름과 반환 값이 생략되므로, 람다식을 '익명 함수(anonymous function)'라고 표현하기도 한다. *참고* 함수형 언어란? 프로그래밍 패러다임 중 하나로, 프로그램을 수학적인 함수처럼 다루는 방법이다. 여기서 함수는 '입력'을 받아 '출력'을 만들어내는 작은 부분의 코드 조각이며, 이 조각들을 결합해서 더 큰 프로그램을 만드는 것을 함수형 프로그래밍이라고 말한다. 예를 들어, 두 정수를..