Chapter. 5 - 스트림 활용 (5.5 ~ 5.9)5.5 리듀스“메뉴의 모든 칼로리의 합계를 구하시오", “메뉴에서 칼로리가 가장 큰 요리는?” 과 같이 스트림 요소를 조합해서 더 복잡한 질의를 표현하기 위한 메서드이다.즉, 리듀스는 스트림의 모든 요소를 반복 처리해서 값으로 결과를 도출해낼 때 사용한다.5.5.1 요소의 합for-each 반복문을 통한 리스트 내 숫자 요소의 총 합을 구하는 코드를 보자.val numbers = listOf(1, 2, 3, 4, 5)var sum = 0for (x: Int in numbers) { sum += x}위 코드를 보면 sum 변수 초기값 0리스트의 모든 요소를 조합하는 연산 “+”이렇게 2개의 파라미터를 사용했다. 이러한 리스트 연산의 총 합을 구하..
Chapter. 5 - 스트림 활용 (5.1 ~ 5.4)stream을 활용해서 외부반복을 내부반복으로 변경할 수 있다는걸 확인했다.// 내부반복val vegetarianDishes = mutableListOf()for (dish in menu) { if (dish.isVegetarian()) { vegetarianDishes.add(dish) }}// 내부반복val vegetarianDishes = menu.stream() .filter(Dish::isVegetarian) .collect(toList())위처럼 데이터를 어떻게 처리할지는 스트림 API가 관리하므로 편리하게 데이터 처리가 가능하다.스트림 API를 사용하면 내부 반복 뿐만아니라 병렬 실행 여부도 결정할 수 ..
Chapter. 4 - 스트림 소개컬렉션은 거의 모든 자바 애플리케이션에서 사용하는 기능으로 데이터를 그룹화하고 처리하는 자료구조이다.하지만 컬렉션은 아직 완벽한 모든 기능을 제공하지 못하는데 이를 보완하기 위해 나온것이 스트림이다.4.1 스트림이란?스트림은 Java 8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형으로 데이터를 처리하는 임시 구현 코드 없이 질의를 통해 컬렉션 데이터를 처리할 수 있다.예제 데이터class Dish( val name: String = "", val calories: Int = 0)val menu = listOf( Dish("Java", 100), Dish("Kotlin", 200), Dish("C++", 300), Dish("C..
Chapter. 3 - 람다표현식 (3.5 ~ 3.7)3.5 형식 검사, 형식 추론, 제약람다가 사용되는 코드의 문맥(콘텍스트)를 이용해서 람다의 형식(Type)을 추론할 수 있다.어떤 콘텍스에서 기대되는 람다 표현식의 형식을 대상 형식(target type)이라고 한다.3.5.1 형식검사예시private val inventory = listOf(Apple(RED, 100), Apple(GREEN, 90), Apple(RED, 150))***val heavierThan150g: List = filter(inventory) { apple: Apple -> apple.weight > 150 } // == filter(inventory, { apple: Apple -> apple.weight > 150 })*..
Chapter. 3 - 람다표현식 (3.1 ~ 3.4)깔끔한 코드로 동작을 구현하고 전달하는 Java 8의 새로운 기능인 람다 표현식람다표현식을어떻게 만드는건지어떻게 사용하는건지어떻게 코드를 간결하게 만들 수 있는지확인한다.이와 함께인터페이스형식 추론메서드 참조기능을 확인한다.3.1 람다란?람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한것.이름은 없지만 파리미터 리스트, 바디, 반환 타입, 발생 가능한 예외 목록을 가질 수 있다.람다의 특징익명 - 일반적인 메서드와 다르게 이름이 없다.함수 - 메서드처럼 특정 클래스에 종속되지 않아 함수라고 불린다.전달 - 람다 표현식을 메서드 인수로 전달하거나 변수로 저장이 가능하다.간결성 - 익명 클래스처럼 쓸데없는 코드를 구현할 필요가 없다.→ 람다가 ..
Chapter. 2 - 동작 파리미터화(behavior parameterization) 코드 전달요구사항이 계속 변하는 상황녹색 사과를 모두 찾고싶어요.150그램 이상인 사과를 모두 찾고 싶어요.150그램 이상이면서 녹색인 사과를 모두 찾고 싶어요.100그램 이상이면서 빨간색인 사과를 모두 찾고 싶어요.…위와같이 변화하는 요구사항을 파라미터화하여 여러 다른 동작을 할 수 있도록 하는 것이 동작 파라미터화이다.Behavior parameterization is the ability of a method to take multiple different behaviors as parameters and use them internally to accomplish different behaviors.변화하는 요..
Chapter. 1 - Java 8-11에서의 변화 요약1. 자바가 멀티코어 병렬성을 더 쉽게 이용할 수 있도록 진화한 과정과 개념자바 8 설계의 밑바탕을 이루는 3가지 프로그래밍 개념스트림 처리스트림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임스트림 API는 파이프라인을 만드는데 필요한 많은 메서드를 제공4~7장에서 정리메서드에 코드 전달 - 동작 파리미터화(behavior parameterization)연산의 동작을 매개변수화하여 코드로 전달할 수 있다특정 정렬 동작을 코드로 전달받아서 처리하는 개념2~4장에서 정리병렬성을 공짜로 얻을 수 있다공유되지 않는 가변 데이터, 메서드, 함수 코드를 다른 메서드로 전달하는 두가지 기능은 함수형 프로그래밍* 패러다임의 핵심적인 사항18~19장..
객체지향 프로그래밍 패러다임 대표 프로그래밍 패러다임으로 절차지향 프로그래밍 객체지향 프로그래밍 함수형 프로그래밍 3가지가 있다. 이 중 절차지향은 시대에 뒤떨어져 있고, 함수형은 일부 비지니스에서 활용되고 있으나 객체지향을 대체하기에는 한계가 있다. 객체지향 프로그래밍이 현시점에 가장 대중적인 프로그래밍 패러다임인 것이 확실하다. 2.1 객체지향이란 무엇인가? 개발자라면 캡슐화, 추상화, 상속, 다형성 이라는 객체지향의 4가지 특성에 대해 알고 있을 것이다. 하지만 객체지향의 개념은 그 이상을 포함한다. 이제부터 각 개념에 대해 자세히 알아보겠다. 2.1.1 객체지향 프로그래밍과 객체지향 프로그래밍 언어 객체지향 프로그래밍에는 클래스와 객체라는 기본적이지만 매우 중요한 두 가지 개념이 있다. Java,..
디자인 패턴의 아름다움 - 왕정 지음 간략 목차 chapter 1 _ 고품질 코드 문제 정의 및 기준 7가지 (유지 보수성, 가독성, 확장성, 간결성, 유연성, 재사용성, 테스트 용이성) chapter 2 _ 객체지향 프로그래밍 패러다임 (캡슐화, 추상화, 상속, 다형성 등) chapter 3 _ 설계 원칙 (SRP, OCP 등) chapter 4 _ 코딩 규칙 (변수명, 주석 등) chapter 5 _ 리팩토링 기법 chapter 6 _ 생성 디자인 패턴 chapter 7 _ 구조 디자인 패턴 chapter 8 _ 행동 디자인 패턴 책의 목적 고품질의 코드를 작성할 수 있도록 돕는다. Chater 1 _ 개요 코드 설계 방법론을 배우기 전에 '고품질의 코드란 무엇인가' 같은 코드 품질과 관련되어 확실히..
스트림즈DSL 라이브러리 추가 kafka-streams를 추가한다. 강의에선 사용하는 버전이 2.5.0이라 해당 버전으로 하였지만 자신이 사용하는 버전에 맞게 설치하면 된다. 필터링 스트림즈 애플리케이션 위처럼 filter() 메서드를 이용하여 stream_log 토픽에서 들어온 메시지 키 또는 값에 대하여 원하는 조건에 맞게 처리하도록 할 수 있다. filter() 메서드는 스트림즈DSL에서 사용 가능한 필터링 스트림즈 프로세서이다. 예로 간단하게 로그의 value 문자열의 길이가 일정길이 이상인 경우만 값을 취하는 필터링 코드를 작성할 수 있다. 코드 private static String APPLICATION_NAME = "streams-filter-application"; private stati..
카프카 스트림즈 카프카에서 공식적으로 지원하는 라이브러리로, 토픽에 적재된 데이터를 실시간으로 변환하여 다른 토픽에 적재하는 라이브러리이다. 스트림즈 애플리케이션 또는 카프카 브로커의 장애가 발생하더라도 Exactly Once를 보장할 수 있도록 장애 허용 시스템 (fault tolerant system)을 가지고 있어서 데이터 처리 안정성이 매우 뛰어나다. 만약 토픽에 있는 데이터를 실시간 스트림 처리 필요가 있다면 스트림즈 애플리케이션을 개발하는 것을 1순위로 고려하는 것이 좋다! 프로듀서와 컨슈머를 조합하지 않고 스트림즈를 사용하는 이유 스트림 데이터 처리에 있어 필요한 다양한 기능을 스트림즈 DSL로 제공하기 때문이다. 이에 필요한 프로세서 API를 사용하여 쉽게 코드로 구현이 가능하다는 장점이 ..
변수를 비공개로 정의하는 이유는? 남들이 변수에 의존하지 않게 만들고 싶어서이다. 충동, 변덕 등으로 변수 타입이나 구현을 마음대로 바꾸고 싶어서이다. 그렇다면 왜 많은 프로그래머는 조회/수정 함수를 당연하게 public 공개 함수를 통해 비공개 변수를 외부에 노출할까? 자료 추상화 첫번째 예제 2차원 점을 표현하는 두 클래스를 비교해보자. 하나는 구현을 외부에 노출하고, 하나는 구현을 완전히 숨긴다. class Point { var x: Double = 0.0 var y: Double = 0.0 } --- interface Point { fun getX(): Double fun getY(): Double fun setCartesian(x: Double, y: Double) fun getR(): Doub..
- Total
- Today
- Yesterday