분류 전체보기50 분할 정복 기법 분할 정복 알고리즘 분할 정복은 분할과 정복 그리고 경우에 따라서 통합으로 나눠서 해결하는 것을 말한다. 주어진 문제를 부분으로 나눠서 해결하는 경우가 전체를 한번에 해결하는 경우보다 쉬워지는 성질을 이용한 케이스이다. 분할(Devide) : 해결할 문제를 여러 개의 작은 부분으로 나눔 정복(Conquer) : 나눈 작은 문제를 각각 해결 통합(Combine) : 해결된 해답을 모음 만약 N개의 동전중 무게가 가벼운 가짜 동전이 한개 있을때 이 가짜동전을 찾기위해서 한개씩 대조하는 방법을 사용하면 저울을 최소 1번, 최대 N/2번 사용해야 한다. 이는 시간도 많이 들고 비효율적이다. 가짜 동전을 더 효율적으로 찾기 위해서 분할 정복 기법을 사용할 수 있다. 가짜 동전을 찾기위해 하나의 동전씩만 저울에 올.. 2021. 5. 28. 더 자바(java 8) - CompletableFuture Concurrent 소프트웨어 동시에 여러 작업을 할 수 있는 소프트웨어 ex) 웹 브라우저로 유튜브를 보면서 키보드로 문서에 타이핑을 할 수 있다 ex) 녹화를 하면서 인텔리J로 코딩을 하고 워드에 적어둔 문서를 보거나 수정할 수 있다 Java에서 지원하는 Concurrent 프로그래밍 멀티프로세싱 멀티쓰레드 Java 멀디쓰레드 프로그래밍 Thread public class App { public static void main(String[] args) throws InterruptedException { MyThread myThread = new MyThread(); myThread.start(); } static class MyThread extends Thread { public void run(.. 2021. 5. 26. 더 자바(java 8) - Stream, Optional, Date Stream List names = new ArrayList(); names.add("Kang"); names.add("Min"); names.add("Hyeong"); Sequence of elements supporting sequential and parallel aggregate operations 데이터를 담고 있는 저장소(컬렉션)이 아니다 Funtional in nature, 스트림이 처리하는 데이터 소스를 변경하지 않는다 Stream stringNames1 = names.stream().map(String::toUpperCase); names.forEach(System.out::println); 스트림으로 처리하는 데이터는 오직 한번만 처리한다 Stream stringNames1 = name.. 2021. 5. 19. toMany 관계에서 필터링 걸기 새로운 회사 프로젝트를 하며 JPA를 도입하며 생겼던 이슈를 해결한 방법을 소개하려 한다. 프로젝트 개발 초기 기본적인 CRUD api들을 만들며 생겼던 일인데 당시 난 아래 코드처럼 조회 api에 여러 필터를 걸며 테스트하고 있었다. Team과 Member는 OneToMany 관계이다. @Test void test2() { QTeam team = QTeam.team; QMember member = QMember.member; JPAQueryFactory query = new JPAQueryFactory(em); List result = query.selectFrom(team) .join(team.members, member) .where(member.age.eq(10)) .fetch(); result... 2021. 5. 13. 더 자바(java 8) - 인터페이스의 변화 기본 메소드 (Default Method) 인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법 해당 인터페이스를 구현한 클래스를 깨뜨리지 않고 새 기능을 추가할 수 있다. 기본 메소드는 구현체가 모르게 추가된 기능으로 리스크가 있다. 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다. 반드시 문서화 할 것 (@implSpec 자바독 태그 사용) Object가 제공하는 기능 (equals, hashCode)는 기본 메소드로 제공할 수 없다. 인터페이스를 상속받는 인터페이스에서 다시 추상메소드로 변경할 수 있다. 인터페이스 구현체가 재정의 할 수도 있다. public interface Foo5 { void printName(); /* @ImplSpec 이 구현체는 getName()으로.. 2021. 5. 11. 더 자바(java 8) - 함수형 인터페이스와 람다 함수형 인터페이스 (Functional Interface) 추상 메소드를 단 하나만 가지고 있는 인터페이스 @FuncationInterface 애노테이션을 가지고 있는 인터페이스 @FunctionalInterface public interface RunSomething { void doIt(); static void printName() { System.out.println("Kang"); } default void printAge() { System.out.println("30"); } } 이 인터페이스는 함수형 인터페이스가 아닌것 처럼 생겼지만 함수형 인터페이스가 맞다. 왜냐하면 추상 메소드를 단 하나만 가지고 있으며 @FuncationInterface 애노테이션을 가지고 있다. static이나 de.. 2021. 5. 10. 이전 1 ··· 5 6 7 8 9 다음