본문 바로가기

분류 전체보기

(664)
15. Javascript 함수형 프로그래밍 적용(6) - reduce reduce( ) 함수는 앞서 살펴본 map과도 약간 유사한 형태를 띠는 함수입니다. 이 함수는 배열의 각 요소를 하나씩 꺼낸 다음 사용자가 정의한 함수를 적용시킨 후, 그 결과 값을 계속해서 누적하는 기능을 합니다. Array.prototype.reduce = function(callback, memo) { // this(obj)가 배열인지 확인 필요함 // callback이 함수인지 확인 필요함 var obj = this; var value; var accumulated_value = 0; for(var i = 0; i < obj.length; i++) { value = obj[i]; accumulated_value = callback.call(null, accumulated_value, value)..
"저는 일을 더 맡을 수 없어요." 영어로 표현해 봅시다 회사에서 업무를 담당하게 되거나 어떠한 직책을 맡게 되는 경우에 대해서 종종 영어로 표현을 하게 되는 경우가 있습니다. 그런데 의외로 '일 또는 직책을 맡게 되었다'라는 표현을 영어로 자연스럽게 표현하기가 어렵게 느껴집니다. 그러다 보면 "직책을 위임하다" 같은 다소 어려운 단어의 번역 투를 쓰게 되거나, 콩글리시를 쓰게 되곤 합니다. 오늘은, 인터뷰나 자기소개에서 유용하게 사용할 수 있는 이러한 업무 관련 표현을 알아보겠습니다. 상황을 하나 가정해 보겠습니다. 현재도 회사에서 과중한 업무를 맡고 있는 상황인데, 또 다른 추가 업무를 담당할 수 있겠냐는 지시가 들어왔습니다. 이때, 자연스럽게 다음과 같이 답하게 되겠죠? "지금으로서는 더 이상 제가 일을 맡을 수 없어요." 이것을 영어로 한 번 표현해 볼..
어노테이션(Annotation) - 런타임 시 어노테이션 정보 사용하기 어노테이션의 경우 원래 아무런 동작을 하지 않는 단순한 표식 혹은 정보 값에 지나지 않을 수 있지만, 앞서 살펴본 리플렉션(Reflextion)을 통해서 정보를 획득하고, 일정한 처리를 진행할 수 있도록 지원하고 있습니다. 일단 클래스 / 필드 / 생성자 / 메서드에 적용된 어노테이션 정보를 획득해야 합니다. 클래스에 적용된 어노테이션 정보 획득을 위해서는 java.lang.Class를 이용하면 되는데 필드 / 생성자 / 메서드에 적용된 어노테이션 정보 획득을 위해서는 Class의 메서드를 통해서 java.lang.reflect 패키지의 Field, Constructor, Method 타입의 배열을 얻어야 합니다. Class (Java Platform SE 8 ) Determines if the spec..
15. Javascript 함수형 프로그래밍 적용(5) - map map 함수 역시 앞서 살펴본 each와 비슷하지만, 활용 방식이 약간 다른 함수입니다. 배열에 주로 사용되며, 배열의 요소 각각을 꺼내 사용자가 정의한 함수에 적용한 후, 새로운 값을 얻은 다음 그 결과 값을 새로운 배열에 넣는 형태로 동작하게 됩니다. 한 번 예제를 살펴보도록 하겠습니다. Array.prototype.map = function(callback) { var obj = this; var value; var mapped_value; var A = new Array(obj.length); for(var i = 0; i < obj.length; i++) { value = obj[i]; mapped_value = callback.call(null, value); A[i] = mapped_valu..
15. Javascript 함수형 프로그래밍 적용(4) - each 함수형 프로그래밍의 특성을 통해 구현하는 반복 함수에 대해서 살펴보도록 하겠습니다. 우선 가장 먼저 알아볼 반복 함수는 each( )입니다. 주로 프로그래밍 언어들에서 each, forEach로 제공되는 함수입니다. each( ) 함수는 배열의 각 요소 또는 객체의 각 프로퍼티를 하나씩 꺼낸 다음, 순서대로 특정 함수에 인자로 전달해 실행시키는 역할을 하게 됩니다. each함수의 예제를 살펴보도록 하겠습니다. 여기서 소개하는 예제는 jQuery 1.0의 each( ) 함수를 기준으로 합니다. function each(obj, fn, args) { if(obj.length == undefined) { for(var i in obj){ fn.apply(obj[i], args || [i, obj[i]]); }..
어노테이션(Annotation) - 어노테이션 유지(Retention) 정책 어노테이션을 정의하는 경우 사용하는 정책과 관련해서, 적용 대상 정책 말고도 어느 '범위'까지 사용해야 할 지에 대해서도 정의가 가능합니다. 이 어노테이션 리텐션 정책은 java.lang.annotation.RetentionPolicy에 enum(열거 상수)로 정의되어 있습니다. RetentionPolicy (Java Platform SE 7 ) docs.oracle.com 우선 이 리텐션 정책에 대한 정의는 소스 상에서만 유지 - 컴파일 클래스까지 - 런타임 시에도 유지 할지를 지정하게 됩니다. 이 세 가지 정책에 대한 이해가 필요한데, 이를 설명하기 전에 우선 리플렉션(Reflection)의 개념을 먼저 이해하고 있어야 합니다. 리플렉션은 런타임 시점에 해당 클래스의 메타 정보를 얻는 기능을 의미합니..
"그 문제의 해결책을 생각해 냈다" 영어로 표현해 봅시다 오늘 배워볼 표현은 약간 추상적으로 보일 수 있는 표현이지만, 인터뷰나 혹은 프레젠테이션 등 공식적인 자리 에서 유용하게 써먹을 수 있는 표현입니다. 어떠한 문제나 난관에 부딪혔을 때 좋은 해결 방안이 떠오르거나 혹은, 어느 날 문득 좋은 아이디어가 생각나서 그것을 실행에 옮겨다는 등의 표현을 할 때가 있죠? 이럴 때 주로, '좋은 생각이 났다' '해결 방법을 생각해 냈다'와 같은 표현을 쓸 수 있습니다. 그런데 막상 이러한 표현들을 영어로 설명하라고 하면 선뜻 좋은 표현이나 단어가 떠오르지 않습니다. 한 번 도전해 보도록 하겠습니다. 우선 본론부터 진행해 보겠습니다. '해결방법을 생각해 냈다.'를 한 번 표현해 볼까요? 어떤 생각이 드시나요? 영어에 조금 감이 있으신 분들이라면 think를 그냥 쓰지는..
15. Javascript 함수형 프로그래밍 적용(3) - wrapper Javascript의 wrapper(래퍼) 함수는 간단하게 말해 다른 OOP 언어들의 다형성을 구현하는 '오버라이드(override)' 기능과 동일하다고 생각하면 됩니다. 여기서는, original이라는 원본 함수가 있는데, 여기에 다른 익명의 함수를 대입해 실행하게 만드는 예제를 생성해 보도록 하겠습니다. function wrap(object, method, wrapper) { // 이 예제에서는, fn = Function.prototype.original var fn = object[method]; return object[method] = function() { return wrapper.apply(this, [fn].concat(Array.prototype.slice.call(arguments))..