C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[12428] 델파이 2006에서 확장된 문법 덕분에 C++빌더가 덕을 보다...
박지훈.임프 [cbuilder] 3242 읽음    2006-11-21 07:44
델파이2006에서 워낙 많은 것이 추가되어서 상대적으로 별로 빛을 못 본 부분이 있는데...
record 문법이 확장되었습니다. 파스칼에서 record는 C++의 struct에 해당하는 문법인데요.
정확하게 말하면 C++이 아닌 C의 struct라고 말하는 게 맞겠습니다. C에서 C++로 오면서 struct가 사실상 class와 동일한 기능을 모두 가지면서 기본 비저빌리티가 public인 정도만 다르게 되었으니까요.

그런데, 델파이 2006에서는 이 record 문법이, 한마디로 말하자면, C++의 struct와 비슷하게 바뀌었습니다.
예전에는 record는 멤버함수(메소드)를 가질 수 없었거든요. 물론 아직도 약간의 제한은 여전히 남아있습니다만.
이 문법 확장에 대한 내용 자체는 BDS2006이 처음 나올 당시, 그러니까 작년 말쯤에 리뷰 가이드에서 본 내용인데,
델파이 어바웃 닷컴 사이트에 이에 대한 글이 올라왔길래 퍼뜩 기억이 났습니다.
http://delphi.about.com/od/adptips2006/qt/newdelphirecord.htm

이 덕분에, 델파이보다는 오히려 C++빌더에 더 큰 도움이 되게 되었는데요.
먼 소리인가 하면...

델파이 소스를 C++빌더에서 컴파일시킬 때, 거의 유일한 제한으로 object라는 문법이 있습니다.
이 object 문법은 터보 파스칼 5.5에서 처음 OOP가 도입될 때 class보다 먼저 객체 개념을 가져온 키워드인데요.
델파이의 class는 C++의 클래스와는 달리 스택에서는 객체를 생성할 수 없고 오직 히프에만 생성 가능하죠.
무슨 말인가 하면, 정적 생성이 불가능하고 동적으로 생성해야만 한다는 겁니다.
반면 object는 동적으로 생성할 수는 없고 정적으로만 생성할 수 있는 키워드입니다.

그런데, 델파이의 헬프를 보면 이 object 키워드가 곧 사장될 키워드이고 곧 없어질 것이므로 사용하지 말라고 되어 있고요.
실제로 델파이 닷넷에서는 사용이 불가능하게 되었다고 합니다. (델파이 닷넷을 아직 제대로 써보지 않아 확인은 못해봤음)
그런데 Win32 델파이에서는 아직도 object 키워드를 사용할 수 있고, 생각보다 꽤 많은 델파이 개발자들이 이 키워드를
무분별하게 남발(?) 하고 있습니다. (그 중에는 제 웬쑤인 류모 개발자도 있죠)

곧 없어질 문법이다, 호환성에 문제가 있을 수 있다라는 경고에도 불구하고 이 object 키워드를 선호하는 개발자가 적지
않은 것은, 오직 정적으로 스택에 생성할 수 있기 때문에 다루기가 아주 편하다는 것 때문입니다.

C++빌더에서 이넘이 문제가 되는 것은, C++빌더가 델파이의 모든 소스를 다 컴파일할 수 있으면서도 유독 이 object
키워드만은 컴파일을 못하고 에러를 뱉어낸다는 것입니다. C++빌더의 첫버전부터 현재의 2006 버전까지 마찬가지입니다.
그것은, 물론 사장될 키워드여서 지원을 안했다고 볼 수도 있겠지만, 아마도 진짜 이유는 컴파일하면서 C++ 헤더를 생성할
때 문제가 있기 때문일 겁니다.

자, 그런데 왜 record 문법이 확장된 것이 C++빌더에게 도움이 되었을까요.
기존 델파이 소스의 object 키워드를 보이는 족족 record로 바꿔버리면, 델파이에서는 물론 C++빌더에서도 컴파일할 때
아무 문제도 없어집니다. 헤더 생성도 제대로 되고, 실제 실행도 제대로 됩니다.

이 정보는 볼랜드의 고객지원 사이트인 Borland Answers에서 나온 것입니다.
http://support.borland.com/thread.jspa?threadID=2707&tstart=225

If you have BDS2006, you can change it into "record", since no
inheritance nor virtual member functions are involved.
...
Note that this will not work with versions below BDS2006. BDS2006 is the
first version which allows this.

앞에서도 말했다시피, C++빌더가 델파이 소스를 컴파일하지 못하는 거의 유일한 경우가 이 object 키워드 때문이었습니다.
아주 가끔 이 object 키워드를 만나는데, 그때마다 코드를 상당히 많이 수정해야 했었습니다. 정적으로 생성하는 코드를
동적으로 생성하도록 다 뜯어고쳐야 했기 때문에, 해당 객체를 사용한 부분이 꽤 많을 경우 수정할 양도 많아지고, 또
다른 함수 등의 인자로 주고받을 경우에는 문제가 더 복잡해졌었습니다. 때로는 짜증이 나서 포기해야 할 경우도 있었고요.

하지만 이제 이 문제도 바이바이입니다. 속이 정말 후련하군요~ ^^
(물론 C++빌더 2006에서 개선된 것이므로 이전의 C++빌더 버전에서는 문제가 그대로 남아있지만요)
류종택 [ryujt]   2006-11-21 11:53 X
류모 개발자 ㅡ.ㅡa
TohnoLyn [tohnokanna]   2006-11-22 01:03 X
전 델파이 몇년 하면서도 object 라는 키워드가 있는줄도몰랐네요 ㅡ.ㅡ
박지훈.임프 [cbuilder]   2006-11-22 01:46 X
당연히, 델파이의 첫 버전부터 삭제 예정 키워드였으니까요.
그런데도 일부 개발자들이 계속 object 키워드를 사용하니까 볼랜드에서도 없애질 못했던 것 같습니다. 어쨌든.. C++빌더와 델파이 사이의 호환성의 유일한 걸림돌인 이 키워드 문제가 약간 다른 방법을 통해서나마 해소되어서 저로선 기쁜 일이랍니다. ^^

+ -

관련 글 리스트
12428 델파이 2006에서 확장된 문법 덕분에 C++빌더가 덕을 보다... 박지훈.임프 3242 2006/11/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.