본문 바로가기
반응형

DEV61

[자바] 메소드 참조 Function f = (String s) -> Integer.parseInt(s); 위 람다식을 표현하면 아래와 같다. Integer wrapper(String s) {//메서드 이름은 의미없음. return Integer.parseInt(s); } 이 때 wrapper 메서드는 그저 값을 받아와서 Integer.parseInt()에게 넘겨주는 일만 한다. 이때 거추장스러운 메소드를 벗겨내고 Integer.parseInt()를 아래와 같이 직접 호출할 수 있다. Function f = Integer::parseInt; //메서드참조 컴파일러는 생략된 부분을 우변의 parseInt메서드의 선언부로부터, 또는 좌변의 Function 인터페이스에 지정된 제네릭 타입으로부터 쉽게 알아낼 수 있다. 또 다른 예.. 2023. 2. 23.
[자바] 함수형 인터페이스(Functional Interface) 자바에서 모든 메서드는 클래스 내에 포함되어야 하는데, 람다식은 메서드가 하나의 독릭접인 기능을 하기 때문에 함수라는 용어를 사용한다고 했다. 사실 람다식은 익명 클래스의 객체와 동등하다. (int a, int b) -> a > b ? a : b new Object() { int max(int a, int b) { return a > b ? a : b; } } 위 코드에서 max는 임의로 이름을 붙인것일뿐 의미는 없다. 람다식으로 정의된 익명 객체의 메서드를 어떻게 호출할 수 있을까? 객체의 메서드를 호출하려면 참조변수가 있어야 한다. 타입 f = (int a, int b) -> a > b ? a : b; 이 경우 참조변수 f의 타입은 어떤 걸로 해야 될까? 참조형이므로 클래스 또는 인터페이스를 사용할 .. 2023. 2. 22.
[자바] 람다식(Lambda expression) JDK1.8 부터 추가된 람다식은 자바가 등장한 이후 가장 큰 변화였다. 람다식의 도입으로 인해, 자바는 객체지향언어인 동시에 함수형 언어가 되었다. 1. 람다식이란? 람다식(Lambda expression)은 간단히 말해서 메서드를 하나의 식(expression)으로 표현한 것이다. 람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해준다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 '익명 함수(anonymous function)'이라고도 한다. int[] arr = new int[3]; Arrays.setAll(arr, (i) -> (int)(Math.random() * 5) + 1); 위의 식에서 '(i) -> (int)(Math.random() * 5) +.. 2023. 2. 22.
[자바] 제네릭 와일드 카드 제네릭 와일드 카드 제네릭은 아래와 같이 오버로딩하면 컴파일 에러가 발생한다. 제네릭 타입이 다른 것만으로는 오버로딩이 성립하지 않기 때문이다. static Juice makeJuice(FruitBox box) { ... } static Juice makeJuice(FruitBox box) { ... } 제네릭 타입은 컴파일러가 컴파일할 때만 사용하고 제거해버린다. 그래서 위 두 메서드는 오버로딩이 아니라 '메서드 중복 정의'이다. 이럴 때 사용하기 위해 고안된 것이 바로 '와일드 카드' 이다. 와일드 카드는 기호 '?'로 표현하는데, 와일드 카드는 어떠한 타입도 될 수 있다. '?' 만으로는 Object 타입과 다를게 없으므로, 다음과 같이 'extends' 와 'super' 로 상한(upper bou.. 2023. 2. 16.
[자바] Properties Properties Properties는 HashMap의 구버전인 Hashtable을 상속받아 구현한것으로 (String, String) 형태로 저장하는 단순화된 컬렉션클래스이다. 주로 애플리케이션의 환경설정과 관련된 속성(property)을 저장하는데 사용되며 데이터를 파일로부터 읽고 쓰는 편리한 기능을 제공한다. 그래서 간단한 입출력은 Properties를 활용하면 몇 줄의 코드로 쉽게 해결될 수 있다. 메서드 설명 Properties() Properties 객체를 생성 Properties(Properties defaults) 지정된 Properties에 저장된 목록을 가진 Properties 객체를 생성 String getProperty(String key) 지정된 키의 값을 반환 String ge.. 2023. 2. 16.
[자바] HashMap HashMap은 키(key)와 값(value)을 묶어서 하나의 데이터(entry)로 저장한다는 특징을 갖는다. 그리고 해싱(hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 보인다. public class HashMap extends AbstractMap implements Map, Cloeable, Serializable { transient Entry[] table; ... static class Entry implements Map.Entry { final Object key; Object value; ... } } HashMap은 Entry 라는 내부 클래스를 정의하고, 다시 Entry 타입의 배열을 선언하고 있다. 키와 값은 별개의 값이 아니라 서로 관련된 값.. 2023. 2. 15.
[자바] HashSet HashSet은 Set 인터페이스를 구현한 가장 대표적인 컬렉션이며, 중복된 요소를 저장하지 않는다. 만약 이미 저장되어 있는 요소와 중복된 요소를 추가하고자 한다면 add나 addAll 메서드들은 false를 반환함으로써 중복된 요소이기 때문에 추가에 실패했다는것을 알린다. HashSet의 특징을 이용하면, 컬렉션 내의 중복 요소들을 쉽게 제거할 수 있다. ArrayList와 같이 List 인터페이스를 구현한 컬렉션과 달리 HashSet은 저장순서를 유지하지 않고 저장순서를 유지하려면 LinkedHashSet을 사용하면 된다. HashSet은 내부적으로 HashMap을 이용해서 만들어졌으며, HashSet이란 이름은 해싱(hashing)을 이용해서 구현했기 때문에 붙여진 것이다. 생성자 또는 메서드 설.. 2023. 2. 15.
[자바] Comparator 와 Comparable Arrays.sort()를 호출하면 컴퓨터가 알아서 배열을 정렬하는 것처럼 보이지만 사실 Character 클래스의 Comparable의 구현에 의해 정렬되었던 것이다. Comparator 와 Comparable은 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있으며, Comparable 을 구현하고 있는 클래스들은 같은 타입의 인스턴스끼리 서로 비교할 수 있는 클래스들, 주로 Integer와 같은 wrapper 클래스와 String, Date, File 과 같은 것들이다. 기본적으로 오름차순(작은 -> 큰)으로 정렬되도록 구현되어 있다. 즉, Comparable을 구현한 클래스는 정렬이 가능하다는 것을 의미한다. public interface Comparator { int compare.. 2023. 2. 14.
[자바] Arrays Arrays 클래스에는 배열을 다루는데 유용한 메서드가 정의되어 있다. 참고로 Arrays 에 정의된 메서드는 모두 static이다. 배열의 복사 - copyOf(), copyOfRange() copyOf() 배열 전체를 복사해서 새로운 배열을 만들어 반환 copyOfRange() 배열의 일부를 복사해서 새로운 배열을 만들어 반환 - 지정된 범위의 끝은 포함되지 않는다. int[] arr = {0, 1, 2, 3, 4}; int[] arr2 = Arrays.copyOf(arr, arr.length); //arr2 = [0, 1, 2, 3, 4] int[] arr3 = Arrays.copyOf(arr, 3); //arr3 = [0, 1, 2] int[] arr4 = Arrays.copyOf(arr, 7);.. 2023. 2. 14.
반응형