JAVA 86

백준 2869 문제풀이

/* 문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B 4 5 1 6 -> 2 100 99 1000000000 -> 999999901 */ public class P2869 { /** * 문제풀이 방법 1 * @param up ..

JAVA/알고리즘 2021.05.04

2장 아이템6 - 불필요한 객체 생성을 피하라

기존 객체를 재사용해야 한다면 새로운 객체를 만들지 말것 단, 방어적 복사(불필요한 객체 생성을 하지 않음)에 실패하면 언제 터져 나올지 모르는 버그와 보안 구멍으로 이어 지지만,불필요한 객체 생성은 그저 코드 형태와 성능에만 영향을 준다. String 예시 아래 코드가 반복문이나 자주 호출되는 메서드 내에 있으면 쓸데없는 String 인스턴스 수가 만들어진다. String s = new Strin("test"); 위 코드를 개선 String s = "test"; Boolean 예시 Boolean a = new Boolean("true"); // 팩터리 메서드로 객체를 재사용한다 Boolean b = Boolean.valueOf("true"); 위와 비슷한 코드로 Long도 있으니, 직접 확인해본다. 정..

2장 아이템2 - 생성자에 매개변수가 많다면 빌더를 고려하라

핵심 정리 생성자나 정적팩터리가 처리해야할 매개변수가 많다면 빌더 패턴을 선택하는게좋다. 매개변수 중 다수가 필수가 아니거나 같은 타입이면 특히 더 그렇다. 빌더는 점층적 생성자 보다 클라이언트 코드를 읽고 쓰기가 훨씬 간결하고, 자바빈즈보다 월씬 안전하다. 점층적 생성자 패턴 (Telescoping Constructor Pattern) 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기 어렵다 public class NutntionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; public NutntionFacts(int serving..

Map Parallel (Map 병렬처리) 방법

Map은 Thread Safe 하지 않기 때문에 병렬처리가 되지 않는다. 이를 해결하기 위해 Map.entrySet을 호출하여 처리한다. 병렬 Stream으로 선언했으나 forEach 구문 내에서는 단일 쓰레드로 처리된다. (Map 때문) historyList.parallelStream() .collect(Collectors.groupingBy(History::getBbsId)) // 조회환 history 데이터를 bbsId 별로 그룹핑 .forEach((key, value) -> { // Article 테이블 데이터 inQuery 조회 // ArticleId만 추출 List articleIdList = value.stream().map(History::getArticleId).collect(Collec..

JAVA/Java Stream 2021.03.30

1장 - 용어 정리

자바가 지원하는 타입(Type) : 자료형 참조 타입 (reference type) : 객체 interface : 인터페이스 class : 클래스 array : 배열 primitive : 기본타입 annotation : 인터페이스의 일종 enum : 열거 타입, 클래스의 일종 클래스의 멤버 field method member class member interface 메서드 시그니처 메서드 이름과 입력 매개변수(parameter)의 타입으로 이뤄지며, 반환값의 타입은 시그니처에 포함되지 않는다. implement : 클래스가 인터페이스를 구현한다 extend : 클래스(인터페이스)가 다른 클래스(인터페이스)를 확장한다. 공개 API (exported API) : API(Application Programm..

2장 아이템1 - 생성자 대신 정적 팩터리 메서드를 고려하라

핵심 정리 정적 팩터리 메서드와 public생성자는 각자의 쓰임새가 있으니 상대적인 장단점을 이 해하고 사용하는 것이 좋다. 그렇다고 하더라도 정적 팩터리를 사용하는 게 유리한 경우 가 더 많으므로 무작정 publk 생성자를 제공하던 습관이 있다면 고치자 정적 팩터리 메서드 예제 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } 장점 고유한 이름을 가질수 있다. 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. 호출될 때마다 새로운 인스턴스를 생성하지 않아도 된다. 불필요한 객체 생성을 피할 수 있다. 이 덕분에 불변 클래스(immutable class)는 인스턴스를 미리 만들어 놓거나 새로..