이번 글에서는 stream에 대해 간단하게 알아보도록 하겠습니다. 1. Stream stream이란 java8부터 추가된 기능으로, collections에 lambda를 사용해 효율적으로 iteration을 수행할 수 있는 기능입니다. 이전 글에서 살펴보았던 forEach도 stream의 한 종류로 생각할 수 있으며, 사전적 정의는 다음과 같습니다. "A sequence of elements supporting sequential & parallel aggregate operations" 음.. 조금더 자세히 살펴보겠습니다. 😅 예를 들어 위와 같이 총 6개의 car로 구성된 Cars collections이 있으며, Cars collections이 정비를 위해 정비소에 들렸다고 가정해보겠습니다. 이때 기..
이번 글에서는 lambda를 사용한 foreach iteration에 대해 알아보도록 하겠습니다. 1. Foreach Iteration java8에서는 collections을 looping하는 방법으로 lambda를 사용한 foreach 방법이 새롭게 등장했습니다. 1-1) external iterator 예를 들어 아래와 같은 List가 존재할때 List people = Arrays.asList( new Person("Charles", "Dickens", 60), new Person("Lewis", "Carroll", 42), new Person("Thomas", "Carlyle", 51), new Person("Charlotte", "Bronte", 45), new Person("Matthew", "..
이번 글에서는 lambda의 method refernece에 대해 알아보도록 하겠습니다. 1. Method Reference lambda에서 method reference를 사용하면, 조금 더 간결하게 코드를 작성할 수 있습니다. 😎 1-1) lambda 예를 들어 다음과 같이 작성한 lambda 식이 있을때 public class MethodReferenceExample { public static void main(String[] args) { Thread thread = new Thread(() -> printMessage()); thread.start(); } public static void printMessage() { System.out.println("Hello World!"); } } 위..
이번 글에서는 lambda의 this refernece에 대해 알아보도록 하겠습니다. 1. This Reference this reference란 java에서 current object를 reference하는 방법으로 사용되는 keyword를 의미합니다. 1-1) implements class 아마, 이 글을 보고 계신분들도.. 이미 this refence를 사용해본 경험이 있을 겁니다. 😅 예를 들어 다음과 같이 public class ThisReferenceExample { public static void main(String[] args) { ThisReferenceExample thisReferenceExample = new ThisReferenceExample(); thisReferenceEx..
이번 글에서는 closure에 대해 알아보도록 하겠습니다. 1. Closure closure란 다른 함수의 scope 변수에 접근할 수 있는 함수를 의미합니다. 1-1) implements interface 예를 들어 다음과 같은 예제가 존재할때 public class Closure { public static void main(String[] args) { int a = 10; int b = 20; // implements interface doProcess(a, new Process() { @Override public void process(int i) { System.out.println(i + b); } }); } public static void doProcess(int i, Process p..
이번 글에서는 lambda의 exception handling 방법에 대해 알아보도록 하겠습니다. 1. Exception Handling lambda에서 exception handling을 구현 하기위해선 어떻게 해야할까요? 😅 예를 들어 입력받은 배열의 elements를 key로 나눈 값을 출력하는 예제가 있다고 가정해보겠습니다. public class ExceptionHandling { public static void main(String[] args) { int[] someNumbers = {1, 2, 3, 4}; int key = 2; // print process(someNumbers, key, (k, v) -> System.out.println(k / v)); } private static ..
이번 글에서는 functional interface에 대해 알아보도록 하겠습니다. 1. Functional Interface functional interface란 lambda식에 사용될 수 있는 interface를 의미합니다. 이전 글에서 살펴 보았듯이, lambda에선 interface를 사용해 type을 정의할 수 있습니다. 이때 interface type으로 사용되는 interface는 반드시 한개의 'abstract' method만 선언되어 있어야 합니다. // interface for lambda interface MyLambda { void perform( ); } java8부터는 interface 내부에 default & static 메서드를 직접 구현할 수 있도록 변경되었으므로.. fun..
이번 글에서는 lambda에 대해 조금 더 자세히 알아보도록 하겠습니다. 1. Using Lambda 이전 글의 예제를 다시 한번 살펴보겠습니다. 1-1) function type 이전글에서 Greeter의 greet 메서드에 특정 '기능'을 전달하기위한 방법에는 다음과 같이 2가지 방법이 존재했습니다. 첫 번째는 Interface를 생성하고, 해당 Interface를 구현한 클래스의 인스턴스를 전달하는 방법. 두 번째는 lambda 식으로 작성한 action을 전달하는 방법. 이때 lambda 식은 다음과 같이 작성할 수 있었습니다. aBlockOfCode = () -> System.out.println("Hello World!"); 그렇다면 위의 경우에 aBlockOfCode의 변수 Type은 무엇이..
이번 글에서는 lambda에 대해 알아보도록 하겠습니다. 1. Understanding Lambda lambda란 java8에 추가된 functional programming을 지원하는 기술입니다. lambda는 전통적인 OOP(Ojbect-Oriented-Programming)와는 전혀 다른 방식인 함수형 프로그래밍(Functional-Programming) 방법으로 프로그램을 작성합니다. lambda를 사용해 프로그램을 작성하면 다음과 같은 이점을 가지게 됩니다. • 함수형 프로그래밍 작성이 가능합니다. • 읽기 쉽고 간결한 코드 작성이 가능합니다. • API와 Librariy의 사용이 쉬워집니다. • 병렬 processing으로 처리가 가능해집니다. 2. Functinal Programming vs..
이번 글에서는 thread pool과 executor service를 사용해 작업을 처리하는 방법에 대해 알아보도록 하겠습니다. 1. Thread Pool & Executor Service thread pool은 collections of threads로, 각각의 thread는 주어진 task를 concurrently 하게 수행합니다. 위와 같은 쓰레드 풀은 동시에 가동하는 쓰레드 수에 제한을 둘 때 유용합니다. 새 쓰레드를 생성하는 것은 오버헤드가 따르기 때문에, 매 작업마다 새 쓰레드를 생성하지 않고 쓰레드 풀에 작업을 넘기는 방법으로 수행할 수 있습니다. Thread Pool을 사용하는 Task 객체는 다음과 같이 작성할 수 있습니다. public class WorkTask extends Threa..
이번 글에서는 thread를 사용해 producer와 consumer를 구현하는 방법에 대해 알아보도록 하겠습니다. 1. Producer & Consumer producer & consumer problem은 최소 1개씩의 producer & consumer thread가 있다고 가정합니다. 예를 들어 위와 같이 producer & consumer thread가 존재할 때, producer thread는 message를 생성해 queue에 발행합니다. consumer thread는 queue에 발행된 message를 FIFO 순서대로 처리해 작업을 수행하도록 구현하고자 합니다. 이때 producer는 queue가 꽉 차있을 경우 더이상 message를 발생하지 않고, consumer는 반대로 queue가..
이번 글에서는 multi threading 환경에서 synchronization을 사용하는 방법에 대해 알아보도록 하겠습니다. 1. Synchronized Keyword synchronized keyword는 다음 4가지 유형의 blocks에서 사용될 수 있습니다. • Instance Method • Static Method • Instance Method Code Block • Static Method Code Block 위의 4가지 유형의 특징 및 사용방법은 다음과 같습니다. 1-1) Instance Method instance method 동기화를 사용하면, instance 별로 동기화를 이루게됩니다. public synchronized void add(int value) { this.count +..
이번 글에서는 multi threading 환경에서 synchronization을 사용하는 방법에 대해 알아보도록 하겠습니다. 1. Thread Synchronization multi threading 환경에서 synchronization을 이해하는 것은 굉장히 중요합니다. 예를 들어 입력받은 text를 slice하는 작업을 수행하는 StringReverseThread가 있다고 가정해보겠습니다. public class StringReverseThread extends Thread { private List names; private String message; public StringReverseThread(List names, String message){ this.names = names; this...
이번 글에서는 thread를 사용하는 방법에 대해 알아보도록 하겠습니다. 1. Using Thread thread를 사용하는 방법에는 여러가지 방법들이 존재합니다. 1-1) thread priority 먼저, multi threads 들의 우선순위 할당을 통해 한정된 CPU 자원을 threads 별로 분배할 수 있습니다. 예를 들어 아래와 같이 Runnable을 구현한 구현체가 존재할 때 public class CalculatorRunnable implements Runnable { long value; CalculatorRunnable(long value) { this.value = value; } @Override public void run() { long startTime = System.curr..
이번 글에서는 thread는 생성하는 방법에 대해 알아보도록 하겠습니다. 1. Creating Thread java에서 thread를 생성하는 방법에는 크게 2가지가 있습니다. 먼저 아래와 같은 main thread가 존재한다고 가정해보겠습니다. public class ch_3 { public static void main(String[] args) throws InterruptedException { for(int i=0; i
이번 글에서는 static keyword에 대해 알아보도록 하겠습니다. 1. Static Keyword java에서 static 변수는 class 단위로 값을 할당할때 사용할 수 있습니다. 😎 1-1) by object 예를 들어 아래와 같이 Emp Class가 있다고 가정해보겠습니다. 또한, 모든 ceo 변수의 값은 "suwon"이라고 가정하겠습니다. class Emp { int id; int salary; String ceo; } 위의 클래스를 사용한 main 함수가 아래와 같을때 public class Demo { public static void main(String[] args) { Emp minho = new Emp(); minho.id = 8; minho.salary = 4000; minho..
이번 글에서는 multi threading에 대해 알아보도록 하겠습니다. 1. Process & Thread 현대의 computer는 대부분 multiple core를 사용해 작업을 수행합니다. 따라서 multiple core의 최대치의 성능을 발휘하기 위해선 program 을 작성할때 이를 고려해 작성해야 합니다. 1-1) one process & one thread 일반적으로 하나의 program은 1개의 process와 1개의 thread를 사용합니다. task manager의 process 탭을 살펴보면 위와 같이 실행되고 있는 program 별로 process가 생성되어 있는 것을 확인할 수 있습니다. performance 탭에서는 현재 실행되고 있는 process & thread의 갯수를 확인..