본문 바로가기

프로그래밍/Book

(11)
[코틀린 인 액션] 2장. 코틀린 기초 함수와 변수 코틀린 함수 기본구조 fun 함수이름 (파라미터 목록) : 반환타입 { return 함수 본문 } // 아무런 값을 반환하지 않는 함수 fun printHelloWorld() { println("Hello World") } // 블럭문이 아닌 식으로 정의 가능 fun printHelloWorld() = println("Hello World") // if는 문장이 아니고 식(expression)이다. fun sum(a: Int, b: Int): Int { return if (a > b) a else b } // 식이 본문인 함수 fun maxNum2(a: Int, b: Int) = if (a > b) a else b 반환 타입을 생략할 수 있는이유는 정적 타입 지정 언어여서 컴파일러가 타입추론..
[코틀린 인 액션] 1장. 코틀린이란 무엇이며, 왜 필요한가? 코틀린 주요 특성 정적 타입 지정 언어 자바와 마찬가지로 정적 타입 지정 언어 성능 런타임에 어떤 메서드를 호출할지 알아내지 않아도되 메서드 호출이 빠름 신뢰성 컴파일러가 검증하기 때문에 오류로 중단될 가능석이 적음 유지보수성 도구지원 코틀린의 철학 실용성 연구를 위한 언어가 아닌 실제 문제를 해결하기 위해 만들어진 실용적인 언어 이미 성공적으로 검증된 해법과 기능에 의존함 간결성 코드가 간결하여 파악하기 쉬움 getter, setter, 생성자 파라미터를 필드에 대입하는 로직 등을 묵시적으로 제공 안전성 JVM 기반으로 동작하여 이미 상당한 안전성을 보장받음 상호운용성 자바와 매우 높은 호환성을 가짐 참고문서 코틀린 인 액션 - 드미리 제로프, 스트나 이코바
[모던 자바 인 액션] 13장. 디폴트 메서드 디폴트 메서드란? 하위 호환성을 유지하면서 API를 바꿀 수 있도록 추가된 기능. 디폴트 메서드를 사용하면 바뀐 인터페이스에서 기본 구현을 제공하므로 기존의 코드를 고칠 필요가 없게 해준다. default라는 키워드로 시작하며 다른 클래스에 선언된 메서드처럼 바디를 포함한다. 따라서 해당 인터페이스를 상속받는 구현체들은 디폴트 메서드의 구현도 상속받게 되어 하위 호환성이 유지되는 것이다. 추상 클래스와 인터페이스의 차이점 클래스는 하나의 추상 클래스만 상속받을 수 있지만 인터페이스는 여러 개를 구현할 수 있다. 추상 클래스의 인스턴스 변수로 공통상태를 가질 수 있지만 인터페이스는 인스턴스 변수를 가질 수 없다. 디폴트 메서드 활용 패턴 선택형 메서드 인터페이스를 구현하는 클래스에서 필요 없는 메서드의 내..
[모던 자바 인 액션] 9장. 리팩터링, 테스팅, 디버깅 코드 가독성 개선 코드 가독성은 다른 사람이 보더라도 쉽게 이해할 수 있음을 의미. 코드 가독성을 개선한다는 것은 구현한 코드를 다른 사람이 쉽게 이해하고 유지보수할 수 있게 만드는 것. 익명 클래스를 람다 표현식으로 리팩터링 익명클래스는 람다 표현식으로 리팩터링 할 수 있는데 익명 클래스의 장황함을 람다 표현식으로 간결하게 구현할 수 있다. 하지만 불가능한 경우도 있는데 아래와 같다. 익명 클래스에서 사용한 this와 super는 다른 의미를 가진다. 익명 클래스에서 this는 자기 자신, 람다는 람다를 감싸는 클래스를 가리킨다. 익명 클래스는 감싸고 있는 클래스의 변수를 가리킬 수 있지만 람다는 변수를 가릴 수 없다. int a = 123; Runnable r1 = ()->{ int a=2; //컴파..
[모던 자바 인 액션] 8장. 컬렉션 API 개선 컬렉션 팩토리 아래 방법은 정수의 리스트를 선언하는 방법이다. List nation = new ArrayList(); nation.add(1); nation.add(2); nation.add(3); nation.add(4); //Arrays.asList()사용시 고정크기의 리스트 List numbers = Arrays.asList(1,2,3,4); numbers.set(0,10); // 갱신 가능 numbers.add(5); //요소의 추가나 삭제 불가능 팩토리 메서드의 특징 요소 변경 불가 null 요소를 금지 Arrays.asList() 팩토리 메서드를 사용시 고정크기의 배열로 구현되어 있기 떄문에 UnsupportedOperationException을 발생시킨다. 리스트 팩토리 List.of()를 ..
[모던 자바 인 액션] 7장. 병렬 데이터 처리와 성능 병렬 스트림 컬렉션에 parallelSteram을 호출하면 병렬 스트림이 생성 병렬 스트림이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림으로 멀티코어 프로세서가 각각의 청크를 처리하도록 할당 순차 스트림을 병렬 스트림으로 변환하기 스트림에 parallel 메서드를 호출하면 기존의 함수형 리듀싱 연산이 병렬로 처리된다. public long parallelSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .parallel() .reduce(0L, Long::sum); } 순차 스트림에 parallel을 호출해도 스트림 자체에는 변화가 일어나지 않고 내부적으로 이후 연산이 병렬로 수행되야 한다는 Boolean 플래..
[모던 자바 인 액션] 6장. 스트림으로 데이터 수집 컬렉터란 무엇인가? 컬렉터 인터페이스 구현은 스트림의 요소를 어떤 식으로 도출할지 지정한다. 리듀싱과 요약 컬렉터로 스트림의 모든 요소를 하나의 결과로 합칠 수 있다. 스트림값에서 최대값 최소값 검색 Collectors.maxBy() 스트림의 최대값 계산 스트림 요소를 비교하는데 Comparator를 인수로 받음 Collectors.minBy() 스트림의 최소값 계산 스트림 요소를 비교하는데 Comparator를 인수로 받음 요약 연산 스트림에 있는 객체의 숫자 필드의 합계나 평균 등을 반환하는 연산 Collectors.summingInt() 객체를 int로 매핑하는 함수를 인수로 받음 int로 매핑된 요소의 총합 계산 summingLong(), summingDouble도 존재 Collectors.ave..
[모던 자바 인 액션] 5장. 스트림 활용 필터링 스트림의 요소를 선택하는 방법 filter: Predicate를 인수로 받아서 일치하는 모든 요소를 포함하는 스트림 반환 distinct: 고유 요소로 이루어진 스트림 반환(중복복을 제거하며 객체의 hashcode, equals로 결정) 스트림 슬라이싱 스트림의 요소를 선택하거나 스킵하는 방법 Predicate를 이용한 슬라이싱 자바 9 에서는 takeWhile, dropWhile 두가지의 새로운 메서드를 제공한다 TAKEWHILE 책 리스트가 최신순으로 정렬이 되어있다. List books = asList(new Book("2022신상책", "양승인", 2022, "IT"), new Book("이순신의 바다", "황현필", 2021, "History"), new Book("갈매기의 꿈", "리처..