본문 바로가기

분류 전체보기

(9)
Item 35: Consider defining a DSL for complex object creation Kotlin의 기능들은 Domain Specific Language (DSL)을 만드는 데에 도움을 준다. 이러한 DSL은 복잡한 object 혹은 계층적인 구조의 object를 만들 때 유용하다. 이것들은 정의하기는 쉽지 않지만, 한 번 정의해두면 보일러플레이트나 복잡도를 없애주고 개발자의 의도를 명확하게 드러내준다. DSL을 사용하는 다양한 예시가 있지만, 그 중 많이 사용하는 Gradle DSL을 Gradle configuration을 정의할 때 사용할 수 있다. 복잡하고 계층적인 데이터 구조를 만드는 것이 DSL로 더 쉬워졌다. DSL에서도 코틀린이 제공하는 모든 것들을 사용할 수 있고, Groovy와는 다르게 type-safe하다. 자기만의 DSL 정의하기 DSL을 만들기 전에 함수 타입의 개념..
Item 28: Specify API stability 매번 다른 인터페이스와 마주하게 된다면 어렵고 힘들 것이다. 이는 프로그래밍에도 똑같다. 그래서 안정적이고 표준적인 Application Programming Interface (API)가 필요하다. 1. API가 바뀌고 개발자들이 update를 받으면, 그들의 코드를 수동으로 수정해야한다. 이 API에 여러 의존적인 요소들이 많으면 문제가 될 가능성이 높다. 외부 라이브러리로 제공될 경우 어디서 어떻게 사용하는지 모르기 때문에 힘들다. 유저 입장에서도 라이브러리의 API가 조금 바뀌면 사용하는 코드의 많은 곳을 수정해야할 수도 있다. 유저가 이러한 변화를 꺼리면 예전 버전을 오랫동안 사용하게 된다. 오래된 버전을 사용하게 되면 나중에는 업데이트를 하는 것이 점점 더 어려워지는 악순환으로 이어진다. 2...
Item 21: Use property delegation to extract common property patterns 코드 재사용을 지원하도록 코틀린이 소개한 한 가지 새로운 기능은 Property delegation이다. 이를 사용한 두 가지 예시를 살펴보자. 첫 번째로 코틀린에서는 stdlib 내부에 lazy라는 함수가 있다. 이것은 lazy property pattern을 구현한 property delegate를 return 한다. val value by lazy { createValue() } 이렇게 사용하면 value라는 property가 사용되는 시점에 createValue가 호출된 뒤에 초기화 된다. 두 번째는 observer 패턴이다. 안에 있는 데이터가 바뀌면 그에 맞춰서 item들을 다시 그려야 하는 상황이 있거나 모든 변화에 대한 로그를 남겨야한다고 생각해보면 stdlib의 observable 패턴을..
PropTypes https://jistol.github.io/frontend/2018/12/03/react-proptypes/ (React) PropTypes 사용방법과 종류 · Jistol Github Page (React) PropTypes 사용방법과 종류 03 Dec 2018 | es6 react javascript React Component의 prop값을 검증하기 위해 PropTypes를 이용하여 값을 지정할 수 있습니다. React v15.5부터 다른 패키지로 변경되었는데 ‘prop-types’라이브러리를 사용하라고 권고하고 있습니다. 사용방법 import React, { Component } from 'react'; import PropTypes fr jistol.github.io https://medium..
Apache Kafka https://epicdevs.com/17 [Apache Kafka] 1. 소개및 아키텍처 정리 Apache Kafka(아파치 카프카)는 LinkedIn에서 개발된 분산 메시징 시스템으로써 2011년에 오픈소스로 공개되었다. 대용량의 실시간 로그처리에 특화된 아키텍처 설계를 통하여 기존 메시징 시스템보다 우수한 TPS.. epicdevs.com https://medium.com/@umanking/%EC%B9%B4%ED%94%84%EC%B9%B4%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9D%B4%EC%95%BC%EA%B8%B0-%ED%95%98%EA%B8%B0%EC%A0%84%EC%97%90-%EB%A8%BC%EC%A0%80-data%EC%97%90-%EB%8C%80%ED..
비동기처리 - Future의 종류 ListenableFuture Google이 개발한 guava 오픈소스 라이브러리에 포함되어 있다. Executor에 task를 제출하고, 돌려 받는 Future 타입의 종류 중 하나이다. (기존의 Executor 대신 ListeningExecutorService를 사용한다.) Callback method를 생성해서 task가 성공했을 때, 실패했을 때의 작업을 미리 지정해놓을 수 있다. 이렇게 Callback method를 생성하는 것은 Futures를 사용하는 것과 ListenableFuture의 addListener 두 가지가 있다. ListeningExecutor와 task 생성 ListeningExecutorService executor = MoreExecutors.listeningDecorat..
비동기 처리 - ExecutorService Executor란? 쓰레드풀을 구현한 구현체. Executor를 선언하고 거기에 task를 등록하면 알아서 적절한 쓰레드를 사용해 작업을 처리한다. (단위작업 - Job 또는 Task, 여기서는 Task로 통일. 참고) Executor의 종류에는 여러 가지가 있지만 여기서는 ExecutorService에 대해서 알아본다. 선언여기서 살펴볼 ExecutorService에서 사용할 쓰레드풀 종류는 3가지가 있다. 12345ExecutorService fixedExecService = Executors.newFixedThreadPool(2); //thread 2개ExecutorService CachedExecService = Executors.newCacahedThreadPool();ExecutorServic..
[퀘스트] 추적! 특종을 찾아서 부서진 빙하의 섬 퀘스트를 진행하다보면 오염 원인을 찾다가 위장한 직원을 찾는 퀘스트가 있습니다. 마나 흐름 탐지기를 써서 찾는건데 아무 힌트도 없어서 그냥 계속 바닥에 터뜨릴 수 밖에 없는데 퀘스트마다 다를 수는 있지만 저는 여기였습니다. 첫번째는 뼈모양 근처 두번째는 커다란 뼈 앞 잡초 근처 세번째는 폭포수 아래 혹시 사람마다 다르면 알려주세요!