로딩
요청 처리 중입니다...

C# struct를 잘못 쓰면 생기는 이상한 버그들

 C# struct를 잘못 쓰면 생기는 이상한 버그들

struct는 복사됩니다. 이 사실은 대부분 알고 있습니다.

하지만 코드를 짜다 보면 이걸 꼭 한 번씩 잊어버리게 됩니다. 그리고 그 짧은 순간의 망각이 로그에도 잘 남지 않는 이상한 버그를 만들었습니다.

저도 몇 번 당했습니다. 원본은 아프지 않습니다 struct 내부에 상태를 바꾸는 메서드를 만들었습니다. model.ChangeStatus(); 호출도 잘 되었고 에러도 없었습니다.

그런데 값이 바뀌지 않았습니다. 처음에는 로직을 의심했습니다.

하지만 문제는 로직이 아니었습니다. 메서드를 호출하는 과정에서 struct의 복사본이 만들어졌기 때문이었습니다.

저는 원본이 아니라 잠깐 생겼다가 사라지는 복사본의 상태만 바꾸고 있었습니다. 원본은 아무 일도 없다는 듯 그대로 남아 있었습니다.

실제로 있었던 코드 간단한 예입니다. struct Order { public int Status; public void Complete() { Status = 1; } } 그리고 이런 코드가 있었습니...