C# 2007/01/24 21:24

private 생성자..

나는 private로 만드는 생성자는 잘 쓰지 않는다. 글세 나만 잘 안쓰지 다른 사람들은 잘쓸지도 모르겠다. ^^ 백마디 말보다 소스 한번 보자~~

class PrivateConstruct
{
    private static PrivateConstruct privateConstruct = null;
    private int sumX;
    private int sumY;
    private PrivateConstruct()
    {
        Console.WriteLine("Private Construct~~");
    }
    public static PrivateConstruct getInstance()
    {
        if (PrivateConstruct.privateConstruct == null)
            PrivateConstruct.privateConstruct = new PrivateConstruct();
        return PrivateConstruct.privateConstruct;
    }
    public int Sum()
    {
        return (this.sumX + this.sumY);
    }
    public int i
    {
        get
        {
            return this.sumX;
        }
        set
        {
            this.sumX = value;
        }
    }
    public int j
    {
        get
        {
            return this.sumY;
        }
        set
        {
            this.sumY = value;
        }
    }
    static void Main(string[] args)
    {
        PrivateConstruct pc1 = PrivateConstruct.getInstance();
        PrivateConstruct pc2 = PrivateConstruct.getInstance();
        pc1.i = 1;
        pc1.j = 2;
        Console.WriteLine("pc1 의 sum() 메서드 " + pc1.Sum());
        Console.WriteLine("pc2 의 sum() 메서드 " + pc2.Sum());
    }
}



 

결과
Private Construct~~
pc1 의 sum() 메서드 3
pc2 의 sum() 메서드 3



위에서 PrivateConstruct 는 싱글톤 형태의 서비스를 한다. 싱글톤 서비스란 나는 웹서비스 쪽에서 처음 접했는데, 어떤 서비스를 요청할때 마다 매번 새로운 서비스를 만드는 것이 아니라, 딱 한번만 그 인스턴스를 만드는 것이다. 그래서 만든것을 가져다 사용 하는것이다. 그럼으로 이점은 숫자 카운팅이나 잊어버리지 않을 성격의 것들을 기억 할수 있다. 웹서비스가 멈출때까지...

그것을 구현하기 위해서 private 형으로 생성자를 선언했다. PrivateConstruct는 단 한개의 인스턴스만 있으면 된다. 뭐 위에 프로그램은 간단해서 문제가 없을지 모르겠지만, 만약 큰 통합 프레임워크 같은 경우에는 PrivateConstruct를 쓰게 된다면 어디선가 그냥 생성할수 있을것이다. 이것을 방지 하기위해서 private 생성자로 생성자을 만들어 놓으면 그냥 가져다 쓸경우 생성을 할수 없게 된다. 이런 경우 private 생성자를 사용하는것이 유용하게 쓰인다. ^^

Trackback url :: http://hahakbs.dothost.co.kr/trackback/77

댓글을 달아 주세요

  1. guid별로 클래스를 생성 해고 써야 하는 경우에도 쓸만하겠군요.

    그 중 소켓 통신을 할 때 꽤 유용할 수 있겠네요 ㅎ
    (private생성자는 오픈 소스 중 푸바2000 0.9x버전의 SoundOut객체를 생성 하는 곳에서 만 보았네요 ;;;)

    • 뭐 싱글톤 서비스의 류에서는 유용하다 보면 되겠죠 ^^
      웹서비스에서 딱한번 초기화해서 가지고 있어야 할 정보 같은거요

      초기화 파라미터나 등등등. 한번 등록하고 그 등록한 그대로의 정보만 쓸때..
      전 그외 많이 접한게 없어서요 ^^


div>