태그 보관물: javascript

JavaScript의 privileged 메서드가 끔찍한 이유

예제 코드가 약간의 오해의 소지를 가지고 있어 조금 수정했습니다.
– 2014년 6월 29일 –

요즘 가장 뜨거운 관심을 받고있는 프로그래밍 언어인 JavaScript는 정보 보호(또는 은닉, information hiding)를 언어 스펙 차원에서 지원하지 않습니다. 이는 JavaScript는 진정한 OOPL(object-oriented programming language)이 아니라고 주장하는 사람들의 근거가 되기도 합니다. 여기에 대해 Douglas Crockford는 다음과 같이 변호합니다.

Some argue that JavaScript is not truly object oriented because it does not provide information hiding. That is, objects cannot have private variables and private methods: All members are public. But it turns out that JavaScript objects can have private variables and private methods. Of course, few understand this because JavaScript is the world’s most misunderstood programming language.

JavaScript가 개체의 멤버 접근을 제한할 수 있다며 이것이 잘 알려지지 않은 것을 안타까워합니다.

계속 읽기

광고

*오류 수정* C++와 C#, Java, 그리고 Node.js 정렬 성능 비교

조종국님께서 댓글에서 지적해주신 절사평균 오류가 수정되어 소스코드와 측정 결과가 업데이트되었습니다. 결과적으로 C# 이외의 언어들에 대한 정렬 성능 평가가 낮아졌습니다.
– 2014년 10월 17일 –

어제(2014년 6월 16일) 추가된 Java 코드가 공정하지 못했습니다. 예상보다 Java 코드가 느려서 검토해본 결과, 기존의 C++, C#, Node.js는 모두 rand() 네이티브 함수를 사용해 난수를 만들었기 때문에 난수 도메인의 크기가 15비트인 반면 Java 코드는 매개변수 없는 버전의 java.util.Random.nextInt() 함수를 사용했습니다. 이 포스트의 관심사는 언어별 정렬 속도가 아닌 최대한 유사한 코드를 이용한 CPU 집약적인 코드의 성능 비교이기 때문에 Java 역시 15비트 난수를 사용하도록 수정했습니다. 결과는 많이 달라졌습니다. 이것과 관련되어 수정된 부분은 별도 표시했습니다.
– 2014년 6월 17일 –

처음엔 귀찮아서 제외했지만 찝찝한 느낌이 사라지지 않아 Java를 추가했습니다.
– 2014년 6월 16일 –

며칠전 Swift의 -Ofast 컴파일러 설정에 대한 글을 접했습니다. 저는 아직 Swift에 대해 잘 모르고 실습 경험도 전혀 없지만 이 글에 의하면 -Ofast 설정은 약간은 도박적으로 코드의 제한을 풀어 성능을 극대화합니다. 결과적으로 정렬 작업에 대해 C 코드보다 약간 높은 성능을 보여준다고 하네요. 안정성을 담보로 하기 때문에 개발자의 주의를 강하게 요구하면서도 최소한의 성능 집약적 코드를 최적화하는 데에 이용 가치가 있을 수도 있겠습니다.

그렇다면 안정적 코드를 제공하는 ‘관리’ 개념을 가진 .NET 코드와 Java 코드는 어느 정도 성능을 보여주는지 C++ 코드와 비교해봤고 기왕 하는김에 성능 미신이 따라다니는 Node.js를 포함해 봤습니다.

계속 읽기

Angular, Ember, Knockout 양방향(two-way) 바인딩 비교 + Knockout 비동기 렌더링 해법

Two-way Binding in MVVM Frameworks

JSConf 2013에서 발표된 대표적인 웹 클라이언트용 MVVM(Model-View-ViewModel) 프레임워크인 Angular, Ember, Knockout의 양방향(two-way) 바인딩에 대한 비교 발표입니다. 요즘 많이 주목받는 SPA(Single-Page Application)에 빠질 수 없는 것이 MVVM 또는 MVW(Model-View-Whatever) 프레임워크이죠. 20분 정도의 길지 않은 발표이지만 발표자 Marius Gundersen의 깊은 고민의 흔적이 느껴지며 각 프레임워크별 양방향 바인딩의 장단점을 쉽고 간결하게 설명합니다. 컨퍼런스 성격 답게 슬라이드는 impress.js를 사용해 웹에서 직접 실습 가능하도록 멋지게 만들어 졌습니다.

계속 읽기

Knockout과 Mocha를 사용한 TDD기반 웹 개발

개요

UI를 포함하는 프로그램의 경우 Coded UI Test 등의 기술이 발전되고 있지만 MVVM 디자인 패턴을 적용할 경우 UI의 많은 부분을 전통적 테스트 기술을 사용하여 검증할 수 있습니다. 오랫동안 WPF의 전유물로만 여겨지던 MVVM 패턴은 최근 KnockoutJS와 AngularJS 등의 프레임워크의 도움을 받아 웹 응용프로그램 개발 영역까지 확대되고 있습니다.

계속 읽기