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
[11699] 싱글턴을 제대로 구현할 수 있는 방법이 없을까요?
구라에몽 [astonis] 1439 읽음    2008-01-16 10:23
델파이에 입문한지 얼마 안된 초짜 프로그래머입니다.

싱글턴을 사용할 일이 있어서 구현해보려고 이래저래 방법을 찾고 있는데

아직까지 방법을 못 찾고 있습니다.

제가 C++/JAVA 혹은 C#에서 구현하고 사용하던 방식으로 싱글턴을 구현했으면 하는데

일단 문제가 생성자로의 접근을 막지 못한다는 것 입니다.

private 으로 생성자(이름은 Create)를 선언했음에도 여전히 Create이 불려지더군요.

TObject의 생성자인 것 같기도 하고...

그래서 다른 방법을 찾아 봤는데 역시나 인스턴스가 중복으로 생성되는군요.

찾아본 몇가지 방법으로는

http://www.delphiunion.com/dwp/etc/singletonclass.html

http://delphi.borlandforum.com/impboard/impboard.dll?action=read&db=del_tutorial&no=69

인데

전자는 생성자 자체를 활용하는 것 같은데 테스트 해 본 결과 되지 않았고

두번째는 GetObject()가 있기는 하지만 Create로의 접근이 막혀 있지 않아 문제가 있다는 것 입니다.

즉 GetObject()를 통하지 않고서도 객체가 생성이 되기 때문에 싱글턴이 아닙니다.

제가 아직 경험과 지식이 짧아 잘 모를수도 있지만 제가 아는 바로는 현재 위와 같은 문제가 있는데

혹시 해결할 수 있는 방법이 없을까요?

델파이는 버전6을 사용하고 있습니다.

* 찾아본 두 번재 방법으로 만들어본 테스트 코드입니다.
// project2
program Project2;

{$APPTYPE CONSOLE}

uses
    SysUtils,
    Unit1 in 'Unit1.pas';

var
    s1, s2, s3 : Singleton;

begin
    s1 := Singleton.GetInstance();
    s2 := Singleton.GetInstance();

    s1.msg := 's1';
    s2.msg := 's2';
    s3 := Singleton.Create();
    s3.msg := 's3';

    Writeln( s1.msg );
    Writeln( s2.msg );
    Writeln( s3.msg );
end.
// end project2

// unit1
unit Unit1;

interface
    type
    Singleton = class
    public
        msg : String;
        class function GetInstance() : Singleton;
    end;

implementation
    var
    instance : Singleton = nil;

    class function Singleton.GetInstance() : Singleton;
    begin
        if instance = nil then
        instance := Singleton.Create();

        Result := instance;
    end;
end.
// end unit1

+ -

관련 글 리스트
11699 싱글턴을 제대로 구현할 수 있는 방법이 없을까요? 구라에몽 1439 2008/01/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.