Effective Java - item 44
·
PL/모던 자바 인 액션
표준 함수형 인터페이스를 사용하라 자바 표준 라이브러리에 여러 표준 함수형 인터페이스가 담겨있다. 따라서, 필요한 용도에 맞는게 이미 존재한다면, 직접 구현하지말고 표준 함수형 인터페이스를 사용하자. 총 43개의 인터페이스 중 대표적으로 기억해야할 기본 인터페이스 6개의 이름과 함수 시그니처는 다음과 같다. UnaryOperator: T apply(T t) BinaryOperator: T apply(T t1, T t2) Predicate: boolean test(T t) Function: R apply(T t) Supplier: T get() Consumer: void accept(T t) 이어서, 기본 인터페이스는 기본 타입으로 int, long, double로 각 3개씩 변형이 존재한다. 해당 기본 ..
Effective Java - item 42
·
PL/모던 자바 인 액션
익명 클래스보다는 람다를 사용하라 과거 자바는 추상 메서드 하나만 담은 인터페이스(현재의 함수형 인터페이스)를 사용해 함수의 타입을 표현했다. 이런 인터페이스의 인스턴스를 함수객체라 하였고 익명 클래스를 통해 함수 객체를 만들었다. 이는 과거 객체지향 디자인 패턴에는 충분한 방법이었다. 그러나, 함수형 프로그래밍이란 개념이 등장하며 익명클래스 방식은 코드가 너무 길기에 적합하지 않았다. 람다의 등장 자바 8 부턴 함수형 인터페이스의 인스턴스를 익명 클래스가 아닌 람다식을 사용해 만들 수 있게 되었다. 람다를 통해 훨씬 더 간결하게 코드를 만들고 어떤 동작을 하는지도 명확히 알 수 있었다. Collections.sort(words, (s1,s2)->Integer.compare(s1.length(),s2.l..
모던 자바 인 액션 스터디 - 3주차
·
PL/모던 자바 인 액션
이번 주는 지난 주에 이은 람다에 대한 마무리와 스트림에 대한 간단한 소개가 교재 내용의 주를 이룬다. 형식 검사, 형식 추론 제약 함수형 인터페이스가 존재한다면 람다 표현식을 구현할 수 있다. 그러나, 람다 표현식을 봤을때 어떤 함수형 인터페이스를 구현하는지는 알 수 없다. 어떻게 람다 표현식의 실제 형식을 파악할까? 1. 형식 검사 람다가 사용되는 컨텍스트를 통해 대상 형식을 확인할 수 있다. 대상 형식이란, 어떤 컨텍스트에서 기대되는 람다표현식의 형식을 의미한다. 아래 코드를 보자. List heavierThan150g = filter(inventory,(Apple apple) -> apple.getWeight()>150); 이러한 코드가 있을때 아래 5가지 과정을 거쳐 형식을 검사한다. 1. fi..
HashMap의 동작 구조
·
PL/모던 자바 인 액션
자, HashMap의 동작 구조에 대해 알아보자. HashMap vs HashTable 둘다 Java의 API의 이름이다. 또한 둘다 Map 인터페이스를 구현하고 있기에 제공하는 기능은 전반적으로 비슷하다. 다만 HashMap은 지속적으로 개선중에 있다는 점과 보조 해시 함수를 사용해 충돌을 덜 발생시킨다는 점에서 성능적인 면에서 유리하다. 아무튼! 둘다, key에 대한 해시값을 이용해 값을 저장하고 조회하며 동적으로 크기가 변하는 배열이라고 할 수 있다. 해시 분포 , 해시 충돌 완전한 해시함수란? X와 Y가 다를때, H(X)와 H(Y)의 값 다른 해시함수를 완전한 해시함수라고 한다. Boolean, Integer, Long, Double과 같은 객체는 완전한 해시함수 대상으로 삼을 수 있지만, Str..
Effectively final
·
PL/모던 자바 인 액션
Effectively final이란? final로 선언되지는 않았지만, 초기화된 이후 참조가 변경되지 않아 결과적으로 final처럼 동작하는 변수 자바의 익명클래스나 람다 표현식에서 식 외부에 있는 지역 변수를 참조할때는 반드시 final이거나 선언 후 참조가 변경되지 않는 effectively final이어야한다. 아래와 같이 final이 아닌 count를 익명 클래스에서 참조하면 다음과 같은 에러가 발생한다. 그렇다면 final은 알겠는데 Effectively Final은 무엇일까? 다음 조건을 만족하는 지역변수를 effectively final이라고 한다. - final로 선언되지 않았다. - 초기화 진행 후 다시 할당되지 않았다. - 전위, 후위에 증감 연산자가 존재하지 않는다. (++등) 객체의..
자바 컬렉션 프레임워크
·
PL/모던 자바 인 액션
이번 시간엔, 자바의 컬렉션프레임워크에 대해 알아보자. 아래 그림과 같이 Iterable객체를 상속받은 Collection을 기반으로 다양한 컬렉션들이 존재한다. 대표적으론 List, Set, Map, Queue가 있다. 아래 그림외에도, Map이라는 컬렉션 또한 존재하는데 해당 컬렉션은 로 이루어진 특별한 구조로 인해 별개로 구분한다. List 인터페이스 순서 개념이 있는 데이터의 집합을 의미함. 순서가 존재하며 데이터의 중복저장이 가능하다. 이를 구현한 구현체로는 ArrayList, LinkedList, Vector, Stack이 존재한다.(Stack도 리스트 기반인줄은 .. 몰랐다) ArrayList 내부적 배열을 기반한 단방향 포인터 구조로, 각 데이터의 인덱스가 존재한다. 내부적으로 배열을 이용..
모던 자바 인 액션 스터디 - 2주차
·
PL/모던 자바 인 액션
소프트웨어 엔지니어는 항상 소비자의 요구사항이 변화하는 환경에서 일을 한다. 이를 처리하는데 비용은 최소화하고, 새로운 기능은 쉽게 구현되어야한다. 이와 같이 자주 바뀌는 요구사항에 효과적으로 대응하기 위한 개념인 동작 파라미터화에 대해 알아보자. 동작 파라미터화란? 책에서는 동작 파라미터화를 '아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록'으로 정의한다. 메서드의 파라미터로 전달된 코드블록의 실행이 나중으로 미뤄지는 것이다. 즉, 전달된 동작 파라미터에 따라 메서드의 동작이 결정되는 것이다. 이를 통해 다음과 같은 일반적인 예를 실행할 수 있다. - 리스트의 모든 요소에 대해 '어떤 동작'을 수행할 수 있음 - 리스트 관련 작업을 끝낸 다음 '어떤 다른 동작'을 수행할 수 있음 - 에러가 발생시..
모던 자바 인 액션 스터디 - 1주차 PDF
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
모던 자바 인 액션 스터디 - 1주차
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
모던 자바 인 액션 - 시작하며
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
유쓰응
'PL/모던 자바 인 액션' 카테고리의 글 목록 (2 Page)