본문 바로가기

2018/10

(9)
Flutter 시작하기 for Mac 구글에서 열심히 밀고 있는 (개인적인 생각..) Flutter를 다뤄보기로 했다.Android와 iOS를 하나의 프레임워크로 만들 수 있다는 점에서 기존 네이티브 앱 보다 좋은 이점을 가지고는 있으나..역시 새로운 언어를 배우는 것은... 흥미롭다 (응?) Flutter은 공식 홈페이지를 제외하고는 아직 자료가 그렇게 풍부하지 않은 것 같다. (이것 또한 개인 생각..)우선은 설치부터 알아보기로.. 이 글의 설치 기준은.. Mac OS윈도우는 열심히 공식 홈페이지를... 1. Flutter SDK 설치하기Flutter 공식 홈페이지에서 제공하는 SDK를 설치한다. (https://flutter.io/setup-macos/)2. 압축된 파일을 받아왔기 때문에 압축을 해제한다.(설치 한 폴더에서 해도 좋고,..
비트코인 정리 이 페이지는 '비트코인, 블록체인과 금융의 혁신' 이라는 책을 보며 공부한 내용을 정리한 페이지입니다. 비트코인 중앙 장치 없이 P2P(Peer to Peer) 기반 분산 데이터베이스를 사용하며 256bit 해시 함수 알고리즘을 사용하는 디지털 화폐 * 돈이 아니라 분산화된 신뢰 네트워크 * 분산화된 시스템의 경우에도 회복력이 있고 중앙 권력이나 계급, 복잡한 역할 분담 없이도 복잡성이 새롭게 만들어지며 믿기 힘들 정도의 정교함이 생길 수 있다는 사실 가위개미(leafcutter ant) 무리의 행동양식 * 채굴자들은 평균 10분마다 누군가가 지난 10분동안 발생시킨 거래들에 대해 입증하고 채굴에 성공하는 경우 새로 생성된 비트코인으로 보상 받음. * 비트코인 프로토콜은 비트코인 공급량을 ..
자바8 - 8. 리팩토링, 테스팅, 디버깅 리팩토링, 테스팅, 디버깅 1. 가독성과 유연성을 개선하는 리팩토링 간결성, 유연성 1.1 코드 가독성 개선 가독성이 좋다 : 어떤 코드를 다른 사람도 쉽게 이해할 수 있다. 자바8에서 제공하는 코드 가독성에 도움을 주는 기능 * 코드의 장황함을 줄여서 쉽게 이해할 수 있는 코드를 구현할 수 있다. * 메서드 레퍼런스와 스트림 API를 이용해서 코드의 의도를 쉽게 표현할 수 있다. 1.2 익명 클래스를 람다 표현식으로 리팩토링하기 ex) 익명 클래스 사용하는 이전 코드 aidl Runnable r1 = new Runnable() { public void run() { System.out.println("Hello"); } }; ex) 람다 사용 aidl Runnable r2 = () -> System.o..
자바8 - 7. Stream - 4 병렬 데이터 처리와 성능 포크/조인 프레임워크 스트림을 이용하면 순차 스트림을 병렬 스트림으로 자연스럽게 바꿀 수 있음. 1. 병렬 스트림 컬렉션에 parallelStream을 호출하면 병렬 스트림이 생성 ex) 모든 숫자 합계 메서드 aidl public static long sequentialSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .reduce(0L, Long::sum); } ex) 전통 자바 예시 aidl public static long iterativeSum(long n) { long result = 0; for( long i = 1L; i i +1) .limit(n) .parallel() .reduce(0L, Long::s..
자바8 - 6. Stream - 3 스트림으로 데이터 수집 ex) 통화별로 트랜잭션을 그룹화한 코드(명령형 버전) ```aidl Map transactionByCurrencies = new HashMap(); for (Transaction transaction : transactions) { Currency currency = transaction.getCurrency(); List transactionsForCurrency = transactionsByCurrencies.get(currency); if(transactionsForCurrency == null) { transactionsForCurrency = new ArrayList(); transactionByCurrencies.put(currency, transactionsForCu..
자바8 - 5. Stream - 2 스트림 활용 필터링 프레디케이트 필터링 > 프레디케이트를 인수로 받아 일치하는 모든 요소를 포함하는 스트림 반환. ex) 프레디케이트 필터링 예시 aidl List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .collect(toList()); 고유요소 필터링 > 고유 요소로 이뤄진 스트림을 반환하는 distinct 메서드 지원. ex) distinct 필터링 예시 aidl // 중복 없이 짝수만 추출. List numbers = Arrays.asList(1,2,1,3,3,2,4); numbers.stream() .filter(i -> i % 2 == 0) .distinct() .forEach(System.out::println); 스트림 축소..
자바8 - 4. Stream - 1 Stream 멀티 스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있음. ex) 저 칼로리 요리 반환 후 칼로리 기준으로 요리 정렬 (기존 코드) ``` // 400칼로리보다 작은 요리 선택 List lowCaloricDishes = new ArrayList(); for(Dish d: menu) { if(d.getCalories() < 400) { lowCaloricDishes.add(d); } } // 익명 클래스로 요리 정렬 (칼로리 순) Collections.sort(lowCaloricDishes, new Comparator() { public int compare(Dish d1, Dish d2) { return Integer.compare(d1.getCalories(), d2.g..
자바8 - 3. 람다 Lambda 메서드로 전달할 수 있는 익명 함수를 단순화한 것. 특징 1. 익명 : 이름 없는 메서드 2. 함수 : 메서드처럼 특정 클래스에 종속되지 않음. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함. 3. 전달 : 람다 표현식을 인수로 전달하거나 변수로 저장 4. 간결성 : 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요X ex) 기존 코드 Comparator byWeight = new Comparator() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } }; ex) 개선한 람다 코드 Comparator byWeight = (Apple a1..