Java 8 Lambda를 이용한 Decorate pattern 지난 포스팅에 이어 Decorate pattern을 lambda로 바꾸는 방법에 대해서 설명합니다.시작하기에 앞서. stream, Functional Interface, lambda expression에 대한 아주 조그만?? 이해가 필요합니다. 예제를 보다가 코드가 헷깔리신다면 위 세가지를 다시한번 리뷰하고 오시면 됩니다.Lambda로 decorate pattern을??decorate pattern은 말 그래로 장식하는 패턴입니다.한가지 동작후에 나온 결과물을 다시 가공하는 형태인거죠. 이미 많이 써봤던 file IO의 BufferedStream이나, Bufferedxx로 시작하는 class들은 decorate pattern을 구현한 아주 대표적인 것들 입니다.그래서 사용법도 아래와 같습니다.FileWr.. 개발이야기/Java 7년 전
Java 8 Lambda를 이용한 Builder pattern Builder를 Lambda로Builder pattern을 많이들 사용합니다. Java 8에서 지원되는 lambda를 사용하면, 좀더 간단하게 builder pattern을 구현할수 있습니다.한단계씩 예제를 따라가면서 확인해 보시죠~ Builder가 필요한 코드먼저 builder가 필요한 부분에 대한 코드를 보겠습니다. public class Mail { public void from(String address) {...} public void to(String address) {...} public void subject(String line) {...} public void body(String message) {...} public void send() {...} } public void main(.. 개발이야기/Java 7년 전
Java 8 Lambda를 이용한 lazy evaluation 이전 포스팅에서 객체의 생성을 뒤로 미루는 방법에 대해서 얘기했었습니다.이번 글에서는 메서드를 지연시키는 방법에 대해서 알아보겠습니다. Java의 lazy execution자바는 논리 operation을 평가할때 lazy execution을 사용합니다.예를 들어fn1() || fn2() 에서 fn1()의 return값이 true라면 fn2()는 실행하지 않습니다.유사하게, fn1() && fn2() 에서 fn1()의 return값이 false 라면 fn2()를 실행하지 않습니다. 이는 불필요한 연산을 줄여서 속도를 높이는 역할을 하며, 더 효율적으로 동작하도록 합니다. 단, Java는 논리연산에서는 lazy order 또는 normal order를 사용하지만 메서드의 인수를 평가할 때는 eager ord.. 개발이야기/Java 7년 전
Java 8 Lambda를 이용한 virtual proxy pattern 람다를 이용하여 virtual proxy pattern을 구현하는 방법을 알아봅니다. 먼저 버추얼 프록시 패턴이 뭔지를 알아야 겠죠?하지만 이름은 몰랐더라도 이미 사용하는 코드에 녹아있을수도 있습니다. Virtual proxy pattern이 패턴은 어렵지 않은 구조이므로 간단히 개념만 설명하고자 합니다.일단 목적은 "lazy evaluation"입니다. 생성해서 쓰기에 버거운 객체의 초기화를 뒤로 미뤄서 초기 로딩 속도를 높이는 방법입니다.말은 거창하지만 실제로 많이 쓰이는 방법입니다. 어렵지 않고 이미 예제가 많이 있으므로 여기서 따로 설명하지는 않습니다.따라서 잘 설명되어있는 블로그를 링크합니다. 예제가 잘 설명된 글: http://ncanis.tistory.com/102개념이 잘 설명된 글: ht.. 개발이야기/Java 7년 전
Java 8 Lambda를 이용한 Execute around pattern #2 - lock 관리 실행 어라운드 패턴(Execute around pattern)에 대한 두번째 예시 입니다. 먼저 1번글에서는 resource의 명시적인 해제시 해체할 수 있는 틀(try-catch-with-resource)를 만들어 넣고 내부에 인자로 실제 동작해야 할 구문을 넣는 형태를 얘기했었습니다.이때 인자는 당연히 functional interface 입니다. 같은 방법으로 이번에는 lock을 사용하는 방법을 알아봅니다.잠금(lock)의 관리lock은 왜 써야 할까요?저는 사실 synchronized만 쓴 터라 lock의 개념이 무척 궁금했더랍니다.Java5부터 추가된 개념으로 동기화를 좀더 디테일?? 하게 관리하기 위해서 사용합니다. 예를 들면 하나의 함수 블럭을 넘어간다던가, 무작정 lock을 대기하는게 아니.. 개발이야기/Java 7년 전
Java 8 Lambda를 이용한 Execute around pattern #1 - resource 관리 lambda를 접하고 나면 이를 활용하는 방법으로 execute around pattern이란 용어가 나옵니다. 이번에는 가장 기본이 되는 Execute around pattern에 대해서 얘기합니다. Execute Around Pattern 이란??어떤한 작업을 할 때 준비 -> 실행 -> 정리의 역할이 구분되어 있는 코드들이 있습니다. 준비와 정리는 틀처럼 정해져 있고 실행부분만 바뀌는 코드의 형태들을 실행 어라운드 패턴이라고 합니다 어떤 동작을 할지 코드내에서 구현하는것이 아니라, 공통적으로 사용되는 코드를 template처럼 만들어 두고, 변경되는 부분은 호출(caller)하는 곳에서 구현해서 넘겨줍니다. 아래 예제에서는 파일 IO로 설명합니다. 파일IO를 쓰려면 스트림이나 파일을 열고 원하는 내.. 개발이야기/Java 7년 전
Java 8 Lambda Expression - 람다식 #4 Method ReferenceLambda의 마지막 입니다. 기존 람다식을 더 줄일 수 있는 Method reference에 대해서 설명합니다. 기본 형식은 아래와 같습니다.ClassName::Methodex) Person::getAgeperson class에 있는 getAge()함수의 레퍼런스를 표현으로 실제 실행하는것이 아니기 때문에 ()를 붙이지 않습니다.아래 예제를 보면 람다식이 method reference로 어떻게 표현되는지 감을 잡을 수 있습니다. (Person p) -> p.getAge() ==> Person::getAge() -> Thread.currentThread().dumpStack() ==> Thread.currentThread::dumpStack(str, i) -> str.subs.. 개발이야기/Java 8년 전
Java 8 Lambda Expression - 람다식 #2 지난 포스팅에 이어 계속 진행합니다.지난번에는 Strategy pattern을 람다식을 사용하면서 코드를 간결하게 변경시키는 방법을 봤습니다. 이번에는 가장 간단하게 람다식을 쓰는 방법에 대해 언급합니다. 익명클래스 (anonymous class)의 치환 - ComparatorLambda를 사용하는 가장 간단한 방법으로 익명클래스를 람다로 치환할 수 있습니다. new class...로 시작하는 불필요한 부분은 제거하고, 필요한 부분만 람다로 표현합니다. 이전 포스팅에서 상품List의 을 가격으로 정렬하려면 Collection.sort(List, Comparator)를 사용해야 합니다. 이전 포스팅에서 사용한 person 객체및 해당 list 생성 코드 입니다. public class Product { p.. 개발이야기/Java 8년 전
Java 8 Lambda Expression - 람다식 #1 Java 8에 있어서 가장 두드러진 부분은 람다의 적용입니다. 따라서 완벽하지는 않지만 그래도 쓸만한 함수형 프로그래밍을 할수가 있게 되었습니다. 이번 포스팅에서는 람다에 대한 기본적인 설명 보다는 왜 람다가 필요한지와 어떤식으로 사용될 수 있는지에 대한 단편적인 예제를 먼저 봅니다. 람다에 대한 기본적인 설명은 #3에서 설명할 예정이며, 어렵지 않으니, 쭈욱 따라 오시면 됩니다. 동작 파라미터화 (Behavior parameterization) 람다를 이용하면 어떤 동작을 Parameter로 만들수가 있습니다. "함수의 인자로 어떤 동작을 하는 함수를 받을 수 있다" 라고 이해하는게더 편할 수 도 있습니다. 이 동작은 함수를 호출하기 전까지는 아직 정해지지 않은 상태이며, 함수를 호출할 때 전달해 준 .. 개발이야기/Java 8년 전