private1 Articles

  1. 2007/01/24 private 생성자.. (2)
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 생성자를 사용하는것이 유용하게 쓰인다. ^^


div>