프로그래밍 언어/JAVA(자바) 22

JAVA Exception 개념 (Checked Exception/UnChecked Exception/Error)

1. 자바 예외(Exception) 종류 예외(Exception) 체크 예외(Checked Exception) 언체크 예외(Unchecked Exception) 에러(Error) 자바에서 예외는 크게 Trowable 클래스를 상속받은 Error와 Exception으로 나눌 수 있다. Error는 개발자가 제어할 수 없는 시스템 레벨 예외이다. Java에서의 Exception은 Runtime Exception과 Exception으로 나눌 수 있고, 언체크 예외는 Runtime Exception로, 체크 예외는 Exception으로 구분한다. 2. Checked Exception, Unchecked Exception, Error 특징 체크예외(Checked Exception) java.lang.Excepti..

[자바/java] Optional<T> 클래스란?

개요 JAVA 8 버전부터 등장한 Optional은 "T타입의 객체"를 감싸는 래퍼클래스다 Optional타입의 객체는 모든 타입의 참조변수를 담을 수 있다 특징 연산의 결과를 Optional객체에 담아서 반환 Optional객체에 담아서 반환하면, 반환된 결과가 null인지를 if문으로 체크하지 않고 Optional의 메서드를 통해 처리할 수 있다 NPE(NullPointerException)이 발생하지 않는 보다 간결하고 안전한 코드를 작성하는 것이 가능하다 *NPE : NullPointerException Optional 객체 생성 1. Optional.of() : 값을 저장. 저장하는 값이 Null이면 NPE를 발생시킨다. 2. Optional.ofNullable() : 값을 저장. 저장하는 값이..

[자바/java] 자바 문자열 배열을 문자열로 변환하기/바꾸기 (반대 과정 포함)

자바에서 문자열 배열을 문자열로, 문자열을 문자열 배열로 바꾸는 방법을 알아보자 문자열 배열에서 문자열로 기본 public static void main(String[] args) { String[] strArr = {"A", "B", "C"}; String str = String.join("", strArr); System.out.println(str); } // ABC - join 메서드는 첫 번째 인수("")를 기준으로 문자열 배열을 문자열로 만드는 String의 메서드다. 응용 public static void main(String[] args) { String[] strArr = {"A", "B", "C"}; str = String.join("/", strArr); System.out.print..

[자바/java] 람다식(Lambda) 정리하기 (4. 메서드 참조)

람다식의 메서드 참조 람다식이 단 하나의 메서드만 호출하는 경우, 메서드 참조(method reference)라는 방법으로 람다식을 간략히 할 수 있다. Function f = s -> Integer.parseInt(s); 위 기능을 풀어서 쓰면 아래와 같다. public Integer parseInt(String s) { return Integer.parseInt(s); } parseInt 메서드는 그냥 자바의 문법이고, 그냥 Integer.parseInt 메서드를 반환할 뿐이다. 이 기능은 람다식에서는 아래와 같이 간단히 작성할 수 있다. Function f = Integer::parseInt; 람다식의 일부가 생략되었지만, 컴파일러는 생략된 부분을 우변의 parseInt 메서드의 선언부로부터, 또는..

[자바/java] 람다식(Lambda) 정리하기 (3. 람다식의 다양한 형태)

기본형을 사용하는 함수형 인터페이스 람다식은 매개변수와 반환 값이 제네릭 타입뿐만 아니라 기본형을 사용할 수 있는 함수형 인터페이스들을 제공한다. 함수형 인터페이스 형식 메서드 설 명 DoubleToIntFunction DoubleToLongFunction IntToDoubleFunction IntToLongFunction LongToDoubleFunction LongToIntFunction AToBFunction double -> applyAsInt(double b) -> int (A) -> applyAsB(A) -> B 입력 : A타입 출력 : B타입 ToIntFunction ToDoubleFunction ToLongFunction ToBFuntion T -> applyAsInt(T t) -> int..

[자바/java] 람다식(Lambda) 정리하기 (2. 함수형 인터페이스(Functional Interface) : 응용)

