안녕하세요. BlockDMask 입니다.
오늘은 C#에 있는 clamp 라는 메서드(함수)를 설명 드리려 합니다.
작업을 하다보면 '특정 값이 해당 범위 내에서 나왔으면 좋겠다'하는 작업 부분이 있을 것 입니다.
그때 사용하는 유용한 함수 입니다.
<목차>
1. C# Math.Clamp 메서드 설명
2. C# Math.Clamp 메서드 예제
1. C#의 clamp 함수 설명
1-1) Clamp 함수 정의 및 설명
public ststic int Math.Clamp(int value, int min, min max)
clamp 함수(메서드)는 어떤 값이 범위 안에 있는지 검사하고 범위 내에 있으면 그 값을 바로 반환합니다.
단, 해당 값이 범위보다 낮을때는 최소값을 범위보다 높을때는 최대 값을 반환해주는 함수입니다.
함수의 매개변수와 반환형은 이렇습니다.
첫번째 매개변수 value는 집어 넣을값(=검사할값)
두번째 매개변수 min 최소값.
세번째 매개변수 max 최대값.
반환은 결과 값 입니다.
정리를 한번 하면
value 가 min <= value <= max 이면 value를 반환
value < min 이면 min 반환
value > max 이면 max 반환
이렇게 세줄로 정리 할 수 있습니다.
1-2) clamp 함수(메서드) 클래스
해당 메서드는 System 클래스 안에 Math 클래스에 있습니다.
그렇기 때문에 using System; 을 상단에 작성해주시면 편하게 Math.Clamp 로 사용할 수 있습니다.
using System.Math; 를 상단에 작성해주면 그냥 Clamp 메서드를 바로 호출 할 수 있습니다.
1-3) clamp 함수 오버로딩
해당 함수는 숫자 관련 모든 타입에 대해서 오버로딩 되어있습니다.
즉, 우리는 소수점이든 정수든 어떤타입으로 넣으면 알아서 알맞게 값이 나올 수 있습니다.
아래를 보면 Clamp 메서드에 매개변수로 다양한 타입을 받고 그 타입에 따라서 반환 값도 동일 타입으로 나오게 됩니다.
*clamp를 사전에 찾아보면 "집게"라는 뜻을 가지고 있습니다.
'어느 부분을 집는다', '어디서 어디 영역을 잡는다' 이런 뜻으로 해석한다면 함수에 대해서 잘 기억이 날 것 입니다.
*관련해서 C# 공식 문서는 [바로가기]에 있습니다.
2. C# clamp 함수 예제
- clamp 메서드 int 타입 예제
using System;
int result = 0;
result = Math.Clamp(10, 5, 20); // 5~20 사이
Console.WriteLine($"Math.Clamp(10, 5, 20) : {result}");
result = Math.Clamp(0, 5, 20); // 5~20 사이
Console.WriteLine($"Math.Clamp(0, 5, 20) : {result}");
result = Math.Clamp(50, 5, 20); // 5~20 사이
Console.WriteLine($"Math.Clamp(50, 5, 20) : {result}");
Math.Clamp 메서드는 이렇게 맨 처음에 넣을 값을 넣고, 그 다음에 min max 범위를 넣습니다.
예제에서는 min값을 0으로 max 값을 20으로 지정하고
value는 10, 0, 50으로 사이값, min값, max값을 예시로 적어보았습니다.
값을 보면 10을 넣었을 때 10이 나왔고,
min 값보다 낮은 0을 넣었을때는 min값인 5가 나왔습니다.
또 max 값보다 높은 50을 넣었을때는 max 값인 50이 나왔습니다.
이상으로 오늘 C#의 유용한 메서드 clamp 에 대해서 알아보았습니다.
감사합니다.
'<개인공부> > [C#]' 카테고리의 다른 글
[C#] 실행 시간 측정, 코드 수행 시간 측정(Stopwatch) (0) | 2022.09.25 |
---|---|
[C#] const, readonly 설명 사용법과 차이점에 대해서 (0) | 2022.09.22 |
[C#] 타입 조사 Type, 리플렉션(reflection) (0) | 2022.09.11 |
[C#] 인덱서 객체(인스턴스)를 배열 처럼 사용해보자 (0) | 2022.09.04 |
[C#] string Trim, TrimEnd, TrimStart에 대해서 (공백제거, 문자제거) (2) | 2019.11.07 |
[C#] Nullable type, int? 널러블 타입에 대해서. (0) | 2019.09.28 |
[C#] string format, 문자열 보간($)을 이용한 문자열 출력방법 (1) | 2019.08.19 |
[C#] Abs 절대값 함수에 대하여. (0) | 2019.07.10 |