Dart 튜토리얼 14편: 수학·유틸(dart:math) 빠르게 쓰기

요약#

핵심 요지#

  • 문제 정의: 앱 개발 중 “각도 계산”, “최댓값/최솟값”, “난수”는 자주 나오지만, 어디서 어떤 함수를 가져와야 하는지 헷갈리기 쉽다.
  • 핵심 주장: Dart는 dart:math1에 자주 쓰는 수학 함수/상수/난수 생성 기능을 모아두었고, 대부분은 “최상위 함수” 형태로 바로 쓸 수 있다.
  • 주요 근거: sin()2/cos()3는 라디안(radians4) 기준, max()5/min()6, pi7/e8/sqrt29, Random10 예시가 제시된다.
  • 실무 기준: 삼각함수는 “라디안 변환”을 먼저 고정하고, 난수는 목적에 따라 일반 Random()Random.secure()11를 구분한다.

문서가 설명하는 범위#

  • dart:math의 삼각함수(라디안 기반)와 값 계산 예시
  • max()/min()과 대표 상수(pi, e, sqrt2)
  • Random 기반 난수 생성과 Random.secure() 주의점

읽는 시간: 12분 | 난이도: 초급


참고 자료#

  • dart - 수학 함수/상수/난수

문제 상황#

수학 함수는 “필요할 때 바로 쓰는 도구”에 가깝습니다.
그런데 매번 검색해서 쓰기 시작하면, 코드가 끊기고 실수(단위/범위/목적)가 늘어납니다.
그래서 dart:math의 핵심을 “자주 쓰는 묶음”으로 정리해 두는 것이 유리합니다.


해결 방법#

단계 1: 삼각함수는 “라디안” 기준으로 먼저 고정하기#

Why#

NOTE

삼각함수는 UI 애니메이션, 좌표 계산, 회전 등에서 자주 쓰입니다.
그런데 입력 단위를 도(degrees12)로 착각하면 결과가 틀어질 수 있습니다.

What#

NOTE

sin()cos() 같은 삼각함수는 라디안(radians)을 입력으로 받습니다.

How#

TIP

도 단위를 라디안으로 바꾸는 변환을 코드로 고정합니다.

import 'dart:math';
// 코사인
assert(cos(pi) == -1.0);
// 사인
var degrees = 30;
var radians = degrees * (pi / 180);
// radians는 이제 0.52359가 된다.
var sinOf30degrees = sin(radians);
// sin 30°는 0.5다.
assert((sinOf30degrees - 0.5).abs() < 0.01);

Watch out#

WARNING

삼각함수 입력은 “도”가 아니라 “라디안”입니다.
즉, 도 단위를 그대로 넣지 않도록 변환 공식을 먼저 적용해야 합니다.

결론: 삼각함수는 라디안 기준이므로 “도→라디안 변환”을 먼저 습관화합니다.


단계 2: 최댓값/최솟값은 max()/min()으로 단순하게 처리하기#

Why#

NOTE

값을 비교해 한쪽을 선택하는 로직은 조건문으로도 만들 수 있지만, max()/min()이 더 짧고 의도가 명확합니다.

What#

NOTE

max()는 큰 값을, min()은 작은 값을 반환하는 함수입니다.

How#

TIP

비교 로직을 한 줄로 정리합니다.

import 'dart:math';
assert(max(1, 1000) == 1000);
assert(min(1, -1000) == -1000);

Watch out#

WARNING

여러 값의 최댓값/최솟값이 필요하면, “두 값씩” 적용하거나 컬렉션을 줄이는 방식으로 구조를 먼저 정해야 합니다.

결론: 값 비교는 max()/min()으로 의도를 분명하게 드러냅니다.


단계 3: 상수(pi/e/sqrt2)는 dart:math에서 바로 꺼내 쓰기#

Why#

NOTE

수학 상수를 직접 적으면(오타/정밀도) 실수가 생길 수 있습니다.
그래서 이미 정의된 상수를 가져다 쓰는 편이 안전합니다.

What#

NOTE

dart:mathpi, e, sqrt2 같은 상수를 제공합니다.

How#

TIP

필요한 상수를 바로 사용합니다.

import 'dart:math';
// 추가 상수는 dart:math 라이브러리에서 확인할 수 있다.
print(e); // 2.718281828459045
print(pi); // 3.141592653589793
print(sqrt2); // 1.4142135623730951

Watch out#

WARNING

상수 출력 값은 “표시(문자열)”일 뿐이며, 실제 연산은 부동소수점(double13) 특성의 영향을 받을 수 있습니다.

결론: 상수는 직접 적지 말고 dart:math에서 제공하는 값을 사용합니다.


단계 4: 난수는 Random으로 만들되, 목적에 따라 Random.secure()를 구분하기#

Why#

NOTE

게임/샘플 데이터/테스트에서는 난수가 필요합니다.
하지만 “보안 목적”의 난수는 요구 수준이 다릅니다.

What#

NOTE

Random은 난수를 생성하는 클래스입니다.
기본 생성자는 의사 난수이며, 보안 목적이라면 Random.secure()가 언급됩니다.

How#

TIP

기본 난수는 다음처럼 씁니다.

import 'dart:math';
var random = Random();
random.nextDouble(); // 0.0 이상 1.0 미만: [0, 1)
random.nextInt(10); // 0 이상 9 이하

불리언도 만들 수 있습니다.

var random = Random();
random.nextBool(); // true 또는 false

Watch out#

WARNING

기본 Random은 암호학적 목적에는 적합하지 않은 의사 난수입니다.
보안 목적의 난수 생성이 필요하면 Random.secure()를 사용합니다.

결론: 난수는 목적(일반/보안)에 따라 Random()Random.secure()를 구분합니다.

Footnotes#

  1. dart(dart): 삼각함수/최댓값·최솟값/상수/난수 등 수학 기능을 제공하는 라이브러리다.

  2. sin()(사인): 라디안을 입력으로 받아 사인 값을 구하는 함수다.

  3. cos()(코사인): 라디안을 입력으로 받아 코사인 값을 구하는 함수다.

  4. radians(라디안): 각도를 라디안 단위로 표현한 값이다.

  5. max()(맥스): 두 값 중 더 큰 값을 반환하는 함수다.

  6. min()(민): 두 값 중 더 작은 값을 반환하는 함수다.

  7. pi(파이): 원주율 상수다.

  8. e(자연상수 e): 자연로그의 밑 상수다.

  9. sqrt2(루트2): 2의 제곱근 상수다.

  10. Random(랜덤): 난수(의사 난수 포함)를 생성하는 클래스다.

  11. Random.secure()(보안 난수): 암호학적으로 더 안전한 난수 생성이 필요한 경우 사용하는 생성자다.

  12. degrees(도): 각도를 도 단위로 표현한 값이다.

  13. double(더블): 부동소수점 수를 표현하는 타입이다.

공유

이 글이 도움이 되었다면 다른 사람과 공유해주세요!

Dart 튜토리얼 14편: 수학·유틸(dart:math) 빠르게 쓰기
https://moodturnpost.net/posts/dart/dart-math-utilities/
작성자
Moodturn
게시일
2026-01-04
Moodturn

목차