C# 에서 const 와 readonly는 상수형 타입입니다. 보다 자세히 말씀드린다면, const는 컴파일 타입의 상수이며, readonly는 런타임 상수입니다. const 컴파일 타입의 상수이다. (컴파일 시 const 변수의 값을 가져온다.) 내장자료형 (정수형, 실수형, Enum, String)에 대해서만 사용 할 수 있다. 변수 선언과 동시에 값을 할당 해야 한다. 메모리 할당 위치는 Stack Memory 이다. 단, static 선언을 하면 Heap Memory에 저장 가능하다. readonly 런타임 상수이다. (exe 또는 dll을 사용할 때 변수의 값을 가져온다.) 모든 자료형에 사용 할 수 있으며, 생성과 동시에 초기화 할 필요는 없다. 단, 생성자 단계에서 단 1번 할당을 통해 초기..
개발자마다 각자의 코딩 스타일이 존재합니다. 다수의 개발자들이 모여 팀 단위로 프로젝트를 진행한다면 코딩 컨벤션 정도는 사전에 맞추고 진행하는 것이 도움이 됩니다. 또한 코딩 스타일에 대한 정형화 역시 사전에 맞추고 진행하면 다른 개발자들이 소스를 봐도 큰 어색함 없이 작업이 가능한 장점이 있습니다. 이를 위해 강제성을 부여해야 한다고 저는 생각하는데요. 이때 VisualStudio의 setting 파일을 이용해서 작업을 진행해도 되지만, 신규 입사자가 생길경우 해당 셋팅작업이 누락되는 경우 강제성을 부여한 코딩 스타일이 어긋나게 됩니다. 이를 대비하기 위해 프로젝트에 종속 시켜서 코딩 규칙을 정형화하는 것이 좋으며, EditorConfig를 이용하는 방법을 정리했습니다. EditorConfig 파일 생..
개발을 할때 단순히 기능만 동작하는 코드를 만드는 것뿐만 아니라, 읽기 좋은 코드를 작성하려고 팀내에서 정형화된 코딩 규칙을 이용해 유지보수하기 좋은 코드 등을 만들기 위해 많은 노력을 합니다. 이를 위해 코드 리뷰 등을 통해 동료 개발자들이 직접 검토하는 경우도 있지만 정형화된 패턴에 대해서는 소스 코드를 분석해주는 도구를 이용할 수 있다. 이러한 것을 코드 정적 분석이라고 합니다. 몇가지 툴을 찾아본 결과 아래 SonarQube 라는 툴을 사용해보기로 하였습니다. https://www.sonarsource.com/ Code Quality and Security | Developers First | SonarSource Products First Our prime focus and dedication ..
PHP를 이용해서 개발해보신 분들은 아시겠지만, 암호화 방법중에 기본적으로 이용하는 방식이 MD5를 이용해서 암호화 하는 방식입니다. 이번에 PHP로 개발되어 있는 사이트를 .NET Core 3.1 로 변경하는 도중, 비밀번호를 MD5를 이용해서 암호화한 부분이 있어서 C#으로 대체해보았습니다. MD5 클래스 네임스페이스 : System.Security.Cryptography 위 네임스페이스에 정의 되어 있으며, MD5 해시 알고리즘의 모든 구현이 상속될 추상 클래스를 나타냅니다. static string GetMd5Hash(MD5 md5Hash, string input) { // Convert the input string to a byte array and compute the hash. byte[]..
C#을 이용해 개발 중이라면, 간혹 실행중인 코드에 대한 호출자정보를 찾아야 할 경우가 있습니다. Method 이름, 실행중인 파일, 또는 행 번호와 같은 구체적인 호출자정보 일 수 있습니다. 저는 주로 이런한 내용이 필요했던 경우는 실행중인 프로그램내에서 발생한 Log를 남길 경우, 어느 파일, 어느 Method 에서 발생한 오류인지를 남기 위해서 필요했습니다. 좀 더 빠른 파악이 가능하고, 체계화된 프로세스를 이용중이라면 빠른 디버깅이 가능하기 때문입니다. 이를 위해서 호출자정보를 찾던 도중 .NET Framework 4.5에 추가된 CallerMemberAttribute 에 대해서 알게 되었습니다. 기존에는 Reflection 을 이용해서 처리 하였지만, Reflection이 관련된 경우 현재 코드..
코딩을 하다보면, 컨텐츠의 타입을 결정하는 부분을 Enum 을 이용해서 정의하는 편입니다. DB에 저장된 데이터 및 기획데이터들과 유효성을 체크해야 하는 부분이 존재하는데요. 이때 검사를 유용하게 하는 방법을 정리하였습니다. 현재 저희 프로젝트에서 사용하고 있는 각 스테이지의 승리여부를 결정하는 Enum 값 입니다. /// /// 스테이지 승리여부 /// public enum STAGE_WIN_TYPE { /// /// 승리 /// WIN = 0, /// /// 패배 /// LOSE = 1, /// /// 비김 /// DRAW = 2, /// /// 포기 /// GIVEUP = 3, } 해당 Enum 값을 이용해서, 데이터의 유효성을 체크 하는 부분에 IsDefined Method를 이용하면 간편하게 값..