요새 C#을 다루다보니 느낀게 있다면 람다식을 이용한 이벤트 처리가 손쉽다는 정도 입니다. a 클래스의 메소드가 처리될 시점에 a 클래스를 인스턴스변수로 구성중인 b클래스의 메소드를 실행할 수 있는 정도로요;; 물론 람다식에 대해 제대로 알고 쓰는건 아니고;; 예전에 한창 이벤트 기반 프로그래밍 얘길 군대에 있을때 들었던 것 같네요... 몇안되는 경험을 바탕으로 얘기를 꺼내보았습니다 ㅎㅎ
요새 C#을 다루다보니 느낀게 있다면 람다식을 이용한 이벤트 처리가 손쉽다는 정도 입니다. a 클래스의 메소드가 처리될 시점에 a 클래스를 인스턴스변수로 구성중인 b클래스의 메소드를 실행할 수 있는 정도로요;; 물론 람다식에 대해 제대로 알고 쓰는건 아니고;; 예전에 한창 이벤트 기반 프로그래밍 얘길 군대에 있을때 들었던 것 같네요... 몇안되는 경험을 바탕으로 얘기를 꺼내보았습니다 ㅎㅎ
저는 2000년 후반의 큰 변화는 함수의 중요성을 재발견한 것이라고 생각합니다. 일단 프로그래밍을 DSL을 만드는 과정으로 보는 Lisp과 Smalltalk의 전통이 다시 조명을 받았고, OOP의 객체 수준 추상화가 아닌 함수 추상화의 가치가 인정 받았다고 생각합니다.
객체 수준의 추상화는 매우 강력한 도구임에도 불구하고 작은 일에 적용하기에는 비용이 비싼 도구인데 함수를 추상화(변하는 것과 변하지 않는 것을 분리)하는 고차함수를 통해 OOP를 적용할 만큼 큰 추상화가 아닌 경우에도 추상화가 가능해졌습니다.
사실 스프링의 JdbcTemplate 같이 콜백 객체를 넘기는 코딩 스타일이 자바 방식의 고차함수였다면, 이를 문법적으로 간결하고 쉽게 표현하도록 해준 것이 람다식입니다.
다음은 스프링 4에서 람다식을 사용하도록 변경될 jdbctemplate의 사용 예입니다.
지금은 이런 식이죠
즉 자바는 기존에도 클로저가 있었고 콜백도 가능했으나 문법적인 지원이 없어서 코드를 읽기도 힘들고 작성하는 비용도 무척 비쌌다면 람다식의 도입으로 훨씬 간결하게 코드를 작성하면서 함수를 추상화하기 좋게 되었습니다. 덕분에 함수 단위의 추상화가 활성화되게 되었습니다. op4j나 lambaj 같은 프로젝트를 보면 람다식이 도입된 이후의 모습을 약간 엿볼 수 있습니다.
KSUG 번역팀에서 번역하고 있는 글인데 함 읽어 보시면 도움이 될 겁니다.
http://java.dzone.com/articles/why-we-need-lambda-expressions http://java.dzone.com/articles/why-we-need-lambda-expressions-0
9개의 의견 from SLiPP
... 적고보니 너무 막연하게 질문했네요 -_-; 지울깡...
@kimmunsu 람다식에 대해서 모르는 개발자가 많다고 생각한다. 네가 람다식에 대해서 좀 더 부연 설명해준다면 더 좋은 답변 받을 수 있지 않을까? 그리고 람다식은 C# 뿐만 아니라 이미 많은 언어에서 사용하고 있어서 친숙한 친구들도 많을 듯하다.
나도 람다식을 많이 사용해 보지 않아서(거의 자바 위주로 프로그래밍을 하다 보니까...) 변화를 이야기하기는 뭐하지만 한마디 남겨본다면...
람다식은 좀 더 프로그래밍을 간결하게 구현할 수 있고, 일단 그 맛을 본 사람은 람다식을 쓰고 싶은 욕구가 많을 듯하다. 자바로 구현하다가 C로 구현하면 짜증나는 부분이 많다고 느끼듯이.. 변화라고 한다면 람다 표현식을 잘 쓰던 개발자가 자바로 구현할 때 짜증나던 부분을 해소해 줄 수 있는 정도 아닐까? 그 외에 어느 정도의 변화가 있을지는 잘 모르겠다. 람다식에 대한 경험이 풍부한 사람이 답변해 주리라 믿는다.
저는 2000년 후반의 큰 변화는 함수의 중요성을 재발견한 것이라고 생각합니다. 일단 프로그래밍을 DSL을 만드는 과정으로 보는 Lisp과 Smalltalk의 전통이 다시 조명을 받았고, OOP의 객체 수준 추상화가 아닌 함수 추상화의 가치가 인정 받았다고 생각합니다.
객체 수준의 추상화는 매우 강력한 도구임에도 불구하고 작은 일에 적용하기에는 비용이 비싼 도구인데 함수를 추상화(변하는 것과 변하지 않는 것을 분리)하는 고차함수를 통해 OOP를 적용할 만큼 큰 추상화가 아닌 경우에도 추상화가 가능해졌습니다.
사실 스프링의 JdbcTemplate 같이 콜백 객체를 넘기는 코딩 스타일이 자바 방식의 고차함수였다면, 이를 문법적으로 간결하고 쉽게 표현하도록 해준 것이 람다식입니다.
다음은 스프링 4에서 람다식을 사용하도록 변경될 jdbctemplate의 사용 예입니다.
지금은 이런 식이죠
즉 자바는 기존에도 클로저가 있었고 콜백도 가능했으나 문법적인 지원이 없어서 코드를 읽기도 힘들고 작성하는 비용도 무척 비쌌다면 람다식의 도입으로 훨씬 간결하게 코드를 작성하면서 함수를 추상화하기 좋게 되었습니다. 덕분에 함수 단위의 추상화가 활성화되게 되었습니다. op4j나 lambaj 같은 프로젝트를 보면 람다식이 도입된 이후의 모습을 약간 엿볼 수 있습니다.
KSUG 번역팀에서 번역하고 있는 글인데 함 읽어 보시면 도움이 될 겁니다.
http://java.dzone.com/articles/why-we-need-lambda-expressions http://java.dzone.com/articles/why-we-need-lambda-expressions-0
@fupfin 역시 형님 설명 무지 좋아요. 함수의 중요성 재발견이 특히 눈에 띄네요. 저는 이렇게까지 느끼지 못하고 있었는데 답변을 통해 한 수 배우고 갑니다.
오... 람다식이 뭔지도 몰랐는데... 저런 예제 코드를 보며 보니... 이해도 잘되고...신기..신기... 재밌는게 많군욤 @_@
그런데 왜 위 글에서 첫번째 소스 코드의 신택스 하일라이팅이 엉뚱하게 된 걸까요?
@fupfin 그렇네요. 아무래도 람다식을 제대로 이해하지 못하나봅니다. 너무 최근에 추가된 놈인지라. 음하하.
버그를 이런 식으로 합리화하려는 마음.
@자바지기 아~ 그런가보네요. ^^
@fupfin 좋은 설명 감사합니다. 저는 아직도 함수 추상화의 가치를 이해 못하고 있는데 그게 어떤건가요? scope에 관련된 이야기인가요?
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.