Language/Java

Language/Java

함수형 인터페이스와 람다식, 메서드 참조

✏️ 함수형 인터페이스 함수형 인터페이스란 하나의 추상 메서드를 갖는 인터페이스를 말한다. 자바 8 이후부터는 함수형 인터페이스를 나타내는 @FuncionalInterface 내장 애노테이션을 사용할 수 있다. 이 애노테이션은 컴파일 타임에 해당 인터페이스가 함수형 인터페이스가 맞는지 검사할 때, 유용하게 사용할 수 있다. 함수형 인터페이스에는 하나의 추상 메서드 외에도 여러 개의 디폴트 메서드나 정적 메서드가 있을 수 있다. 예외적으로 java.lang.Object 클래스에 선언된 public 메서드를 오버라이딩하는 메서드는 인터페이스의 추상 메서드에 포함시키지 않는다. @FunctionalInterface interface MyFunctionalInterface { void foo(); default..

Language/Java

Generic

타입 매개변수명 작성 규칙 E - Element K - Key N - Number T - Type V - Value S, U, V 등 - 2번째, 3번째, 4번째 타입 Generic Method 제네릭 메서드는 제네릭 클래스가 아닌 일반 클래스에서도 정의할 수 있다. 타입 매개변수는 반환형 앞에 적어야 하며, 이를 반환형으로 사용할 수도 있다. Class Java { public static void printAll(T[] arr) { for (T t : arr) { System.out.println(t); } } public static void main(String[] args) { Integer[] numbers = {1,2,3}; String[] strings = {"일","이","삼"}; pri..

Language/Java

열거형(enums)

열거형 정의 enum 열거형이름 { 상수명1, 상수명2, ... } 자바의 열거형 자바의 열거형은 타입에 안전한 열거형(typesafe enum)이라서 실제 값이 같아도 타입이 다르면 컴파일 에러가 발생한다. 열거형 상수를 사용하면 기존의 소스를 다시 컴파일하지 않아도 된다. 열거형 상수의 값이 불연속적인 경우에는 열거형 상수의 이름 옆에 원하는 값을 괄호( )와 함께 적어주면 된다. 그리고 지정된 값을 저장할 수 있는 인스턴스 변수와 생성자를 새로 추가해 주어야 한다. 열거형의 인스턴스 변수가 반드시 final이어야 한다는 제약은 없다. 하지만 열거형 상수의 값을 저장하기 위한 것이므로 final을 붙인다. 열거형의 생성자는 제어자가 묵시적으로 private이다. 외부에서 값을 얻을 수 있도록 인스턴스..

Language/Java

중첩 클래스

종류 static을 사용하는 중첩 클래스 static을 사용하지 않는 중첩 클래스 내부 클래스 (Inner Class) 지역 클래스 (Local Class) 익명 클래스 (Anonymous Class) static을 사용하는 중첩 클래스 클래스 안에 static을 붙인 클래스로 외부 클래스 직접 참조가 불가하다. static을 사용하지 않는 중첩 클래스 내부 클래스 클래스 안의 클래스로 외부 클래스 직접 참조가 가능하다. 지역 클래스 메서드 내부에 클래스를 정의한다. 익명 클래스 일회성 클래스이다.

Language/Java

정규표현식 메타문자 목록

정규표현식 메타문자를 사용할 때는 메타문자 앞에 \\ (역슬래쉬 2번)을 사용하여 Escape 처리를 해줘야한다. 메타문자 목록

Language/Java

Java Stream Collector

그룹화 스트림 사용 이후에 처리하기 조금 더 편리한 형태 즉, 내가 원하는 자료 구조로 그룹화 시킬 수 있다. groupingBy 전체 직원(Users)에서 직책(Position)별로 나눠서 직원을 그룹화 Map usersByPosition = users.stream() .collect(groupingBy(User::getPosition)); 결과 groupingBy의 파라미터로 온 분류함수를 기준에 의해 Map의 key로가고 객체들은 value로 그룹화되었다. {MANAGER=[tony, alex, oliveia], STAFF=[elsa, mayya, lily, jacob, jace], CEO=[eric] 2. 여러 조건에 의해서 분류 직책별로 우수사원을 뽑기위해 groupingBy의 오버라이드 메소드..

Language/Java

Inner Class 가 static 으로 선언되어야 하는 이유

만일 내부 클래스를 이용하는데, 내부 클래스에서 바깥 외부의 인스턴스를 사용할 일이 없다면 static 클래스로 선언해주어야 한다. 왜냐하면 static이 아닌 내부 인스턴스 클래스는 외부와 연결이 되어 있어 '외부 참조'를 갖게되어 메모리를 더 먹고, 느리며, 또한 GC 대상에서 제외되는 여러 문제점을 일으키기 때문이다. 하지만 정적 멤버 클래스는 외부 인스턴스 없이도 만들어질 수 있기 때문에 '외부 참조'가 존재하지 않게 되고, 이로 인해 일회용으로 사용된 바깥 클래스 객체는 더이상 내부 클래스 객체와 아무런 관계가 아니게 되어 정상적으로 GC 수거 대상이 되어 메모리 관리가 잘 된다. 따라서 inner 클래스를 선언할때 static 키워드를 붙여주지 않으면 '외부 참조' 현상 때문에, 내부 클래스 ..

Language/Java

얕은 복사, 깊은 복사

얕은 복사(Shallow Copy) 다양한 복합 멤버 변수를 갖고 있는 객체가 인스턴스가 생성될 때 인스턴스화 되면서 메모리에 할당된 주소의 값을 참조한다. 복사하려는 원본 객체에 대해서 새로운 단일 객체 또는 새로운 복합 객체를 만들고 원본 객체를 참조한다. 따라서 복사된 객체가 원본 객체에 종속적이다. call-by-reference와 유사한 개념이 된다. 깊은 복사(Deep Copy) 새로운 객체가 원본 객체 자체를 copy 하는 것이다. 즉, 원본 객체로부터 독립적인 객체를 생성한다. 즉, call-by-value 와 유사한 개념이 된다. 참조 https://okeybox.tistory.com/147 [Java] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) 얕은 복사(Sha..

Language/Java

Optional 메소드

Optional 메소드 static Optional empty() 아무런 값도 가지지 않는 비어있는 Optional 객체를 반환함. T get() Optional 객체에 저장된 값을 반환함. boolean isPresent() 저장된 값이 존재하면 true를 반환하고, 값이 존재하지 않으면 false를 반환함. static Optional of(T value) null이 아닌 명시된 값을 가지는 Optional 객체를 반환함. static Optional ofNullable(T value) 명시된 값이 null이 아니면 명시된 값을 가지는 Optional 객체를 반환하며, 명시된 값이 null이면 비어있는 Optional 객체를 반환함. T orElse(T other) 저장된 값이 존재하면 그 값을 반환..

Language/Java

예외 ( Exception )

프로그램 오류 프로그램이 실행중에 어떤 원인에 의해 오작동 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 이를 발생 시점에 따라서 나눌 수 있다. 컴파일 에러 : 컴파일 시, 발생하는 에러 런타임 에러 : 프로그램 실행 도중, 발생하는 에러 논리적 에러 : 컴파일도 잘되고 실행도 잘되지만, 의도와 다르게 동작하는 것 런타임 에러 자바에서는 실행 시 발생할 수 있는 프로그램 오류를 두 가지로 구분했다. error (에러) 메모리 부족 (OutOfMemoryErrorr) 나 스택오버플로우 (StackOverFlow) 같이 일단 발생하면 복구할 수 없는 심각한 오류 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 발생하면 프로그램의 비정상적 종..

kimjingyu
'Language/Java' 카테고리의 글 목록 (5 Page)