Language/C#

[C#, 공통] 변수 및 함수 표기 방식

마탁이 2020. 12. 23. 19:40

1. Pascal casing

 - ClickEvent 와 같이 각 의미있는 단어를 대문자로 시작한다.

 - 보통 상수, 네임스페이스, 클래스, 메서드 와 같은 이름을 지을 때 사용한다.

 

2. Camel casing

 - 첫 문자는 소문자, 나머지 의미 있는 단어들은 대문자로 시작.

 - 일반적으로 변수 선언시 많이 사용한다.

 

3. 헝가리안 표기법

 - 버튼의 경우 btnSave 와 같이 특정 접두사(e.g btn)를 붙여 변수명을 만든다.

 - 일반적으로 컨트롤 명과 같이 특별한 구분이 필요할 때 사용하게 되며, 내장 형식(int 등) 선언에서는 피한다.

 

4. C#의 3가지 변수 선언 방법

 1) 명시적 형식 사용

  - int number = 7;

  - List members = new List();

 

 2) <var>

  - C# 3.0에서 새롭게 등장.

  - 자바스크립트와 마찬가지로 var로 선언된 변수는 모든 형식을 사용할 수 있지만,

    차이점은 한번 선언된 형식은 불변으로 선언된 이후에 다른 형식의 값으로 설정할 수 없다.

  - var 형식도 DB 처리와 관련이 있다.

    인라인 쿼리를 작성하는 것을 예로 들어, 하나의 테이블에서 조회를 할 경우도 있지만,

    특정 컬럼만을 가지고 오거나, 여러 테이블과 조인을 하여 보고자 하는 형태로 쿼리를 작성하는 경우가 더 많음.

    그 조회된 결과는 물리적으로 DB에 존재하는 테이블이 아닌 쿼리가 발생할 때 마다 동적으로 생성됨.

    C# 3.0 이전에는 DataTable 이라는 곳에 담거나, 쿼리 컬럼과 일치하는 클래스를 미리 생성해야 했다.

    만약 쿼리가 동적으로 변한다면, 익명 형식과 함께 사용한다.

  - 익명 형식(anonymous type)은 인라인 쿼리 결과처럼 클래스를 명시적으로 선언하지 않고도

    사용하고자 하는 시점에 동적으로 생성가능.

  - 이렇게 동적으로 생성된 익명 형식을 var 타입으로 선언 변수 값으로 설정하면 됨.

  - var 형식은 모든 형식을 설정할 수 있지만 컴파일 시점에 형식이 확정되므로 성능상의 이슈는 없다.

  - 사용가능한 형식

   > 내장형식 : int, string 등

   > 익명 형식

   > 사용자 정의 형식 : class, struct 등

   > .NET FCL : Stream, List<T> 등

  - 선언시 유의 사항

   > var temp; // 초기화 되지 않음

   > var temp = null; // 특정한 형식을 가져야 함.

   > 메서드의 파라미터로 사용할 수 없음.

 

 3) <dynamic>

  - C# 4.0 이전에는 모든 타입이 컴파일 되는 시점에 확정이 되기 때문에 VSTO(Visual Studio Tools for Office)를

    이용하여 엑셀과 같은 오피스 관련 개발과 런타임에 타입이 확정되는 객체의 코드 작성이 어려웠다.

  - 하지만, C# 4.0 에서 dynamic 이라는 새로운 타입으로 보다 쉽게 코드 작성이 가능하다. (다이나믹 룩업)

  - dynamic value = "설정값";

 

 4) <object> vs <var> vs <dynamic>

  - 공통점

   > 모두 다양한 형식으로 값의 설정이 가능하다.

  - 차이점 (인텔리 센스를 확인)

   > object에 할당된 형식은 어떤 형식이든 object로 변환된다.

      다시 원본 형식을 사용하고 싶다면 형 변환 작업이 필요하다.

   > var 형식은 값이 설정되는 시점에 형식을 추정하여 설정된 형식 그 자체이다.
   > dynamic 은 인텔리센스가 동작하지 않는다.

      컴파일 시점에는 어떤 형식인지 확인을 하지 않고, 런타임 환경에서 확인을 하기 때문이다.

      이러한 경우는 개발자가 사용하고자 하는 메서드 등의 멤버에 대해 정확히 알고 있다는 가정이 필요하다.

      만약 잘못된 메서드를 사용하였어도 컴파일에서는 Validation을 하지 않기에 빌드 오류를 발생시키지 않는다.

<object, var, dynamic>