Learning
When: 1학년 7월 18일
How:
람다식에 사용할 수 없는 키워드를 찾던 중에 ref, out, in, params 등의 키워드가 나왔는데, 여기서 params와 in 키워드에 대해선 몰랐기 때문에 역할이나 사용 이유 등의 기본적인 것만 알고 글을 쓴 후 다음에 더 자세히 공부하려고 계획했기 때문에 공부하게 되었습니다.
Understanding:
- 정의 : in 키워드는 원래 ref와 out을 배울 때 같이 배웠어야 하는 키워드였던 것 같은데, 그 이유가 ref, out과 같이 값 형식의 변수를 받아올 때 '값을 복사해서 가져오는 것이 아닌 값을 참조하여 받아올 수 있게 해주는 키워드'이기 때문입니다. 하지만 ref와 out이 다른 것 처럼 in도 쓰임새가 조금 다른데, in 키워드로 수식된 매개 변수는 메서드 안에서 변경할 수 없습니다.
- 사용 이유 : 저는 '참조로 가져오는 이유가 원하는 변수의 값을 바꾸려고 그런 건데, 왜 값을 바꿀 수 없는 키워드가 있을까' 라는 생각을 잠깐 했었는데, 알고 보니 in 키워드는 원하는 변수를 참조하여 가져오기는 하지만, 그 꼭 그 변수가 필요한 것은 아닙니다. 그게 대체 무슨 소리냐 하면, 목적이 out과 ref와는 많이 다르기 때문인데요. in은 메모리를 절약하고 처리 시간을 줄일 때 사용합니다. (매개 변수를 바꾸고 싶지 않을 때도 사용하지만 메인은 아닙니다.)
- 작동 원리 : 참조 형식으로 사용하는 것과 메모리가 어떤 연관이 있는지 알기 위해서는 키워드가 없는 값 형식의 변수를 매개 변수로 받을 때를 생각하면 되는데, 그럴 상황은 없겠지만 만약 decimaldecimaldecimaldecimaldecimal 이라는 구조체가 할당하는 메모리가 극단적으로 많다고 가정을 해보겠습니다. 이 값을 그냥 매개 변수로 넣는다면 이 값이 복사되어 많은 메모리를 사용하는 지역 변수가 생성됩니다. 그리고 매개 변수가 2개면 똑같은 메모리를 사용하는 지역 변수도 2개 추가되고, 매개 변수가 많다면 비용도 높아지고 복사할 때 시간도 오래 걸려 문제가 생길 가능성이 다분해집니다. 하지만 여기서 참조 형식으로 받는다면 복사하고 지역 변수에 대입할 필요 없이 그냥 참조할 값의 주소만 가지고 있는 지역 변수를 하나 생성하면 끝입니다. 참조 형식도 많이 사용하면 성능에 무리가 갈 수 있긴 하지만 메모리는 확실히 아낄 수 있습니다.
- 사용 방법 : 이렇게 in 키워드만 붙여주면 바꿀 수 없게 변수를 참조 형식으로 받아올 수 있습니다.
int 대충아주큰메모리를할당받는변수 = 99999999; //실제론 값이 크든 작든 int면 4바이트 입니다.
void Method(in int a)
{
Console.WriteLine(a);
}
Result: 사실 ref로 받고 안 바꾸어도 같은 효과이고, 어디서 본 적도 없고 배운 적도 없어서 중요한 키워드가 아닐 수도 있을 것 같긴 하지만, 코드의 가독성과 안정성을 늘리고 비용과 처리 시간을 줄일 수 있는 키워드이기 때문에 기억해 놓으셨다가 필요할 때 쓰시면 좋을 같습니다.
'C#' 카테고리의 다른 글
| [C#] partial 키워드 (0) | 2025.07.22 |
|---|---|
| [C#] params 키워드 (0) | 2025.07.19 |
| [C#] 람다식(3) (0) | 2025.07.17 |
| [C#] 람다식(2) (1) | 2025.07.16 |
| [C#] 람다식(1) (2) | 2025.07.15 |