감성 충만한 하루

2년만이지 싶다. 책 한권 달랑 들고 출근했다. 창가에 앉아 스며드는 햇쌀에 얼굴을 녹이며 책을 읽어내려갔다. 아침부터 폭풍 집중력이다. 책에 몰입하는 순간이 좋다. 이런 느낌 참 오랜만이다. 그동안 부시시 일어나 운전대를 잡던 때와는 확실히 다른 느낌이다. 날씨가 추운건 문제가 되지 않는다. 이미 심장이 말랑말랑 달아올랐다. 오늘은 그렇게 출근을 했다. 느낌이 좋다.

이 느낌을 말로 설명 할수가 없다. 아침부터 기분이 좋아서 누군가에서 “나 오늘 기분 짱좋아” 라고 얘기하고 싶어, 아이폰을 만지작 만지작 하다가 다시 가방에 넣었다. 왠지 용기가 나지 않았다. 그래도 오늘 좋은 일이 생길 것만 같다.

지난 이틀간 머리 싸메고 궁금해 했던 문제를 풀었다. 처음엔 아~ 왜 이걸 해야하는거지? 했는데 문제가 풀리고 나니 재밌다. 역시 기분탓인가? 문제 해결에 대한 정리를 안할수없어 간단히 포스팅을 하고, 오늘 코딩은 접었다.

종일 낚시대를 검색했다. 그동안 미뤄뒀던 장구통릴도 구매했다. 충동구매 같지만, 난 낚시대 사는게 참 좋다. 1년에 한 두번이라지만 그 한두번의 출조가 나를 다르게 만든다. 간지나는 낚시가방도 샀다. 하드케이스다. 요건 확실히 충동구매다. 하지만 후회하지 않는다. 난 뽐생뽐사니까. 어짜피 나이먹고 하는일은 전부 장비빨 아니겠는가. ㅋ

돌아오는 버스에서도 종일 책을 읽어내려갔다. 오늘 이책을 다 읽어버릴 기세다. 그런데 정말 오늘 다 읽어 재겼다. 심장이 쫄깃해져서 오밤에 엄청난 수다를 떨었다. 중구난방 대화지만 책에 빠져서, 책에 취해서 이야기하는 내모습이 참 새롭다. 팀사람들은 내가 원데이가지고 17일을 얘기했다고 하던데.. ㅋㅋ 내가 정말 하나에 꽂히면 엄청 오래가는구나 싶다.

언젠가부터 눈을 보고 대화하고 있는 내모습을 발견했다. 원래 눈을 마주보고 이야기하면 눈이 아팠다. 눈이 충열되는거 같고, 자꾸 신경쓰이고 거슬리고, 어색해서 눈을 피하기 바빴다. 그런데 바꼈다. 내가 바꼈다는 것을 인지한건 5일 전이다. 인터뷰가서 내가 상대의 눈을 보며 이야기하고 있는것이 아닌가? 이런 변화 좋다. 긍정적이다. 내일은 점도 뺄꺼다! 오늘은 여기까지

유사배열 객체만들기 (making array-like object in JS)

평소에는 jQuery를 잘 쓰지 않는다. 이미 jindo를 이용해 원하는 형태로 얼마든지 개발할수있기 때문이다. 하나의 라이브러리를 딥하게 쓰다보면, 그 라이브러리에 매우 익숙하게 되고 무엇이 문제인지 무엇이 좋은지 잘 모를때가 있다. 그래서 종종 개인 프로젝트에는 jQuery를 일부러라도 찾아서 쓴다.

몇일전 부터 jQuery를 조금 딥하게 보고 있다가 특이한 점을 발견했다.
바로 jQuery() 객체로 인스턴스를 만들면 다음과 같이 배열로 반환한다는 점이다.

> jQuery()
[]

> jQuery('#test')
[<div id=​"test" class=​"this is a class">​OK​</div>​]

하지만 겉모습만 배열이지 실제로는 jQuery의 인스턴스다.

jQuery() instanceof Array  // false
jQuery() instanceof jQuery // true

오~! 신기한데 어떻게 저럴수 있지? 겉모습은 배열이지만 배열 아닌 유사배열!! 자바스크립트에서 내가 아는 유사배열은 두가지다!. 하나는 arguments 객체고 다른 하나는 셀렉터가 반환하는 NodeList다. 유사배열은 배열이 가지고 있는 배열 특유의 메소드들이 없다. 그래서 어떻게 보면 불편할수도 있다.

그런데 jQuery와 같이 인스턴스가 유사배열 형태로 반환이 되면 장점이 있다. 다음과 같이 DOM을 수정하면 바로 디버거 콘솔창에서 변화를 확인해볼수있다는 사실이다!!

> jQuery('<div>').addClass('test')
[<div class=​"test">​</div>​]

확인해본 결과 웹킷계열의 디버거에서만 위와같이 찍히고, 다른 브라우저들은 그냥 객체로 나온다. 그래도 개발은 크롬에서 주로 하기 때문에 위와같이 콘솔로그만 찍혀도 엄청 도움이 된다.

그래서 만들어봤다. 어떻게 저렇게 하면 나올수있을까?
혹시나 싶어 배열을 프로토타입 상속으로 만들어봤다.

var fine = function(){ };
fine.prototype = Array.prototype;
var x = new fine();

x instanceof fine;  // true
x instanceof Array; // true

그런데 배열을 프로토타입 상속으로 받으면 x는 배열의 인스턴스도 된다. 뭐 누구의 인스턴스가 되냐 안되냐가 그렇게 중요한 문제는 아니지만, 여기서 해당 인스턴스가 되면 필요없는 배열의 메소드들이 fine 객체에 들어갈수가 있다는 것이 문제가 된다.

그럼 어떻게 해야하나? 결론부터 말하면 만들고 싶은 객체에 length와 splice 프로퍼티를 넣으면된다.

> var foo = {length:0, splice:function(){}, x:1, y:1};
> console.log(foo);
[splice: function, x: 1, y: 1]

이런 트릭이 있었다니..대박!! 물론 웹킷계열의 디버거에서만 저렇게 나온다. 요거때메 몇일을 궁리하다가 검색으로 찾아냈는데… 사실은 jQuery 코드에도 위와 같은 코드가 숨겨져 있었다!!

// For internal use only.
// Behaves like an Array's method, not like a jQuery method.
push : core_push,
sort : [].sort,
splice : [].splice

꼼꼼한 레식사마~ ㅋ

스페인 여행 계획

올해는 나의 2번째 리프레시가 있는 해!!

대략 일정은 4월 중순,
바르셀로나 IN – 마드리드 OUT : 왕복 뱅기 대략 120만원
바르셀로나 축구 경기 : 대략 70유로선에서 해결, 원화로 약 10만원

여행지,
바르셀로나 – 발레시아 – 그라나다 – 말라가 – 마드리드

한바퀴 돌기엔 일정이 너무 짧다!