하리Hari

11. 표준 라이브러리 (도구 상자)

JSON, 무작위, 날짜, 정규식처럼 바로 꺼내 쓰는 도구들을 알아봐요.

이 장에서 배울 것

  • 도구 상자(모듈)에서 도구(함수)를 꺼내 쓰는 법 (가져오자)
  • 자주 쓰는 도구 상자 다섯 가지: 수학, JSON, 무작위, 날짜, 정규식

도구 상자에서 꺼내 쓰기

9장에서 함수를 직접 만들었죠. 올림, 무작위 수 뽑기, 날짜 계산처럼 많은 사람이 자주 쓰는 함수는 하리가 미리 만들어서 도구 상자에 넣어 두었어요. 이 도구 상자를 모듈, 모듈을 모아 놓은 것을 표준 라이브러리라고 해요.

<숫자로>처럼 늘 쓰는 몇 가지를 빼면, 도구는 쓰기 전에 가져와야 해요. 모듈은 대괄호로 써요.

[수학]에서 <올림>을 가져오자
<올림>(3.2)를 출력하자
  1. [수학]에서 <올림>을 가져오자 — [수학] 도구 상자에서 <올림>을 꺼내요.
  2. 그다음부터는 9장의 함수처럼 <올림>(3.2)로 써요. 4가 나와요.

가져오는 방법은 여러 가지예요.

쓰는 법 뜻
[수학]에서 <올림>을 가져오자 하나만
[수학]에서 <올림>과 <버림>을 가져오자 여러 개 (와/과로 이어서)
[수학]에서 전부 가져오자 그 모듈의 도구 전부
[수학]에서 <올림>을 <위로>로 가져오자 다른 이름(별칭)으로
[수학]에서 <올림>과 <버림>을 가져오자
[수학]에서 <올림>을 <위로>로 가져오자

<올림>(3.2)를 출력하자
<버림>(3.8)을 출력하자
<위로>(1.1)을 출력하자

4, 3, 2가 나와요. 별칭은 내가 만든 함수와 이름이 겹칠 때 써요. 가져오지 않고 쓰면 “함수를 찾을 수 없어요” 오류가 나니, 이 오류를 보면 먼저 가져왔는지 확인하세요.

이 장에서 볼 도구 상자

모듈 하는 일 도구
[수학] 올림과 버림 (더 많은 계산은 12장) <올림> <버림>
[JSON] JSON 글자와 값 바꾸기 <파싱> <문자열화>
[무작위] 무작위 값 뽑기 <실수> <정수> <고르기> <섞기>
[날짜] 시각 다루기 <지금> <서식> <읽기> <요일> <기다리기>
[정규식] 글자 패턴 찾기 <검사> <찾기> <그룹> <모두찾기> <치환> <분할>

전부는 편하지만, 다른 모듈에서 같은 이름의 도구를 가져오면 나중 것이 앞의 것을 덮어써요. 이름이 겹칠 수 있을 때는 필요한 것만 골라 가져오세요.

JSON

JSON은 프로그램끼리 데이터를 주고받을 때 많이 쓰는 글 형식이에요. 웹에서 받아 오는 데이터는 대부분 JSON이에요. {"이름": "하나"}처럼 하리의 사전·목록과 모양이 거의 같아요.

<파싱>은 JSON 글자를 하리의 값으로 바꿔요. 객체는 사전, 배열은 목록, null은 비어있음이 돼요. 반대로 <문자열화>는 값을 JSON 글자로 만들어요. 사전의 키는 문자열이어야 하고, 글자 순서대로 정렬돼요. 두 번째 인자로 들여쓰기 칸 수를 주면 보기 좋게 펼쳐져요.

[JSON]에서 <파싱>을 가져오자
[JSON]에서 <문자열화>를 가져오자

'글'을 "{\"이름\": \"하나\", \"점수\": [90, 80]}"으로 정하자
'값'을 <파싱>('글')로 정하자
'값'의 "이름"을 출력하자

