JAVA 11

자바8 - 8. 리팩토링, 테스팅, 디버깅

리팩토링, 테스팅, 디버깅 1. 가독성과 유연성을 개선하는 리팩토링 간결성, 유연성 1.1 코드 가독성 개선 가독성이 좋다 : 어떤 코드를 다른 사람도 쉽게 이해할 수 있다. 자바8에서 제공하는 코드 가독성에 도움을 주는 기능 코드의 장황함을 줄여서 쉽게 이해할 수 있는 코드를 구현할 수 있다. 메서드 레퍼런스와 스트림 API를 이용해서 코드의 의도를 쉽게 표현할 수 있다. 1.2 익명 클래스를 람다 표현식으로 리팩토링하기 ex) 익명 클래스 사용하는 이전 코드 Runnable r1 = new Runnable() { public void run() { System.out.println("Hello"); } }; ex) 람다 사용 Runnable r2 = () -> System.out.println("He..

JAVA 2018.10.02

자바8 - 7. Stream - 4

병렬 데이터 처리와 성능 포크/조인 프레임워크 스트림을 이용하면 순차 스트림을 병렬 스트림으로 자연스럽게 바꿀 수 있음. 1. 병렬 스트림 컬렉션에 parallelStream을 호출하면 병렬 스트림이 생성 ex) 모든 숫자 합계 메서드 public static long sequentialSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .reduce(0L, Long::sum); } ex) 전통 자바 예시 public static long iterativeSum(long n) { long result = 0; for( long i = 1L; i i +1) .limit(n) .parallel() .reduce(0L, Long::sum); } 병렬 ..

JAVA 2018.10.02

자바8 - 6. Stream - 3

스트림으로 데이터 수집 ex) 통화별로 트랜잭션을 그룹화한 코드(명령형 버전) 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, transactionsForCurrency);..

JAVA 2018.10.02

자바8 - 5. Stream - 2

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.getCa..

JAVA 2018.10.02

자바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.getCa..

JAVA 2018.10.02

자바8 - 3. 람다

Lambda 메서드로 전달할 수 있는 익명 함수를 단순화한 것. 특징 익명 : 이름 없는 메서드 함수 : 메서드처럼 특정 클래스에 종속되지 않음. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함. 전달 : 람다 표현식을 인수로 전달하거나 변수로 저장 간결성 : 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요X ex) 기존 코드 Comparator byWeight = new Comparator() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } };ex) 개선한 람다 코드 Comparator byWeight = (Apple a1, Apple a2) -..

JAVA 2018.10.02

자바8 - 2. 동적 파라미터화

Behavior Parameterization 자주 바뀌는 요구사항에 효과적 대응 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미. ex) 어떤 기준으로 사과를 분류하는 메서드 (기존 방식) public static List filterApples (List inventory, String color, int weight, boolean flag) { List result = new ArrayList(); for(Apple apple : inventory) { if((flag && apple.getColor().equals(color)) || (!flag && apple.getWeight() > weight)) { result.add(apple); } } return result; } Lis..

JAVA 2018.10.02

HashMap vs HashTable vs ConcurrentHashMap

기본적으로 모두 형태의 자료구조이며, Key값의 중복을 허용하지 않고, Value의 중복을 허용한다. 1. HashMapJava 1.2부터 생겼으며 기존 HashTable의 Synchronized를 풀어 쓴 맵이다.동기화가 되어있지 않아 보통 단일 쓰레드에 사용되며, Java 1.8부터는 알고리즘을 개선하여 속도가 더 빨라졌다. 2. HashTableJava 1.0 ~ Java 1.1에 사용됐다.Synchronized가 되어있다. 3. SynchronizedMapMap을 Wrapping하여 HashTable처럼 동기화 시키는 방법이다.HashTable에 비해 속도가 빠르며, 보통 멀티 쓰레드 환경에서 사용한다. 4. ConcurrentHashMapJava 1.5 Concurrent 패키지가 생기면서 만들..

JAVA 2017.12.31

CheckedException vs UnCheckedException

면접에서 질문으로 받아 당황했던 기억이 있어 글을 작성하며 공부를 하게 됐다.명칭으로 유추를 해 보면 체크를 할 수 있는지 없는지에 대한 예외처리 같다.그래서 공부했다... Exception예상할 수 있는 예외 프로그래머가 만드는 예외 CheckedException프로그래머가 사용하는 라이브러리, 코드 등에서 new 생성자를 이용해 만들어졌고, 해당모듈을 사용하는 오브젝트에게 여기서 예외가 발생할 수 있으니 throws 키워드를 이용해 상위 caller에게 예외를 전달하든, 네가 확인해서 처리하든지 하라는 확인이 필요한 예외이다.컴파일 타임에 해당 예외가 체크되어야 하고, 프로그래머에게 예외를 다루거나 throws exception 같은 메소드를 선언할 것을 요구한다. UnCheckedException ..

JAVA 2017.06.16

JAVA - 로그함수 (밑이 2인 로그 함수)

자바 api에서 제공해주는 로그함수는 3가지 뿐입니다.그 중에는 아쉽게도 밑을 직접 설정할 수 있는 함수가 없기때문에 직접 만들어야 합니다.간단하게 수학 식을 알고 있다면 문제 없이 만들 수 있겠지만... 역시 까먹기 마련이죠.저 역시 갑자기 사용해야 하는데 문득 생각이 나지 않아 이렇게 포스트를 하고 있네요. 하하; 자바 api에는 Math.log()와 Math.log10() 함수가 있습니다.이 함수를 사용하여 밑이 2인 로그함수를 만들 수 있습니다. baseLog(수, 밑) 첫 번째 방법.static double baseLog(double x, double base) {return Math.log10(x) / Math.log10(base);} 두 번째 방법.static double baseLog(do..

JAVA 2015.11.26