06 : 변수 유효 범위 람다 표현식에 유효한 변수에 접근하고자 할때는 어떻게 할까? 다음 예제를 한번 보자 123456789public static void repeatMessage(String text, int count){ Runnable r = () ->{ for (int i = 0; i { while(count > 0) { count--; //오류 : 캡처한 변수는 변경 불가능 System.out.println(text); Thread.yield(); } }; new Thread(r).start();} 람다 표현식에서 변수를 변경하는 작업은 스레드에 안전하지 않다. 일변의 병행 작업이 존재 하고, 각 작업에서 공유 카운트를 업데이트 한다면 문제가 생길 것이다. 12345int matches = ..
05 : 생성자 레퍼런스생성자 레퍼런스 사용 방식메서드의 이름이 new라는 점을 제외 하면 메서드 레퍼런스와 사용 방식이 유사하다. 예를 들면, Button::new는 Button 생성자를 가리키는 레퍼런스이다. 하지만 어느 생성자를 가르키는지는 문맥에 따라 다르다고 한다. 123List labels = ...;Stream stream = labels.stream().map(Button::new);List buttons = stream.collect(Collectors.toList()); 문자열 리스트가 있다고 하면, 다음과 같은 호출을 이용해 각 문자열을 대상으로 생성자를 호출 함으로써 문자열 리스트를 버튼 배열로 변환한다. map 메서드가 리스트의 각 요소를 대상으로 Button(String) 생성자..
재귀 호출과 완전 탐색재귀 호출완전히 같은 코드를 반복해 실행하는 작업을 구현할때 사용 하는 개념. 자신이 수행할 작업을 유사한 형태의 여러 조각으로 쪼갠 뒤 그 중 한 조각을 수행하고, 나머지 부분에서 자기 자신을 호출 한다. 예를 들면 자연수 n이 주어 졌을때 1 부터 n까지의 합을 반환하는 sum()이란 함수를 for 문과 재귀함수로 구현해 보자. 12345678910111213141516//코드 1 부터 n 까지의 합을 계산하는 반복 함수와 재귀 함수//필수 조건 : n >= 1//결과 : 1 부터 n 까지의 합을 반환int sum(int n){ int ret = 0; for(int i = 1; i = 1//결과 : 1 부터 n 까지의 합을 반환한다.int recursiveSum(int n){ i..