'사전'을 {"b": 2, "a": 참}으로 정하자
<문자열화>('사전')을 출력하자
<문자열화>('사전', 2)를 출력하자

무작위

<실수>()는 0 이상 1 미만의 수, <정수>(작은수, 큰수)는 두 수 사이(양 끝 포함)의 정수를 돌려줘요. <고르기>는 목록에서 하나를 뽑고, <섞기>는 섞은 새 목록을 돌려줘요(원래 목록은 그대로예요). 실행할 때마다 결과가 달라요.

[무작위]에서 <정수>를 가져오자
[무작위]에서 <고르기>를 가져오자
[무작위]에서 <섞기>를 가져오자

'주사위'를 <정수>(1, 6)으로 정하자
틀"주사위는 {'주사위'}이(가) 나왔어요."를 출력하자

'메뉴'를 ["김밥", "라면", "우동"]으로 정하자
틀"오늘은 {<고르기>('메뉴')}!"를 출력하자
<섞기>('메뉴')를 출력하자

날짜

시각은 1970년 1월 1일부터 흐른 초(숫자)로 다뤄요. <지금>()이 지금 시각을 주고, <서식>(시각, 서식)은 글자로, <읽기>(글, 서식)는 다시 시각으로 바꿔요. 서식에서 YYYY(연), MM(월), DD(일), HH(시), mm(분), ss(초)만 자리가 바뀌고 나머지 글자는 그대로예요. 컴퓨터에 설정된 시간대를 써요. <요일>(시각)은 요일을 월요일 1부터 일요일 7까지의 숫자로 알려줘요. 2월 30일처럼 없는 날짜를 읽으면 에러가 나요. <기다리기>(초)는 그 시간만큼 프로그램을 멈추고 기다려요(0초부터 3600초까지, 소수도 돼요). 브라우저 플레이그라운드에서도 화면이 굳지 않고 기다려요.

[날짜]에서 <지금>을 가져오자
[날짜]에서 <서식>을 가져오자
[날짜]에서 <읽기>를 가져오자

'시각'을 <읽기>("2024-03-05 07:08:09", "YYYY-MM-DD HH:mm:ss")로 정하자
<서식>('시각', "YYYY년 MM월 DD일")을 출력하자

'방금'을 <지금>()으로 정하자
틀"지금은 {<서식>('방금', "HH:mm:ss")}이에요."를 출력하자

<기다리기>로 천천히 세어 볼 수도 있어요.

[날짜]에서 <기다리기>를 가져오자

"3"을 출력하자
<기다리기>(0.3)을 실행하자
"2"를 출력하자
<기다리기>(0.3)을 실행하자
"1"을 출력하자
<기다리기>(0.3)을 실행하자
"발사!"를 출력하자

정규식 (조금 어려워요)

“숫자가 이어진 부분”, “@가 들어간 단어”처럼 글자의 모양(패턴) 으로 찾을 때는 정규식을 써요. 정규식은 그 자체가 작은 언어라서 처음엔 낯설어요. 지금은 건너뛰고 필요할 때 돌아와도 괜찮아요. 도구는 모두 (글, 패턴)을 먼저 받아요.

  • <검사>: 패턴이 있는지 참/거짓으로 알려줘요.
  • <찾기>: 처음 맞는 글자를 돌려줘요. 없으면 비어있음이에요.
  • <그룹>: 처음 맞는 글자와 ( )로 묶은 부분을 목록으로 돌려줘요.
  • <모두찾기>: 맞는 글자를 전부 목록으로 돌려줘요.
  • <치환>: 맞는 곳을 다른 글자로 바꿔요. 바꿀 글자 안의 $1, $2는 묶은 부분이고 $$는 달러 기호예요.
  • <분할>: 맞는 곳을 기준으로 잘라서 목록으로 돌려줘요.
[정규식]에서 <검사>를 가져오자
[정규식]에서 <모두찾기>를 가져오자
[정규식]에서 <그룹>을 가져오자
[정규식]에서 <치환>을 가져오자
[정규식]에서 <분할>을 가져오자

