사실 전역변수 처럼 쓰이는 각종 응용 프로그램 설정 내역들이 있다.

보통은 app.config 혹은 web.config 를 통해 값을 읽어오게 되는데,

그 로직 아무리 짧아야, 2~3줄씩 되고,

설정이 필요할 때 마다 app.config 혹은 web.config에서 일일히 읽어오는 것도 나름대로 곤욕이다.

그러기 위해 Sigleton 패턴을 사용하는게 제일인듯.

 

그런데, 이런 Singleton 패턴은 Windows 응용 프로그램 같은 경우야,

하나의 인스턴스니 상관 없지만, 웹 응용 프로그램같은 경우에는 조금 난감한 것도 사실.

 

이에 현재 나름대로 고민해서 짜본 방법이 아래와 같다.

 

public static class ConfigManager()

{

        public static string TempFileLocation

        {

                get

                {

                          string sResult = string.empty;

                          try

                          {

                                 sResult = ConfigurationManager.AppSettings["tempfolder"];

                          }

                          catch

                          {

                           }

                           return sResult;

                 }

 

         }

}

 

저렇게 만들면 ConfigManager를 일일히 new 할 필요가 없다. Heap이 아닌 응용 프로그램 저장 위치에 단 한개의 인스턴스만 존재하므로, 최소한 이 부분을 띄워주는데에서는 무조건 저 한개의 로직에서 처리가 된다.

저 방법의 핵심은 static 인데, static으로 정의되는 내용은 어쨌던 별도의 Instance 생성이 필요없다는 훌륭한 강점을 가지게 된다.

 

그런데, 설정 구성이 많아지게 되면 그 만큼 코드도 무척 길어지게 된다. 처음 설정 내역이 4~5개 까지는 그럭저럭 봐주는데, 설정 내용이 20여개를 넘자, 매번 저렇게 구성하는것도 환장하겠고, 더욱이 appsetting의 Key 값이 변경될때도 나름 고역. 
더욱이  매번 appsetting 에서 값을 읽어오는게 영 마음에 꺼림찍했다.(NET 프레임워크 개발한 분들도 나름 천재들이니, 옵티마이징 하면, 저 로직도 나름 정리가 잘 되리라 생각은 하지만)

그럼 데이터를 1회만 읽어오고, 모두 한자리에 때려 박는 방법을 다시 생각했다.

public static class ConfigManager()

{

       static ConfigManager()

       {

                try

                {

                        ConfigManager.tempFolderLocation =
                                     ConfigurationManager.AppSettings["tempfolder"];

                }

                catch

                {

                }

         }

 

        static string tempFolderLocation;

        public static string TempFileLocation

        {

                get

                {

                          return ConfigManager.tempFolderLocation;

                 }

 

         }

}

 

즉 static 클래스 안에 Constructor를 만들어서 그 안에서 1회 읽어오게 하고,

실제 일반 사용자가 사용하는 부분에서는 static으로 저장된 변수 값만 읽어가게 되는 것이다.

직접 XML이나, INI 파일 파서를 만든 상태라면, 그 로직을 Constructor에 만들고

구성하면 되는 것이다.

즉 핵심은 static 클래스에서 static 생성자를 만드는 것!. 이게 핵심.

728x90

+ Recent posts