java.util.function 패키지 우리가 주로 사용하는 메서드의 타입, 매개변수 개수, 반환 타입 등, java.util.function 패키지에 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 적용해 놓았다. function 패키지를 사용해서 람다식을 구현하게 된다면, 메서드 이름도 통일되고, 재사용성이나 유지보수 측면에서도 유리하기 때문에 활용하는 것을 추천한다. 함수형 인터페이스 메서드 설명 java.lang.Runnable void run() 매개변수도 없고, 반환값도 없음. Supplier T get() 매개변수가 없고, 반환값만 있음. Consumer void accept(T t) 매개변수가 있고, 반환값이 없음 Function R apply(T t) 일반적인 매개변수 ..

[자바/java] 람다식(Lambda) 정리하기 (2. 함수형 인터페이스(Functional Interface) : 기본)

함수형 인터페이스 람다식이 메서드와 동등한 것처럼 보이지만, 사실 람다식은 익명 클래스의 객체와 동등하다. * 익명 클래스 : InnerClass의 한 종류로 이름이 없는 객체를 만들 수 있다. 메서드를 호출하려면 참조변수가 있어야 한다. 람다식으로 정의된 익명 객체의 메서드는 참조변수가 있어야 호출할 수 있다. 데이터타입 f = a -> a + a; 위의 코드에서 데이터타입은 참조형이다. 참조형이 가능하단 말은 String과 같이 클래스이거나 List같이 인터페이스가 올 수 있다는 말이다. 그리고 람다식과 동등한 메서드가 정의돼있어야 한다.(Interface면 구현, 클래스라면 오버라이딩으로 가능하다) 위에서 언급한 익명클래스 객체는 아래와 같이 생성하고 동작할 수 있다. 1 2 3 4 5 6 7 8 ..

[자바/java] 람다식(Lambda) 정리하기 (1. 개념)

람다식(Lamdba expression) JDK 1.8(자바 8버전) 이후에 추가된 람다식은 자바를 객체지향언어인 동시에 함수형 언어가 되게 해줬다. 기존의 자바를 거의 변경하지 않으면서 함수형 언어의 장점을 잘 접목시키는 데 성공하였다. 람다식은 간단히 말해서 메서드를 하나의 '식(Expression)'으로 표현한 것이고, 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해줬다. 이러한 람다의 특징 때문에 메서드를 람다식으로 표현하면 메서드 이름과 반환 값이 없어지므로, 람다식을 익명 함수(anonymous function)이라고도 한다. 특징 메서드를 사용하기 위해서는 클래스를 만들어야 하고, 그 클래스 내부에 메서드를 선언한다. 그리고 그 만들어진 클래스의 인스턴스를 생성하고(new) 변수.met..

[자바/java] 효율적인 배열 복사 System.arrayCopy

대량의 배열 데이터를 처리해야 하는 문제를 풀다 알게 된 방법이다. 두고두고 사용할 일이 있을 것 같아서 정리하게 되었다. 흔히 배열에서 리스트로, 2차원 배열에서 1차원 배열로 구조를 변경할 때 반복문을 사용해서 복사하게 된다. 이는 데이터를 삽입하기 위한 불필요한 작업이 반복적으로 발생하여 매우 비효율적인 방법이다. 예를 들어, 1 2 3 4 5 6 7 8 9 10 int[] a = new int[5]; int[] b = new int[5]; for(int i = 0; i

[자바/java] 이차원 배열 90도 회전시키기, int[][] rotate

코딩테스트 문제를 풀며 기록하고 두고두고 보면 좋을 것 같아 업로드합니다. 1. 값이 들어있는 2차원 배열을 getRotate() 파라미터로 입력한다. 2. 회전될 2차원 배열을 같은 크기로 선언해준다. 3. 크기 별로 90도 회전시켜준다. 회전이므로 높이와 넓이가 같은 정사각형 모양을 전제조건으로 한다. 1 2 3 4 5 6 7 8 9 10 public int[][] getRotate(int[][] arr) { int[][] resultArr = new int[arr.length][arr.length]; for (int i = 0; i