<검사>("abc123", "[0-9]+")를 출력하자
<모두찾기>("a1b22c333", "[0-9]+")를 출력하자
<그룹>("2024-03-05", "([0-9]+)-([0-9]+)-([0-9]+)")를 출력하자
<치환>("홍길동 김철수", "([^ ]+) ([^ ]+)", "$2 $1")을 출력하자
<분할>("사과, 배,귤", ", ?")를 출력하자

정규식은 Go와 자바스크립트가 함께 쓰는 문법만 쓸 수 있어요. 글자 안의 빈 곳에서 맞는 경우(빈 글자와 맞는 패턴)는 <모두찾기>, <치환>, <분할>에서 무시해요. 맨 앞에 (?i)(대소문자 무시), (?m), (?s)를 붙여 옵션을 줄 수 있어요.

함께 써보기: 월요일 놀리기

여러 모듈을 한꺼번에 가져오면 이런 것도 만들 수 있어요. <요일>(시각)은 월요일이 1, 일요일이 7인 숫자를 돌려줘요. 내일이 월요일이라면 [JSON]으로 읽어 둔 놀림말 중 하나를 [무작위]로 골라서 들려줘요.

[날짜]에서 <지금>을 가져오자
[날짜]에서 <요일>을 가져오자
[무작위]에서 <고르기>를 가져오자
[JSON]에서 <파싱>을 가져오자

'놀림말'을 <파싱>("[\"내일 월요일이래요... 주말은 이미 전설이 됐어요.\", \"월요일이 다가와요! 알람 소리 미리 듣고 가세요.\", \"내일은 월요일! 이불 밖은 위험해요.\"]")로 정하자

'내일'을 (<지금>() + 86400)으로 정하자
'요일번호'를 <요일>('내일')로 정하자

만약 ('요일번호'가 1과 같다) 라면:
    <고르기>('놀림말')을 출력하자
그렇지 않다면:
    "내일은 월요일이 아니에요. 오늘은 놀릴 거리가 없네요."를 출력하자

정리

하고 싶은 일 쓰는 법
도구 가져오기 [모듈]에서 <도구>를 가져오자
여러 개 / 전부 <가>와 <나>를 가져오자, [모듈]에서 전부 가져오자
다른 이름으로 <도구>를 <새이름>으로 가져오자
무작위 정수 [무작위]의 <정수>(1, 6)
지금 시각을 글자로 [날짜]의 <서식>(<지금>(), "HH:mm")
JSON ↔ 값 [JSON]의 <파싱>, <문자열화>

연습 문제

1. 주사위 두 개를 던져서 두 눈과 합을 출력해 보세요.

정답 예시
[무작위]에서 <정수>를 가져오자

'가'를 <정수>(1, 6)으로 정하자
'나'를 <정수>(1, 6)으로 정하자
틀"{'가'} + {'나'} = {'가' + '나'}"를 출력하자

2. 점심 메뉴 목록을 만들고, 그중 하나를 무작위로 골라 “오늘 점심은 ○○!“을 출력해 보세요.

정답 예시
[무작위]에서 <고르기>를 가져오자

'메뉴'를 ["김밥", "라면", "돈가스", "비빔밥"]으로 정하자
틀"오늘 점심은 {<고르기>('메뉴')}!"를 출력하자

3. 아래 JSON 글에서 두 번째 친구의 이름을 꺼내 출력해 보세요.

'글'을 "[{\"이름\": \"하나\"}, {\"이름\": \"두리\"}]"로 정하자
정답 예시
[JSON]에서 <파싱>을 가져오자

'글'을 "[{\"이름\": \"하나\"}, {\"이름\": \"두리\"}]"로 정하자
'친구들'을 <파싱>('글')로 정하자
(('친구들'의 2번째)의 "이름")을 출력하자

다음 장에서는 더 많은 도구 상자(통계, 텍스트, 목록 도구 등)를 둘러봐요.

놀이터
결과
코드를 작성하고 '실행' 버튼을 눌러보세요.