본문 바로가기
연구하기/Computer Engineering

MS 의 C# 코딩이 익숙해지면서 - 1

by 썰렁황제 2005. 2. 23.
자바와 비교하면서  몇 가지 알게 된 점이 있어 적는다..

  1) 자료구조의 동기화 기능이 한 클래스에 대한 래퍼 형식으로 구현되어 있다.

  자바의 경우 Hashtable 은 액세스 시 동기화 지원, Hashset 이나 Hashmap 의 경우는 액세스 시 동기화를 지원하지 않는 형태로 분리되어 있다. 물론 이것은 기능적으로 분류한 것이 아니라, 초기에 자료구조에 동기화가 필요할 것이라고 생각되어 걸어 두었다가, 실질적으로 코딩시에 자료구조 클래스의 동기화가 별 의미가 없고, 그렇다고 놔두자니 퍼포먼스가 저하되는 현상이 발생하여 1.2 부터 새로이 등장한 자료구조에서는 '니가 알아서 해라' 라고 하면서 동기화를 지원하지 않는 자료구조들이 탄생한 것이다.

  .NET 에서는 각 자료구조들이 래퍼 클래스를 따로 가지고 있어서 통상시에는 비동기, 래퍼 클래스를 사용할 경우 동기화를 지원하는 형식으로 되어 있다. 래핑시켜주는 작업은 각 자료구조의 static 메소드를 통하여 수행할 수 있게 되어 있고, 그렇게 생성되어 돌려진 자료구조는 액세스 시 동기화 기능을 갖게 된다. 자바도 1.2 이후의 신규 Collection Framework 에서는 이와 비슷한 패턴을 지원하는 게 있는 것으로 알고 있는데, 이보다는 좀 더 복잡한 것으로 안다..


  2) 기본적으로 소켓의 비동기 형식을 지원한다.

  Java 에서는 1.4 이후부터 탄생한 nio 에서부터 맨層?이 비동기 소켓 통신은 .NET 에서는 기본적으로 지원해주도록 되어 있다. 실제로 써 본적은 없기 때문에 정확히 어떤 수준이라고 말하기는 어려운데, 일단 지원한다는 것만 해도 의의는 크다.

  더불어 .NET 의 소켓은 상당히 빠르다. 상황에 따라 다르지만, 디스크의 속도가 비교적 느린 경우 단일 디스크의 파일 복사 속도와 거의 차이가 나지 않을 정도로 빠른 편이다. Java 의 구형 Socket 과 비교하면 꽤 빠르다. 통상의 소켓만으로도 그렇게 느리다는 두려움은 갖지 않아도 될 듯 하다. 물론 파일 전송이 매우 핵심적인 모듈에서야 역시 비동기로 짜거나 Win32API 코딩 이하로 내려야겠지만서도...


  일단은 이 정도... 나머지는 다음에 생각해 볼까?

반응형