태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
BLOG main image
Not so Simple World (251)
이생각 저생각 (92)
이클립스 RCP (10)
Books (15)
잊기전에 회고 (7)
Better SW Development (83)
node.js (OctoberSkyJs) (32)
[뭘, 이런걸 다?] (12)
bảng giá máy tính xách tay
bảng giá máy tính xách tay
Beer Brewing Tutorials
Beer Brewing Tutorials
harga alat kesehatan spirometri
harga alat kesehatan spirometri
air max pas cher
air max pas cher
veste parajumpers
veste parajumpers
«   2017/06   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
797,333 Visitors up to today!
Today 22 hit, Yesterday 164 hit
rss
tistory 티스토리 가입하기!
Recent Entries
2009.10.26 01:18


"자바에서 int 21억이 한계라고? 이봐! C/C++32bit환경이라는 가정하에서 두 배인 42억 까지 가능하다고!"

 

JAVA int 타입 , 그리고 C/C++같은 C 계열의 long 타입 32bit(4Byte)의 크기를 갖는다. 그래서 일반적으로 java int c 계열의 long 타입에 저장 가능한 숫자는 2 32-2,147,483,648 에서 2,147,483,647 까지이다. 하지만, JAVA C 계열 언어와 다르게 unsigned type을 지원하지 않는다. 그래서 C 계열에서는 unsigned 라는 키워드를 사용해서 음수나 양수, 한쪽만 사용하게 될 경우 두 배 크기 영역까지 데이터 저장에 사용할 수 있는 반면 자바는 그렇게 할 수가 없다. 초창기 JAVA로 넘어온 사람들 중 일부는 이에 대해서 불만을 토로했다. 특히 기존 legacy 시스템과 연동해야 하거나, 이미 unsigned type들을 사용하고 있는 네트워크 프로토콜을 사용할 때, 동일한 32bit 타입임에도 long int 로 바로 변환이 되지 않았기 때문에, 이런저런 적지 않은 불편함을 주었다. C C++의 많은 부분을 흡수한 포스트 C++인 자바는 unsigned 타입을 지원하지 않는 걸까?

 

공식적인 이유는 찾기가 어려운데, 적지 않은 개발자들이 signed unsigned 연산으로 인한 다양한 문제(=버그)에 시달렸기에 간결한 언어를 지양하는 자바에서는 signed, unsigned 로 구분해서 사용하는 방법을 아예 제외해 버린 걸로 추측된다. 정답은 JAVA를 만든 사람에게 직접 물어보는 수 밖에.


그런데, 마침 자바 리포트(Java Report)*라는 잡지, 2000 7월에 실린 인터뷰 기사에서 이와 관련된 참고할 만한 이야기가 나온다. “C 언어 패밀리 인터뷰 (The C Family of Languages)”라고 제목 붙은 이 인터뷰에는 데니스 리치(Dennis Ritchie), 뱐 스트라우스트럽(Bjarne Stroustrup), 제임스 고슬링(James Gosling), 이렇게 셋이 참석하는데, 각각 C, C++, JAVA 의 아버지라 불리는 사람들이다.

가히 기념비적이라 할 수 있는 이 인터뷰에는 매우 흥미로운 이야기가 다수 등장하는데, 그 중 간결한 언어와 관련된 질문에 대한 대답의 일부분으로, 고슬링은 다음과 같이 이야기를 한다. “C 개발자들에게 unsigned 에 대해 한번 물어보세요. unsigned 어떻게 되고, 연산이 어떻게 이루어지는지 제대로 이해하고 있는 개발자가 거의 없다는 걸 바로 알 수 있을 겁니다 그러면서 그는, 자바는 다른 언어들이 봉착하게 되는 다양한 경계조건들(edge cases)과 제대로 이해하는 사람이 거의 없는 것들은 포함시키지 않았다고 말했다.

 

그리고 실제로 C 계열 최신 언어인 C#에서는 컴파일러 차원에서 unsigned signed 타입들간의 연산 자체를 상당히 제한하는 형태로 언어의 간결함을 추구하고 있다

 

간결함이냐, 확장성이냐? 는 오래된 주제라 여기서 논의할 내용은 아닌지라 이쯤에서 정리하기로 한다.

 

The C Family of Languages: Interview with Dennis Ritchie, Bjarne Stroustrup, and James Gosling 인터뷰 전문은 현재 여기 http://www.gotw.ca/publications/c_family_interview.htm 에서 찾아볼 수 있다.


* 자바 리포트는 2001년 10월호를 마지막으로 폐간되었다.
* 기타 참조자료
MSDN : C# vs JAVA Data Type
방준영님 블로그 : http://bangjunyoung.blogspot.com/2009/05/cc-signedunsigned.html
저작자 표시 비영리 동일 조건 변경 허락
신고