Section 19.10: DateTime 사용 시의 순수 함수 관련 유의 사항
Wikipedia 에서는 순수 함수 (pure function) 를 아래와 같이 정의하고 있다:
- 동일한 파라미터가 주어졌을 때 항상 동일한 결과값을 반환하는 함수. 함수의 결과값은 어떠한 숨겨진 정보나, 프로그램의 각기 다른 실행 순서로 인해 변경될 수 있는 상태 (state) 정보, 혹은 입출력 기기를 통한 외부 입력 값 등에 의존적이어서는 안된다.
- 함수의 실행은 변경 가능한 (mutable) 객체에 변형을 가한다거나 입출력 장치에 출력을 수행하는 등 의미론적으로 관찰 가능한 (semantically observable) 부수 효과 (side effect) 를 초래하지 않아야 한다.
개발자로써 순수 함수에 대해서 정확히 이해하는 것은 매우 중요하며 이와 관련된 내용은 여러 분야에 걸쳐 자주 맞닥뜨리게 될 것이다. 많은 초급 개발자들을 이로 인한 혼란에 빠트리게 하는 경우 중 하나가 바로 DateTime
클래스의 메소드를 사용하는 경우이다. 이 클래스의 메소드중 상당수가 순수 함수로써, 이러한 사실을 모르고 있었다면 실제 사용시에 의외로 느낄 수 있을 것이다. 다음 예제를 확인해 본다:
DateTime sample = new DateTime(2016, 12, 25);
sample.AddDays(1);
Console.WriteLine(sample.ToShortDateString());
위 예제를 보았을 때, 콘솔에 찍히게 될 결과가 '26/12/2016' 일 것이라고 생각할 수 있겠지만, 실제 결과는 초기 설정 값과 동일한 값이 출력될 것이다. 이는 AddDays
가 순수 함수이기 때문으로, 객체가 가지고 있는 원래의 날짜는 영향을 받지 않게 된다. 위에서 예상한 대로의 결과를 얻고자 한다면, AddDays
함수의 사용 방법을 아래와 같이 변경하여야 할 것이다:
sample = sample.AddDays(1);
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
19.12: DateTime.Add(TimeSpan) 메소드 (0) | 2021.03.25 |
---|---|
19.11: DateTime.TryParseExact 메소드 (0) | 2021.03.24 |
19.9: DateTime.AddYears(Int32) 메소드 (0) | 2021.03.18 |
19.8: DateTime.DaysInMonth(Int32, Int32) 메소드 (0) | 2021.03.18 |
19.7: DateTime.Compare(DateTime t1, DateTime t2) 메소드 (0) | 2021.03.18 |