태그 보관물: 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가 개체의 멤버 접근을 제한할 수 있다며 이것이 잘 알려지지 않은 것을 안타까워합니다.

계속 읽기

Advertisements

*오류 수정* 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를 포함해 봤습니다.

계속 읽기

프로그래밍 리소스 브리핑 – 2014 #1

목록

JavaScript

  1. koa.js – ES6 generator 기반 Node.js 웹 응용프로그램 프레임워크
  2. Grunt Devtools – Grunt를 위한 Chrome 개발 도구 확장
  3. node-webkit – Chromium과 Node.js 기반의 데스크탑 응용프로그램 개발 도구
  4. Breeze – JavaScript 데이터 접근 프레임워크
  5. Knockout.js Lesson – KnockoutJS 동영상 강의 시리즈
  6. A comparison of the two-way binding in AngularJS, EmberJS and KnockoutJS – Angular, Ember, Knockout의 two-way 바인딩에 대한 비교
  7. Node.js Tools for Visual Studio – Visual Studio의 Node.js 개발 도구
  8. Warming up with Ember.js – Code School의 Ember.js 강좌
  9. Edge.js – 단일 프로세스 내에서의 Node.js 코드와 .NET 코드 조합

.NET Framework

  1. C# for System Programming – Microsoft에서 높은 성능과 생산성을 목표로 준비중인 C# 기반의 새로운 언어
  2. .NET Fiddle – C#과 Visual Basic 용 fiddle 서비스
  3. JNBridge – 공유 메모리와 TCP 기반 Java와 .NET의 interop 솔루션
  4. C#을 싫어하는 이유, C#을 좋아하는 이유 – C#을 싫어하고 좋아하는 이유에 대한 질문과 답변들
  5. MVC interview questions with answers – ASP.NET MVC 취업 인터뷰 예상 질답 모음
  6. Entity Framework 5 vs. NHibernate 3.3 with Oracle 11g – Oracle 사용에 있어서의 Entity Framework과 NHibernate 비교
  7. one true error – 응용프로그램 오류 관리 서비스

기타

  1. ‘성당과 시장’ 번역서 무료 배포
  2. Visual Studio Online “Monaco” – 웹에서 실행되는 클라우드 Visual Studio의 첫 모습
  3. bento – 각종 웹 기술 학습 정보를 정리해 제공하는 사이트

계속 읽기

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를 사용해 웹에서 직접 실습 가능하도록 멋지게 만들어 졌습니다.

계속 읽기

JavaScript의 미래, 그리고 C#의 현재 – 비동기 프로그래밍

Promise

얼마전 JavaScript의 promise 구현에 대한 멋진 글을 읽었습니다. 마음 같아서는 당장이라도 한국어로 번역해 널리 퍼뜨리고 싶을 정도로 내용이 알차고 이해하기 쉽게 쓰여진 글이었지만 제 허접한 영어 실력이 허락하지 않았습니다. 다행스럽게도 이미 뛰어나신 분들이 번역 작업에 착수한 것으로 알고있습니다. 곧 많은 국내 프로그래머들에게 제공되겠죠.

많은 내용 중에도 개인적으로 유독 눈길이 가는 부분이 있었는데 바로 ‘Bonus round: Promises and Generators’ 섹션이었습니다. 현재 ES6(ECMAScript 6 Specification)에 포함되기 위해 실험단계에 있는 generator라는 기능이 소개되는데, 새로운 키워드인 yield를 사용해 함수의 코드 진행을 제어하는 기법입니다. 이 기능을 이용해 비동기 코드를 마치 동기식 프로그램처럼 작성할 수 있습니다. 많은 분들이 이 멋진 기능에 눈길이 가셨을텐데요, 저 역시 마찬가지입니다. 하지만 저같은 경우는 눈길이 갔던 이유가 하나 더 있습니다. 바로 C#이 가진 기능과 너무도 닮아있었기 때문입니다.

계속 읽기

가볍고 편리한 개발 도구 Brackets

Brackets

얼마 전 정말 별 상관없는 내용에 대해 구글링하다가 우연히 MIT 라이선스의 다중 플랫폼(Linux, OS X, Windows) 지원 웹 개발 도구 Brackets(brackets.io)를 알게 되었습니다. 최근 이래 저래 자주 사용하게 된 Node.js를 다루는 데에도 아주 편리해 보여서 바로 설치해 사용해 보고 짧은 사용 경험을 정리해 봤습니다.

Brackets

계속 읽기

Sublime Text에서의 Grunt 빌드

개발 도구로 Sublime Text를 사용한다면 빌드 시스템을 작성해서 코드를 빌드 할 수 있습니다. Grunt를 사용하여 Node.js 응용프로그램을 개발할 때에도 Sublime Text에 빌드 시스템을 등록하면 편리합니다. 이 포스트는 Sublime Text 3 Beta Build 3047 기준 Grunt 빌드 시스템 등록 방법을 설명합니다.

계속 읽기