java

Supplier 함수적 인터페이스는 매개값은 없고 리턴값이 있는 getXXX() 메소드를 가지고 있다. 이 메소드들은 호출한 곳으로 데이터를 리턴(공급)하는 역할을 한다. 인터페이스명 추상 메소드 설명 Supplier T get() T 객체를 리턴 BooleanSupplier boolean getAsBoolean() boolean 값을 리턴 DoubleSupplier double getAsDouble() double 값을 리턴 IntSupplier int getAsInt() int 값을 리턴 LongSupplier long getAsLong() long 값을 리턴 public static void main(String[] args) { IntSupplier intSupplier = () ->{ int n..
Consumer 함수적 인터페이스는 리턴값이 없는 accept() 메소드를 가지고 있다. Consumer는 단지 매개값을 소비하는 역할만 하며, 소비한다는 말은 사용만하고 리턴값이 없다는 뜻이다. 인터페이스명 추상 메소드 설명 Consumer void accept(T t) 객체를 T를 받아 소비 BiConsumer void accept(T t, U u) 객체 T, U를 받아 소비 DoubleConsumer void accept(double value) double 값을 받아 소비 intConsumer void accept(int value) int 값을 받아 소비 LongConsumer void accept(long value) long 값을 받아 소비 ObjDoubleConsumer void accep..
자바에서 한 개의 추상 메소드를 가지는 인터페이스들은 모두 람다식을 이용할 수 있다. Runnable 인터페이스도 마찬가지이다. Runnable runnable = () -> { ... }; Thread thread = new Thread(() -> { ... }); // Thread 생성자 호출 자바8부터 빈번하게 사용되는 함수적 인터페이스(functional Interface)는 java.util.function 표준 API패키지로 제공한다. java.util.function이 제공하는 functional Interface의 목적은 메소드 또는 생성자의 매개 타입으로 사용되어 람다식에 대입될 수 있다. 함수적 인터페이스는 크게 Consumer, Supplier, Function, Operator, P..
Stream API 에서는 커스텀하기 집계 결과물을 만드는 reduce()라는 메소드를 제공한다. (sum(), average(), count(), max(), min() 말고도 커스텀하게 사용할 경우 사용) Stream, IntStream, LongStream, DoubleStream 각 인터페이스에는 reduce() 메소드가 오버로딩 되어 있다. (매개타입 XXXOperator, 리턴 타입 OptionalXXX, int, long, double) 스트림 요소가 전혀 없을 경우 디폴트 값인 identity 매개값이 리턴된다. XXXOperator 매개값은 집계 처리를 위한 람다식 을 대입하는 곳이다. public static void main(String[] args){ List workerList =..
스트림 소개 스트림(Stream)은 자바8부터 추가된 반복자이며, 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해준다. 반복자 스트림 자바 7 까지는 Iterator를 사용했지만, 자바 8에서는 Stream이란 것을 사용할 수 있다. // iterator List list = Arrays.asList("콘성현", "강성현", "깡냉"); // Iterator Iterator iterator = list.iterator(); while(iterator.hasNext()){ String name = iterator.next(); System.out.println(name); } // stream List list = Arrays.asList("콘성현", "강성현", "깡냉"); // S..
자바 동시성 프레임워크에는 모든 기본 타입을 덮어씌우는 AtomicInteger, AtomicBoolean 같은 Atomic 클래스들과 참조 타입에 대한 AtomicReference클래스가 추가되었다. 이 클래스들은 모두 원자(atomic)연산을 보장한다. AtomicInteger를 사용하면 동기화된 블록은 더 이상 필요하지 않다. AtomicInteger클래스가 값을 읽고 쓰는 동안 변경되지 않는다는 걸 보장해주기 때문이다. public class SharedState { @Test public void sharedState(){ final ExecutorService executorService = Executors.newCachedThreadPool(); final AtomicCounter coun..
public class SharedState { @Test public void sharedState(){ final ExecutorService executorService = Executors.newCachedThreadPool(); final SimpleCounter simpleCounter = new SimpleCounter(); executorService.execute(new CounterSetter(simpleCounter)); simpleCounter.setNumber(200); assertEquals(200, simpleCounter.getNumber()); } private static class CounterSetter implements Runnable{ private final S..
자바 가상머신(JVM)은 프로그램이 실행되는 플랫폼이다. 각각의 운영체제와 아키텍쳐용으로 만들어져 있고, 운영체제와 애플리케이션 사이에 위치하면서 플랫폼에 상관없이 독립적으로 실행될 수 있도록 만들어 준다. javac를 이용해 .java파일을 바이트코드(bytecode)로 컴파일 할 수 있다. 이 바이트코드는 JVM에서 명령어들을 아키텍처와 운영체제용으로 해석한다. 메모리는 어떻게 할당하는가? new 키워드는 자바 힙(heap) 영역에 메모리를 할당한다. 객체를 할당할 때 메모리가 충분하지 않으면 JVM은 가비지 켈럭션(Garbage Collection)을 이용해 힙에서 메모리를 재사용하려고 시도한다. 충분한 메모리가 존재하지 않는다면 OutOfMemoryError가 발생하여 JVM이 종료된다. 힙은 제..
자바 7은 try/catch/finally 문과 함께 유용하게 사용할 수 있는 문법을 제공한다. AutoCloseable 인터페이스를 구현하면 아래와 같은 코드를 작성하여 자원 종료를 걱정할 필요가 없어진다. @Test public void testResourceHandling(){ try(final FileReader reader = new FileReader("c://tmp/test.txt")){ ... }catch(IOException e){ // 예외처리 } } try-with-resource가 없을 때는 finally를 사용하여 자원을 명시적으로 종료(close)시켜야 한다. (finally구문 안에 try-catch문 등등 상당히 보기 좋지 않은 코드를 사용해야 할 때가 있다.) AutoClo..
final Integer intObject = 42; 자바5 이전에는 위의 코드를 컴파일러가 에러로 인지했다. 하지만 자바5버전에서는 컴파일러가 오토박싱(Autoboxing)이라는 기능을 사용해 int와 같은 참조타입은 Integer타입 값이라는 것을 알기 때문에 오류가 나지 않는다. 자바5 이전에는 new Integer(42); 또는 Integer.valueOf(42);를 사용했어야 했다. (Integer.valueOf()가 더 효율적인데 이유는 상수풀에 캐시를 하고 있기 때문이다.) 그렇다면 오토박싱(Autoboxing)의 반대말인 언박싱(Unboxing)이란 무엇일까? Float, Integer, Boolean 같은 박스된 참조타입을 원시타입인 float, int, boolean 타입으로 변경하는 ..
깡냉쓰
'java' 태그의 글 목록 (3 Page)