목록Language (49)
devseop08 님의 블로그
고차 함수: 람다를 파라미터 반환값으로 사용10.1. 다른 함수를 인자로 받거나 반환하는 함수 정의: 고차 함수고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수다.코틀린에서는 람다나 함수 참조를 사용해 함수를 값으로 표현할 수 있다.고차 함수를 사용하는 법에 더해 이제는 고차 함수를 정의하는 방법을 살펴본다.고차 함수를 정의하려면 함수 타입을 먼저 알아야 한다.10.1.1 함수 타입은 람다의 파라미터 타입과 반환 타입을 지정한다.람다를 인자로 받는 함수를 정의하려면 먼저 람다 파라미터의 타입을 어떻게 선언할 수 있는지 알아야 한다. (코틀린 타입 중 함수 타입이라는 것이 있고, 이 함수 타입을 어떻게 선언할 수 있는지 알아야 한다. )파라미터 타입을 정의하기 전에 더 단순한 경우로 람다를 로컬..
프로그래밍 언어의 주요 목표는 메시지를 명확하고, 안정적인 방식으로 전달하는 것무엇보다 의도가 명확하게 전달돼야 한다.개발팀과 도메인 전문가가 공유하고 이해할 수 있는 코드는 생산성과 직결도메인 전용 언어로 애플리케이션의 비즈니스 로직을 표현함으로 이 문제를 해결 가능DSL은 범용이 아니라 특정 도메인을 대상으로 만들어진 특수 프로그래밍 언어다.Maven, Gradle, Ant => 빌드 과정을 표현하는 DSLHTML은 웹 페이지 구조를 정의하도록 특화된 언어SQL 언어같은 종류의 DSL을 외부적이라 하는데, 이는 데이터베이스가 텍스트로 구현된 SQL 표현식을 파싱하고 평가하는 API를 제공하는 것이 일반적이기 때문이다.menu.stream() .filter(d -> d.getCalories() 위..
람다 표현식을 이용해 가독성과 유연성을 높이기 위한 코드 리팩터링람다 표현식으로 전략, 템플릿 메서드, 옵저버, 팩토리 등의 객체지향 디자인 패턴을 어떻게 간소화 시킬지람다 표현식과 스트림 API를 사용하는 코드를 테스트하고 디버깅하는 방법9.1 가독성과 유연성을 개선하는 리팩터링9.1.1 코드 가독성 개선람다, 메서드 참조, 스트림을 황용해서 코드 가동성 개선 예제 3가지익명 클래스를 람다 표현식으로 리팩터링람다 표현식을 메서드 참조로 리팩터링명령형 데이터 처리를 스트림으로 리팩터링9.1.2 익명 클래스를 람다 표현식으로 리팩터링익명 클래스는 코드를 장황하게 만들고 쉽게 에러를 일으킨다.람다 표현식으로 간결하고 가독성이 좋은 코드를 만들 수 있다.Runnable r1 = new Runnable() { ..
중첩 클래스와 중첩 인터페이스객체지향 프로그래밍에서 클래스들은 서로 긴밀한 관계를 맺고 상호작용어떤 클래스는 여러 클래스와 관계를 맺지만 어떤 클래스는 특정 클래스와 관계를 맺는다.클래스가 여러 클래스와 관계를 맺는 경우에는 독립적으로 선언하는 것이 좋으나,클래스가 특정 클래스와 관계를 맺을 경우에는 해당 클래스 내부에 특정 클래스를 선언하는 것이 좋다중첩 클래스중첩 클래스란 클래스 내부에 선언한 클래스를 말한다.중첩 클래스를 사용하면 두 클래스의 멤버들을 서로 쉽게 접근할 수 있고, 외부에는 불필요한 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있는 장점이 있다.class ClassName { class NestedClassName { }}중첩 클래스의 분류중첩 클래스는 클래스 내부에 ..
C++에는 두 가지 종류의 상수가 있다. 리터럴과 심볼릭이 그것이다.리터럴 상수기본 자료형의 값을 직접 표현한 것을 리터럴이라고 한다. 리터럴은 그 값을 프로그램에서 바꿀 수 없으므로 상수에 해당한다.리터럴은 코드에 직접 삽입한 값이다. 이 값은 변경할 수 없으므로 '상수'다.정수형 리터럴의 표현실수형 리터럴의 표현숫자 리터럴 접미사매직 넘버int value = variable * 30위 코드에서 30과 같은 숫자를 매직 넘버라고 한다.매직 넘버란 컨텍스트가 없는 코드 중간에서 하드 코딩된 리터럴(일반적으로 숫자)을 말한다.매직 넘버를 사용하는 것은 나쁜 습관: 매직 넘버가 무엇에 사용되는지에 대한 컨텍스트가 없고 나중에 값을 바꿔야 할 경우 문제 발생심볼릭 상수매직 넘버를 사용하는 대신 심볼릭 상수를 ..
데이터를 어떤 조건 함수에 따라 걸러내거나, 데이터를 그룹화하여 나누거나, 컬렉션 아이템을 다른 것으로 변환하는 등의 일반적인 컬렉션 접근 패턴을 표준 라이브러리 함수와 람다를 조합해 표현할 수 있다.함수형 스타일로 컬레션 다루기와 컬렉션 연산을 지연시켜 수행하기 위한 시퀀스를 알아보자코틀린에서 컬렉션 연산을 즉시 실행하는 방법과 지연 실행하는 방법을 비교6.1 컬렉션에 대한 함수형 API6.1.1 원소 제거와 변환 : filter(추출)와 map(변환)data class Person(val name:STring, val age:Int)filter함수는 컬렉션을 순회하면서 주어진 람다가 true를 반환하는 원소들만 모은다fun main(){ val people = listOf(Person("Alic..
8.1 컬렉션 팩토리자바 9에서는 작은 컬렉션 객체를 쉽게 만들 수 있는 몇 가지 방법을 제공한다.왜 이와 같은 기능이 필요한 지 살펴보고 새 팩토리 메서드를 사용하는 방법을 알아본다.자바에서 적은 요소의 리스트를 만드는 일반적인 방법List friends = new ArrayList();friends.add("Raphael");friends.add("Olivia");friends.add("Thibaut");Arrays.asList() 팩토리 메서드 이용List friends = Arrays.asList("Raphael", "Olivia", "Thibaut");고정 크기의 리스트를 만들었으므로 요소를 갱신할 수는 있지만 새 요소를 추가하거나 요소를 삭제할 순 없다.요소를 추가하거나 삭제하려 하면 Unsu..
스트림으로 데이터 컬렉션 관련 동작을 얼마나 쉽게 병렬로 실행할 수 있는지 알아보자스트림을 이용하면 순차 스트림을 병렬 스트림으로 자연스럽게 바꿀 수 있는데 이것이 어떻게 가능한 것인지와 포크/조인 프레임워크와 내부적인 병렬 스트림 처리는 어떤 관계가 있는지 살펴보자여러 청크를 병렬로 처리하기 전에 우선 병렬 스트림의 요소를 여러 청크로 분할하는 방법에 관해 알아보자7.1 병렬 스트림7.1.1 순차 스트림을 병렬 스트림으로 변환하기컬렉션에 parallelStream 메서드를 호출하면 병렬 스트림이 생성된다.병렬 스트림이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림을 말한다.병렬 스트림을 이용하면 모든 멀티코어 프로세서가 각각의 청크를 처리하도록 할당할 수 있다.순차 리듀..