C#/C# 교과서
[C# 교과서] 50~51. 동적형식, 튜플
서니션
2023. 2. 7. 10:48
동적형식
dynamic 키워드
C#에서는 dynamic 키워드를 사용하는 동적 형식을 제공
- 컴파일 타임에 형식이 지정되는 프로그램은 편함. 바로 int, string 형으로 변수를 선언한 후 해당 값을 사용하면 됨
- 런타임 형식이 지정되는 프로그램이 필요할 수 있음. 이때는 dynamiic 키워드를 사용하여 변수를 선언
- dynamic 키워드는 데이터 형식 자리에 오지만, dynamic은 데이터 형식이 아님
- var 키워드와 비슷하나 컴파일할 때 데이터 형식을 결정하는 var와 달리, dynamic 키워드는 런타임할 때 데이터 형식을 결정
- 모든 데이터 형식을 선언하는 자리에는 dynamic 키워드를 사용 가능
- 동적 형식은 다른 동적 언어와 통신에 유용
- 유일한 단점은 비주얼 스튜디오 인텔리센스의 도움을 받을 수 없다는 것
동적 바인딩
런타임할 때 데이터 형식을 결정하는 것을 동적 바인딩이라고 함
튜플
튜플은 하나 이상의 값을 한 번에 하나 이상 전달하거나 제공받을 때 사용하는 데이터 구조
추가 클래스가 아닌 괄호를 사용하여 값을 하나 이상 그룹화
> (int x, int y) GetPoint()
. {
. return (10,20);
. }
> GetPoint().x
10
> GetPoint().y
20
- 명시적인 형식을 지정할 필요 없음. 컴파일러 형식을 유추하여 자동으로 형식을 제공
- 튜플은 원하는 이름의 속성을 만들 수 있음
튜플 리터럴
변수에 괄호를 사용하나 값을 하나 이상 설정하는 것을 튜플 리터럴(tuple literal)이라고 함
튜플 리터럴의 여러 가지 사용법
> // 기본 Item1, Item2 형태
> var fhd = (1920, 1080);
> $"Full HD : {fhd.Item1} * {fhd.Item2}"
"Full HD : 1920 * 1080"
>
> // 이름 지정
> var uhd = (Width : 3840, Height : 2160);
> $"4K UHD : {uhd.Width} *{uhd.Height}"
"4K UHD : 3840 * 2160"
>
> // 이름과 형식 지정
> (ushort Width, ushort Height) hd = (1366, 768);
> $"HD : {hd.Width} * {hd.Height}"
"HD : 1366 * 768"
> $"Type({hd.Width.GetType()}, {hd.Height.GetType()})"
"Type(System.UInt16, System.UInt16)"