Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[10228] Re:씨빌더를 사용하다가 델파이로 전환중인 사람인데요..
문호상 [sykelos] 1643 읽음    2005-09-08 13:05
델마당에서 좋은 내용이 있어서 일단 복사해놨는데
질문자께서 원하시는것이 아래의 글에 있는거 같아서 올림니다...

델마당의 게시물을 복사햇는데 아쉽게도.. 누구의 것인지는 모르겠네요...

object형을 주의깊게 보세요..





[질문]고수님들의 자료구조 알고리즘은 무엇을 쓰시나요?
c와 c++에서는 STL이 존재하듯,

델파이에서 주로 사용하는 자료의 형식은 TList가 아닐까합니다.


STL의 Map이나 기타 Hash 기능 등을 라이브러리를 직접 제작해서

사용하시는지?

아니면 다른 공개된 좋은 라이브러리가 있는지?

고수님들은 델파이로 자료를 관리할때 주로 무엇으로 자료를 관리하는지?



일반화된 (STL처럼) 자료구조 라이브러리가 무엇인지 알았으면 좋겠네요.

많은 고수님들의 답변 바랄게요~~ 


  [답변] [질문]고수님들의 자료구조 알고리즘은 무엇을 쓰시나요? 
  딴지는 아니지만요..
 
  비유가 약간 잘못된듯 합니다.
 
  c++에서의 STL은 Type Safe한 자료 구조형 클래스를 자동으로 생성시켜준다는 개념으로 보시면 되겠습니다.
 
  하지만, 이러한 형태의 Template은 현재로선 c++에서만 존재하고 있죠.
 
  델파이나, 자바, c#(현재의 .net framework 1.1)에서는 존재하지 않은 형태의 문법입니다.
 
  즉 TList 같은것은 Type Safe한 형태의 컬렉션이 아니기 때문에, STL과 비교대상이 못됩니다.
 
  이러한 형태의 프로그래밍을 Generic 프로그래밍이라 하는데, .NET Framework 2 에서 지원할 예정이라고 합니다. 이제 STL의 강력함을 c#이나 vb.net에서 지원할 예정이고,
 
  그렇다면, CLI를 따르고 있는 delphi 8 이상의 버젼에서도 지원하게 될겁니다.

    호곡... o_o 
    delphi8 에서 stl 을 지원한다는 말은.. 그럼 드뎌 지겨운 try-finally 에서 해방될 수 있다는것인가요?? 사실 C++은 스택에 object를 만들 수 있기땜에.. 오히려 델파이에서 더 필요한 기능인것 같은데요...쿠헐..(CLI 라는게 뭔지요..-_-??)

      [답변] 호곡... o_o 
      정적인 객체는 이미 옛날 오브젝트 파스칼 시절에 추가 되었다가 지금은 불필요해서 잘 안쓰이는걸로 알고 있습니다.
     
      program test;
     
      type
       tobj1 = object
         procedure sayhello;
       end;
     
      procedure tobj1.sayhello;
      const
       hello = 'hello world';
      begin
       writeln(hello);
      end;
     
      var
       obj1: tobj1;
     
      begin
       obj1.sayhello;
       readln;
      end.
      

        [답변] [답변] 호곡... o_o 
        object 타입은 정적인 객체라서 불필요한것이 아니고, 생성자/소멸자를 쓸 수 없는등 몇가지 단점이 있기때문에 불편해서 잘 안쓰이는거지요....소멸자가 필요 없도록 잘 만들어 쓰면 그런대로 쓸만함.. (C# 에서는 단점을 보완해서 부활했다고...)

          object 타입의 생성/소멸자 
         
          object도 생성/소멸자가 있으며 상속받거나 vitual 선언 같은 것이 다 됩니다.
          델파이 때부터 된 것은 아니고 Borland Pascal이 객체 지향을 지원하면서부터
          지원된 것입니다.
         
          특히 게임같이 생성/소멸이 많은 오브젝트를 관리하는 경우에는 object 로 선언
          하는 것이 굉장히 큰 이득이 될 수 있습니다. 게임이라면 TObject에서 상속받아서
          사용해야할 class는 거의 없을 것이므로 object로 선언해도 되는 것인데요...
          똑같은 기능의 class와 object를 놓고 비교해보면 object 쪽이 생성/소멸 시간이
          2-3배 빠릅니다. (예전에 강좌나 하나 써볼까하고 비교 자료를 만들었는데 대충
          그정도 차이가 났던 것으로 기억합니다.)
         
          슈팅 게임 등에서 탄환이나 파편같이 빨리 생기고 사라지는 것들에 적용하면
          다소나마 시간을 절약할 수 있습니다.
         
          그런데.. 제가 쓰는 델파이5의 도움말에서는 new()에서 object 생성을 할 수 있다는
          내용이 빠져 있군요.. (dispose()도 마찬가지...)
         
          아래는 대충만들어 본 소스입니다.
          생성자와 소멸자와 가상함수의 호출 순서를 따라갈 수 있습니다..
         
          type
           Pobj1 = ^Tobj1;
           Tobj1 = object
             constructor Create;
             destructor  Destroy;
           protected
             FBuffer: pointer;
           public
             procedure InitMem(); virtual;
           end;
         
           // 상속을 받자
           Pobj2 = ^Tobj2;
           Tobj2 = object(Tobj1)
           public
             procedure InitMem(); virtual;
           end;
         
          constructor Tobj1.Create;
          begin
           InitMem();
          end;
         
          destructor  Tobj1.Destroy;
          begin
           if assigned(FBuffer) then
             FreeMem(FBuffer);
          end;
         
          procedure Tobj1.InitMem();
          begin
           GetMem(FBuffer, 1000);
          end;
         
          // virtual로 선언된 것이기에 재구성
          procedure Tobj2.InitMem();
          begin
           GetMem(FBuffer, 2000);
          end;
         
          procedure TForm1.Button1Click(Sender: TObject);
          var
             obj1, obj2: Pobj1;
          begin
             // Pobj1으로 생성
             obj1 := new(Pobj1, Create);
             dispose(obj1, Destroy);
         
             // Pobj2로 생성
             obj2 := new(Pobj2, Create);
             dispose(obj2, Destroy);
          end;


            [답변] object 타입의 생성/소멸자 
            헉.. 이런 방법이!! 저는 class 처럼 생성자를 호출하다가 안되길래 안되는줄 알았었는데.. 이런 방법이 있었군요.. 감사..
            근데 New 를 이용하게 되면 동적인 생성이라서 어차피 Dispose 를 꼭 불러줘야 하잖아요.. 정적으로 만들면서 생성자/소멸자가 불리게 하는 방법은 없을까요.. C++ 에서는 너무나 간단히 되는데 델파이는 안되니깐... 쩝.....
            

    [답변] 호곡... o_o 
    흠... 제가 말한건 Native 컴파일러 상의 기능을 말한것이 아니라, .net framework 하에서 돌아가는(managed라고 표현함)것을 말하는 겁니다. 그런데, 밥벌레 님은 try finally문을 말씀하시는 것은 자원 해제와 관련되서 말씀하시는거죠?
   
    파일이나, 기본 화면 리소스에 대해 시스템에 돌려주는 것은 managed 환경에서도 요구되는 것이지만(주로 try-finally로), 힙상에 생성되는 객체에 대한 해제는 managed 환경하에서 자동으로 이루어집니다. 그러므로 그러한 부분은 일부로 해제시켜 줄 필요성이 없는 것이지요.
   
    그리고 CLI는 Common Language Infrastructure라고 .net framework를 따르기 위한 표준 스펙을 말하는 겁니다. delphi 8 for .net은 CLI를 따르고 또 따라야만 하므로, .net framework 2.0이 발표되면 delphi 8 for .net도 업그레이 될테고 그러면 자연스레 generic 프로그래밍을 지원하게 될거라고 설명을 드린겁니다.
   
    즉, unmanaged 하에서 delphi가 generic을 지원하게 될지는 좀더 두고 봐야 하겠죠.
    하지만, managed 상에서는 확실히 지원할겁니다.
    
      [답변] [답변] 음 제가 이해를 잘 못했던것 같습니다..-_-; 
      저는 템플리트를 델파이에서도 지원 하게 된다는 말로 알아들었습니다.. 이에따라 문법도 확장될테고.. 문법이 확장되면 ATL 의 스마트 포인터 같은 기법을 사용할 수 있지 않을까 하는 생각이 언뜻 스쳤던건데.. 조금 멍청한 질문을 했던것 같네요..-_-;;; 생각해 보니 리소스 관리는 xenon 님께서 말씀하신 쪽으로 발전할것 같네요.. unmanaged 환경에서도 좀 됐으면 좋겠는데...헐...
     
      xenon wrote:
      > 흠... 제가 말한건 Native 컴파일러 상의 기능을 말한것이 아니라, .net framework 하에서 돌아가는(managed라고 표현함)것을 말하는 겁니다. 그런데, 밥벌레 님은 try finally문을 말씀하시는 것은 자원 해제와 관련되서 말씀하시는거죠?
      >
      > 파일이나, 기본 화면 리소스에 대해 시스템에 돌려주는 것은 managed 환경에서도 요구되는 것이지만(주로 try-finally로), 힙상에 생성되는 객체에 대한 해제는 managed 환경하에서 자동으로 이루어집니다. 그러므로 그러한 부분은 일부로 해제시켜 줄 필요성이 없는 것이지요.
      >
      > 그리고 CLI는 Common Language Infrastructure라고 .net framework를 따르기 위한 표준 스펙을 말하는 겁니다. delphi 8 for .net은 CLI를 따르고 또 따라야만 하므로, .net framework 2.0이 발표되면 delphi 8 for .net도 업그레이 될테고 그러면 자연스레 generic 프로그래밍을 지원하게 될거라고 설명을 드린겁니다.

        [답변] [답변] [답변] 음 제가 이해를 잘 못했던것 같습니다..-_-; 
        네에 ^^
        Unmaged는 아마도 지원 안하겠죠... 거의 확실시 된다는 =_=;;
       
        지원 하려면 진작에 했을텐데, 솔직히 Template 개념까지 첨부가 된다면
        델파이의 간결성에 큰 결함이 생기지 않을까하는 염려도 생깁니다.
       
        뭐... c++이야 이미 공인받은 지져분함의 극치이기 때문에, Template이 첨가되었을때에도 그려려니~ 했지만은요...
       
        하지만, 이제 완전히 개발 패러다임은 .NET 판이 될테니 Unmaged에서 델파이가 STL을 지원 안하는 아쉬움은 단지 몇년간만 지속되리라 봅니다.
       
        롱혼이 나오면 심지어, 윈도우의 세밀한 접근도 WinFX라는 Mangaged API로 접근가능하다라고 하니깐요...
       
        DirectX를 이용한 게임개발도 Managed로 개발가능하며 꽤 괜찮은 퍼포먼스가 나왔다라는 결과도 있습니다.
       
        제가 보기에는 그냥 편하게 Managed 코드를 이용한 개발을 익히시는 것도 나쁘지는 않을꺼 같아요...
       
        .net framework를 쭈욱 들여다 보면 정말 잘 만들어진 클래스 라이브러리라고 생각이 들거든요...
       
        아.. 그리고 조만간 .net 관련 사이트를 만들까 하는데요 놀러와주세요 ^^

+ -

관련 글 리스트
10226 씨빌더를 사용하다가 델파이로 전환중인 사람인데요.. 최진용 979 2005/09/08
10228     Re:씨빌더를 사용하다가 델파이로 전환중인 사람인데요.. 문호상 1643 2005/09/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.