Learning
When: 1학년 7월 19일
How:
람다식에서 사용할 수 없는 키워드에 대해 공부하던 중, params 키워드가 나왔는데, 처음 들어본 키워드였기 때문에 공부를 해보게 되었습니다.
Understanding:
- 정의 : params 키워드는 배열을 만들어 주는 키워드입니다. 그게 무슨 소리인가 하면, 우리가 데미지 계산 메서드를 간단하게 넣는다고 했을 때 그 메서드의 인수로는 기본 데미지, 크리티컬 데미지 배율, 특정 속성 데미지 배율, 버프 배율 등이 있을 텐데, 여기서 크리티컬이 터지지 않았을 때는 인수에 포함하지 않을 것이고, 버프도 여러 종류가 있어 인수의 개수를 정할 수 없습니다. (아예 못하는 것은 아니지만 코드가 길어질 가능성이 있습니다.) 그럴 때 오버로드를 하거나 배열을 인수로 받아서 코드를 짤 수 있는데, 여기서 커다란 이점을 주는 것은 아니고 굳이 배열을 선언하지 않아도 되는 편의성을 가진 키워드입니다.
- 사용법 : 아래의 코드를 보면 Params 메서드에 인수로 string 형식의 값 2개를 넣었는데, 실제 메서드의 매개 변수로는 string[] 배열 형식만 있습니다. 여기서 눈치 빠르신 분들은 인수로 string 값을 넣으면 string[] 배열로 변환해주는 키워드라는 것을 깨달으셨을지도 모르겠네요. 방금 한 말을 풀어서 써보자면 원래 여러 값이 있고, 그 값들을 배열로 묶어서 메서드에 넣을 때는 배열 변수를 선언하여 그 안에 값을 넣고 그 변수를 매개 변수로 넣어야 합니다. 하지만 params 키워드를 사용하면 인수로 배열이 아닌 여러가지 값을 넣어도 컴파일러가 그 값들을 하나의 배열로 묶어줍니다. 즉 string[] value = {"Hello", "World"}; 이 문장을 생략할 수 있는 것이죠. 하지만 여기서 만약 'params로 수식된 매개 변수 말고도 다른 매개 변수가 존재하면, 그것까지 하나의 배열로 만들어 버릴 수도 있지 않을까' 라는 걱정을 하실 수 있습니다. 그렇기에 params 키워드로 수식된 변수는 매개 변수의 가장 마지막에 위치해야 하며, 그렇게 되면 처음에 들어가야 할 인수를 모두 채우면 나머지는 다 배열로 묶을 수 있기 때문에 params가 제대로 동작할 수 있습니다.
Params(2, "Hello ", "World");
void Params(int a, params string[] strings)
{
for (int i = 0; i < a; i++)
{
foreach (string s in strings)
{
Console.Write(s);
}
Console.WriteLine();
}
}
//출력 :
//Hello World
//Hello World
Result: 메서드 안에 재료만 주면 컴파일러가 알아서 만들어주는 것이 람다식이랑도 비슷한 것 같다는 생각이 드네요. params 키워드는 편의성 말고는 그냥 배열을 직접 선언하는 것과 차이가 없다고 보셔도 되고, 매개 변수의 마지막에만 올 수 있다는 점만 알아두시면 사용하는데 큰 어려움은 없으실 것 같습니다.
'C#' 카테고리의 다른 글
| [C#] 값 형식과 참조 형식 (0) | 2025.07.23 |
|---|---|
| [C#] partial 키워드 (0) | 2025.07.22 |
| [C#] in 키워드 (0) | 2025.07.18 |
| [C#] 람다식(3) (0) | 2025.07.17 |
| [C#] 람다식(2) (1) | 2025.07.16 |