Top 8 랜덤 이란 The 146 Correct Answer

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 랜덤 이란 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://toplist.maxfit.vn team, along with other related topics such as: 랜덤 이란 랜덤 우리말, 랜덤함수, 랜덤 뽑기, 랜덤 이름 제조기, 랜덤반대말, 랜덤 플레이 뜻, 랜덤하게, 랜덤발송뜻

‘임의의’, ‘무작위의’, ‘무선[1]적인’, ‘무계획적인’, ‘닥치는 대로’ 라는 뜻을 가진 영어단어 Random. ‘랜덤하다’라는 것은 보통 어떠한 사건이 규칙성이 보이지 않고 무작위로 발생한다는 것을 의미한다.


컴퓨터가 만드는 랜덤숫자의 진실(feat.의사 난수) – [高지식] 거니
컴퓨터가 만드는 랜덤숫자의 진실(feat.의사 난수) – [高지식] 거니


랜덤 뜻 간단정리

  • Article author: masitkooma.tistory.com
  • Reviews from users: 42097 ⭐ Ratings
  • Top rated: 4.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 랜덤 뜻 간단정리 우선 랜덤 뜻을 사전에서 찾아보게 되면 ‘무작위로’ 또는 ‘임의로’라고 설명되어 있는데요, 쉽게 말해서 ‘아무렇게나’라는 의미로 생각해 주시면 좋습니다. 보통 무엇을 … …
  • Most searched keywords: Whether you are looking for 랜덤 뜻 간단정리 우선 랜덤 뜻을 사전에서 찾아보게 되면 ‘무작위로’ 또는 ‘임의로’라고 설명되어 있는데요, 쉽게 말해서 ‘아무렇게나’라는 의미로 생각해 주시면 좋습니다. 보통 무엇을 … 랜덤 뜻 안녕하세요 오늘 설명드릴 내용은 많은 분들이 궁금해하셨던 랜덤이란 무슨 뜻인지 자세히 알아보는 시간을 갖도록 하겠습니다. 평소에 랜덤이라는 단어를 종종 듣게 될 때가 있는데요, 이럴 때 정확한..
  • Table of Contents:

특허 도면

랜덤 뜻

랜덤 뜻 간단정리
랜덤 뜻 간단정리

Read More

랜덤뜻이 무얼까? random : 네이버 블로그

  • Article author: blog.naver.com
  • Reviews from users: 7808 ⭐ Ratings
  • Top rated: 4.6 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 랜덤뜻이 무얼까? random : 네이버 블로그 random 랜덤하다. 랜덤 선물. 랜덤 박스 ; 지식 백과 사전을 보면 보다 자세하게. 랜덤뜻에 대해 나와있는데, 정보나. 항목이 규칙이 없이 무작위로 늘어선. …
  • Most searched keywords: Whether you are looking for 랜덤뜻이 무얼까? random : 네이버 블로그 random 랜덤하다. 랜덤 선물. 랜덤 박스 ; 지식 백과 사전을 보면 보다 자세하게. 랜덤뜻에 대해 나와있는데, 정보나. 항목이 규칙이 없이 무작위로 늘어선.
  • Table of Contents:

악성코드가 포함되어 있는 파일입니다

작성자 이외의 방문자에게는 이용이 제한되었습니다

랜덤뜻이 무얼까? random : 네이버 블로그
랜덤뜻이 무얼까? random : 네이버 블로그

Read More

랜덤(random) 뜻, 랜덤 발송 뜻은 무엇인가요?

  • Article author: treeof.tistory.com
  • Reviews from users: 45569 ⭐ Ratings
  • Top rated: 3.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 랜덤(random) 뜻, 랜덤 발송 뜻은 무엇인가요? 랜덤은 ‘계획에 의한 것이 아닌 운에 의해서 일어나고 있는 일, 일어난 일, 선택된 일’이라는 뜻을 가지고 있습니다. 쉽게 말하면 누구의 의도와도 상관 … …
  • Most searched keywords: Whether you are looking for 랜덤(random) 뜻, 랜덤 발송 뜻은 무엇인가요? 랜덤은 ‘계획에 의한 것이 아닌 운에 의해서 일어나고 있는 일, 일어난 일, 선택된 일’이라는 뜻을 가지고 있습니다. 쉽게 말하면 누구의 의도와도 상관 … 인터넷 쇼핑, 게임, 수학 등 많은 분야에서 종종 볼 수 있든 단어가 있습니다. 바로 랜덤(random)이라는 용어입니다. 이 랜덤이 무엇을 뜻할까요? 간단하게 설명하면 어떤 개입도 없이 그대로의 운에 의해서 일어..문화,예술, 음악, K-pop, 저작권, 가수 이야기
  • Table of Contents:

랜덤(random) 뜻 랜덤 발송 뜻은 무엇인가요

1 랜덤(random) 뜻은

2 랜덤 발송이란

3 랜덤 발송은 정말 랜덤일까

4 랜덤의 순기능

랜덤(random) 뜻, 랜덤 발송 뜻은 무엇인가요?
랜덤(random) 뜻, 랜덤 발송 뜻은 무엇인가요?

Read More

랜덤 올바르게 사용하기

  • Article author: www.secmem.org
  • Reviews from users: 6599 ⭐ Ratings
  • Top rated: 4.6 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 랜덤 올바르게 사용하기 랜덤이란 특정한 패턴이 없다는 것을 말합니다. 즉, 어떤 규칙에 의해 생성되지 않고 다른 변수와 독립적으로 만들어진 결과를 랜덤한 결과라고 … …
  • Most searched keywords: Whether you are looking for 랜덤 올바르게 사용하기 랜덤이란 특정한 패턴이 없다는 것을 말합니다. 즉, 어떤 규칙에 의해 생성되지 않고 다른 변수와 독립적으로 만들어진 결과를 랜덤한 결과라고 … 서론 프로그램을 작성할 때 랜덤한 요소는 많이 들어갑니다. 어떤 공간을 탐색할 때 무작위로 탐색을 하기도 하고, 프로그램의 비밀 키를 만들거나 게임을 만들 때 카드 덱을 섞을 때 등, 랜덤이 프로그램에 사용되는 곳은 굉장히 많습니다. 하지만 이 랜덤은 자주 잘못 사용되고는 합니다. 랜덤을 올바르게 사용하는 방법에 대해 알아보려고 합니다. 랜덤이란? 랜덤이란 특정한 패턴이 없다는 것을 말합니다. 즉, 어떤 규칙에 의해 생성되지 않고 다른 변수와 독립적으로 만들어진 결과를 랜덤한 결과라고 합니다. 과연 완벽한 좋은 랜덤을 만들 수…
  • Table of Contents:

1비트 만들기

정수 만들기

배열 섞기

번호 붙은 트리 생성과 Prüfer sequence

랜덤 올바르게 사용하기
랜덤 올바르게 사용하기

Read More

요즘 많이 쓰는 \”랜덤\” 뜻이 뭔가요?? ::: 82cook.com 자유게시판

  • Article author: www.82cook.com
  • Reviews from users: 19423 ⭐ Ratings
  • Top rated: 3.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 요즘 많이 쓰는 \”랜덤\” 뜻이 뭔가요?? ::: 82cook.com 자유게시판 랜덤” 이란말 쓰던데 네이뇬에서 찾아 보았는데 정확한 뜻이 안 나와 있네요;; 무식하다 흉보지 마시고 아시면 좀 알려주세요^^ … …
  • Most searched keywords: Whether you are looking for 요즘 많이 쓰는 \”랜덤\” 뜻이 뭔가요?? ::: 82cook.com 자유게시판 랜덤” 이란말 쓰던데 네이뇬에서 찾아 보았는데 정확한 뜻이 안 나와 있네요;; 무식하다 흉보지 마시고 아시면 좀 알려주세요^^ …
  • Table of Contents:

목차

주메뉴

82cook

정책 및 방침

요즘 많이 쓰는 \
요즘 많이 쓰는 \”랜덤\” 뜻이 뭔가요?? ::: 82cook.com 자유게시판

Read More

Tucker의 Go 언어 프로그래밍: Golang 입문부터 고급 기법까지, 재미있는 4가지 … – 공봉식 – Google Sách

  • Article author: books.google.com.vn
  • Reviews from users: 33235 ⭐ Ratings
  • Top rated: 3.1 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about Tucker의 Go 언어 프로그래밍: Golang 입문부터 고급 기법까지, 재미있는 4가지 … – 공봉식 – Google Sách Updating …
  • Most searched keywords: Whether you are looking for Tucker의 Go 언어 프로그래밍: Golang 입문부터 고급 기법까지, 재미있는 4가지 … – 공봉식 – Google Sách Updating ★ 게임 회사 서버 전문가가 알려주는★ Go 언어를 내 것으로 만드는 비법구글이 개발한 Go는 고성능 비동기 프로그래밍에 유용한 언어입니다. 이 책은 Go 언어로 ‘나만의 프로그램’을 만들 수 있게 이끌어줍니다. 프로그래밍 초보자도 쉽고 명확하게 이해할 수 있도록 학습 목표를 일목요연하게 제시하고 핵심 내용을 정리해 보여줍니다. 언어 문법과 예제 작동 순서를 그림을 곁들여 설명하고, 단계별로 프로젝트를 구현하며 프로그래밍을 직접 체험할 수 있게 했습니다.★ Must Have 시리즈 안내Must Have 시리즈는 내 것으로 만드는 시간을 드립니다. 명확한 학습 목표와 핵심 정리를 제공하고, 간단명료한 설명과 다양한 그림으로 학습 효과를 극대화합니다. 설명과 예제를 제공해 응용력을 키워줍니다. 할 수 있습니다. 포기는 없습니다. 지금 당장 밑 줄 긋고 메모하고 타이핑하세요! Must Have가 여러분의 성장을 돕겠습니다.★ 32만 뷰가 증명하는 GO 언어 명강사를 만나자Go 언어 1등 유튜버 Tucker가 더 체계적으로 Go 언어를 알려줍니다. 문법만 알려드리는 데 그치지 않습니다. Go 프로그래밍 능력을 길러드리는 것이 목표입니다. Go 언어에 입문해, 커뮤니티와 구글링으로 현업 문제를 해쳐나갈 수 있는 문턱까지 안내해드립니다. 포기하지 않고 예제 하나하나를 타이핑해가며 공부하면 반드시 목표를 달성할 수 있게 구성했습니다.숫자로 보는 책의 특징_0 단계 컴퓨터 원리부터 확실히Go 프로그래밍 입문에 앞서 컴퓨터 동작 원리와 프로그래밍을 알아봅니다. 배경지식을 짧고 굵게 보여주어 프로그래밍에 대한 호기심을 자극하는 촉매가 되어줄 겁니다._1.16 Go 언어 최신 버전2021년 2월 1.16 버전을 발표했습니다. 가장 중요한 변화는 Go 모듈 사용이 기본이라는 점입니다(16.3절). 다른 하나는 embed 기능입니다(Tucker 노트 A.7절)._3 단계로 익히는 Go 언어1단계에서 Go 기본 문법을 익히고, 2단계에서는 고급 기능을 익힙니다. 3단계에서는 유용한 기법과 더 나은 프로그래밍을 위한 길을 제시하고 현업에서 바로 활용할 수 있는 웹 서버를 만들어봅니다._4가지 난이도 프로젝트 구현입문 수준의 프로젝트부터 완성된 웹 서비스까지 프로젝트를 제공합니다.___★☆☆☆ 숫자 맞추기 게임 만들기___★★☆☆ 단어 검색 프로그램 만들기___★★★☆ RESTful API 서버 만들기___★★★★ Todo 리스트 웹 서비스 만들기_86개 연습문제각 장마다 연습문제를 제공해 놓치기 쉬운 핵심을 되짚어보고 직접 프로그래밍을 해볼 수 있게 했습니다. 직접 만들어보는 횟수만큼 실력이 늘어납니다. 모든 연습문제를 풀어, 이 책을 100% 활용하세요._200여 개 예제 제공200개가 넘는 예제를 활용해 설명합니다. 책에 등장하는 예제를 하나씩 따라 할 때마다 프로그래밍 실력이 차곡차곡 쌓이도록 충실히, 때로는 그림을 활용해서 설명했습니다.대상 독자께 드리는 편지_다른 언어를 배운 적이 있는 프로그래밍 초보자께눈만으로는 무엇도 얻을 수 없습니다. 시간이 걸리더라도 반드시 직접 타이핑해가면서 책을 읽어주세요. 저자의 유튜브 Go 언어 강의도 활용하시면 도움이 될 겁니다. 너무 어렵다면 <깊이 보기>는 스킵해도 좋습니다._다른 언어를 사용하는 현업 프로그래머께모던 언어로서 Go 언어는 다양한 프로그래밍 기법과 개념을 지녔습니다. 다른 언어의 문법을 배웠다고 해서 Go 언어에서 제공하는 모든 개념을 다 알 수는 없습니다. 같지만 다른 듯 사용하는 개념과 기법도 적지 않습니다. 기존에 익혔던 언어와 비교해가면서 읽어보세요. 예제 코드를 먼저 분석해 이해가 안 될 때만 상세 설명을 참조하면 빠르게 책을 읽을 수 있을 겁니다._현업에서 Go 언어를 사용하는 프로그래머께입문자 눈높이에 맞혀 쉬운 언어로 차근차근 설명해, 너무 쉽고 속도감이 떨어진다고 느낄 수 있습니다. 쉬운 말로 설명했다고 해서 쉬운 내용만 담지는 않았습니다. SOLID 원칙을 적용하고, REST API를 만들고 백엔드 서버를 만드는 등 현업에 유용한 깊이 있는 기술들도 다루니, 이미 아는 내용은 건너뛰면서 끝까지 읽어주세요저자와 4문 4답[Q] 해외에서 Go 언어 인기가 어느 정도인지요? A. 해외뿐 아니라 국내에서도 Go 언어 인기는 날로 증가하고 있습니다. Go 언어는 그 심플함과 강력한 성능으로 소위 개발자가 즐거워지는 언어라고 이야기를 합니다.<Stack Overflow Developer Survey 2020>에 따르면 Go 언어는 사랑받는 언어랭킹이 1년만에 10위에서 5위로 크게 상승했습니다. 배우고 싶은 언어 3위에 올랐습니다.미국에서 연봉이 높은 언어 3위입니다.[Q] Go 언어, 열심히 활용하는 기업이나 프로젝트를 알려주세요.A. 아무래도 Go 언어를 만든 구글에서 가장 활발히 사용합니다. 대표적으로 구글에서만든 마이크로서비스 오케스트레이션 시스템인 쿠버네티스가 있습니다. 구글 외 프로젝트에서는 컨테이너 시스템인 도커와 분산 DB 시스템인 코크로치DB(CockroachDB)를 들 수 있습니다. 특히 드롭박스는 많은 버그와 성능상 문제를 해결하려고 기존 파이썬에서 Go 언어로 전면 교체를 했습니다. 그외 넷플릭스 등 많은 대형 IT 기업에서 Go 언어를 사용합니다. 손쉽게 마이크로서비스를 만들 수 있어서 마이크로서비스 시스템을 사용하는 스타트업에서 인기가 높습니다.[Q] Go 언어는 어디에 유용한가요?[A] Go 언어는 범용 프로그래밍 언어로서 모든 분야의 프로젝트에 사용됩니다. 특히 시스템 프로그래밍과 백엔드 프로그래밍에 많이 사용됩니다. Go 언어는 쉽고 예외 상황이 적은 문법과 빠른 성능을 제공합니다. 2009년에 발표된 이후 10년 넘게 일관되고 쉬운 문법이라는 기조를 유지해왔습니다. 이런 특징 덕분에 빠른 개발이 필요한 스타트업과 높은 성능이 필요한 시스템 프로그래밍에서 Go 언어 사용이 늘고 있습니다. 암호화폐, 웹 서버, DB, 백엔드 시스템 등에서 활발히 사용됩니다.[Q] 마지막으로 독자께 깨알 책 자랑 부탁드립니다.[A] 중학생 때 처음 프로그래밍을 접했습니다. C 언어를 독학하던 그 시절 ‘고수에게 멘토링을 받았다면 지금 내 모습은 어떻게 달라졌을까’하는 생각이 드네요. 중학생이던 나와 같은 처지에 있는 분께 올바르고 따뜻한 길을 제시하고 싶습니다. 물론 지금은 유튜브나 인터넷에 수많은 정보가 있지만, 짤막하게 단절된 정보이기 때문에 체계적인 학습을 제공하는 책도 필요하니까요. 입문서이지만 입문서로 끝나지 않고 프로그래머로 나아가는 길을 제시하려는 집필 의도가 독자께 무사히 전달되길 기원합니다.이 책의 구성이 책은 0~3단계까지, 배경지식부터 Go 프로그래밍에 유용한 기법까지 다룹니다. 추가로 본문에서 다하지 못한 이야기는 <Tucker 노트>에서 더 깊고 자세히 다룹니다._0단계 Go 언어를 배우기 전에기초 원리를 잘 알아야 더 깊은 이해를 할 수 있습니다. 본격적으로 Go 프로그래밍 언어를 배우기 앞서 개발 환경을 구축합니다. 그후 프로그래밍 입문자와 초보자를 고려해 컴퓨터란 무엇이고, 어떻게 동작하는지 또 프로그래밍이란 무엇인지, 현대적 프로그래밍 언어가 탄생하게 된 배경은 무엇이고, Go 언어는 어떤 특징을 가지는지 살펴봅니다. 컴퓨터, 프로그램, 프로그래밍 언어의 관계를 더 잘 이해하고 더 좋은 코드를 만드는 발판이 되길 바랍니다._1단계 가볍게 Go 입문하기Go 언어 기본 문법을 차근차근 배웁니다. 변수, 연산자, 제어문, 함수 등 대부분 언어가 제공하는 기본 문법입니다. Go 언어의 기본 문법과 프로그래밍 방식을 알려드립니다._2단계 고급 기법으로 Go 레벨업하기Go 언어 고급 문법을 알아봅시다. 메서드, 인터페이스, 다양한 함수 활용 방법을 살펴봅니다. 상황에 맞게 자료구조를 선택하는 방법과 예외 상황에 대처하는 방법도 배웁니다. 고루틴, 채널, 컨텍스트를 활용한 Go 언어만의 독특한 동시성 프로그래밍도 배우게 됩니다. 마지막 장에서는 ★ 두 개 수준 프로젝트로 파일에서 원하는 단어를 찾는 프로그램을 만들어보겠습니다._3단계 Go 프로그래밍에 유용한 기법 익히기3단계는 어엿한 Go 언어 프로그래머로 첫발을 내딛을 수 있도록 돕는 데 목적이 있습니다. Go 언어 문법은 이미 다 배웠습니다. 문법만 익혀서는 좋은 프로그램을 만들 수 없습니다. 문법을 넘어서 Go 프로그래머로 성장해야 합니다. SOLID 객체지향 설계 원칙, 테스트, 벤치마크 방법을 익히며 좋은 프로그램을 만드는 프로그래머로 성장해봅시다. 이대로 끝나면 아쉽겠죠? 지금까지 배운 것을 바탕으로 29장에서는 웹 서버를 만듭니다. 그리고 ‘RESTful API 서버’, ‘Todo 리스트 웹 사이트 만들기’ 프로젝트를 함께 진행해보고 마무리합니다._Tucker 노트본문에서 미처 다루지 못한 Go 문법, 생각하는 프로그래밍, Go 언어를 Go답게 쓰는 방법을 알려드립니다. 저자 Tucker의 특별한 노트를 만나보세요.__ A. Go 문법 보충 수업__ B. 생각하는 프로그래밍5. 추천사“Go 언어 입문자에게 추천할 수 있는 우리나라 책을 알게 되어 기분이 좋습니다. 'A Tour of Go'보다 더 많은 예시를 보고 싶은 현 Go 언어 개발자께도 추천합니다.”권경모 | 구글 소프트웨어 엔지니어, <The Ultimate Go Study Guide> 한글 번역 프로젝트 기여자“Go 언어의 매력은 간결함입니다. 이 책은 초보자에게 Go 언어의 매력을 알려줍니다. 한 달 동안몰입하여 타이핑하고 숙독한다면 프로그래머가 된 자신을 만나게 될 겁니다.”김호광 | 베타랩스 대표이사“Go 언어의 가능성을 맛볼 수 있는 지침서입니다. 고루틴, 채널 등 동시성 프로그래밍에 대한 개념뿐 아니라 RESTful API와 같은 보편적 개발 지식도 습득할 수 있습니다.” 방현우 | Urbanbase CTO“이보다 쉽고 재미있을 수 없습니다. 아주 쉽지만, Go 언어에 대한 궁금함을 세세하게 잡아주는 책!”강대명 | 위버스컴퍼니 소프트웨어 엔지니어“‘Go 언어 문법’만이 아닌, ‘Go 언어로 개발하는 방법’을 알려줍니다. 문법만 언급하고 끝나는 책이 아니기에, 다소 어렵게 느껴지기도 하지만, 저자의 안내에 따라 하나씩 정복하다 보면 어느새 Go 언어에 친근감을 느끼게 될 겁니다. 기본기를 탄탄히 쌓고 싶은 분께 추천합니다.”김재훈 | 한양대학교 ERICA캠퍼스 학부생“Go 언어를 이해하는 데 필요한 제반 내용을 기초부터 충실하게 다룹니다. 따라서 다른 프로그래밍 언어에 익숙하지 않은 초심자라도 Go 언어에 대한 풍부한 코딩 경험을 얻을 수 있을 겁니다.”배준현 | 경북대학교 초빙교수“어떤 분이 보셔도 좋을 정도로 쉽고 재미있습니다. 채널, 컨텍스트, 고루틴을 쉽게 설명하고, 토이 프로젝트가 제공되어 익히는 데 더욱 유익했습니다.”변성윤 | 쏘카 머신러닝 엔지니어, 《빅쿼리 완벽 가이드》 역자“단순히 Go 문법 공부가 아닌 프로그래밍 세계를 열어주는 입문서. 컴퓨터 공학의 기초를 상기시켜주어 기초 공부의 즐거움까지 일깨워주었습니다. Go 언어 문법과 개념 설명부터 서버 띄우기와 같은 실전에 바로 써먹을 수 있는 내용까지 알차게 담아냈습니다.”서지연 | 네이버 개발자“Go 언어를 넘어, 프로그래밍 입문자에게 좋은 가이드가 되어주는 책입니다. Go 언어 , 그리고 관련 컴퓨터공학 개념을 깊고 자세하게 다루지만, 충분한 예시와 설명이 곁들여져 입문자도 확실히 이해할 수 있을 겁니다.”홍승환 | 스캐터랩 머신러닝 엔지니어“절차지향 언어와 객체지향 언어의 장점만 뽑아놓은 듯한 Go 언어의 매력을 확인할 수 있는 책입니다. 가장 인상 깊었던 Go 언어 장점 3가지만 언급할게요. 1 강타입 언어이지만 := 키워드를 사용해 타입을 생략 가능, 2 덕 타이핑으로 느슨한 인터페이스 구현 가능, 3 고루틴, 채널, 컨텍스트 조합으로 효율적이고 직관적인 병렬 프로그래밍 가능.”황나라 | 라인비즈플러스 소프트웨어 엔지니어“프로그래밍 입문자에게 추천합니다. 기존에 읽은 다른 Go 언어 서적들보다 설명이 더 쉽고, 예제도 더 친숙했어요. Go 언어 문법뿐만 아니라 어디에 어떻게 사용하는지를 완벽하게 알 수 있을 겁니다.”정다윗 | 대경상업고등학교 학생, <우아한테크코스> 3기 교육생“프로그래밍 기초부터 심화 과정까지 잘 다루고 있습니다. 프로그래밍 언어 개발자께 특히 추천합니다. Go 언어뿐만 아니라 다양한 이론까지 배울 수 있는 좋은 책입니다.”제정민 | 대구소프트웨어고등학교 학생“Go 언어를 Go 언어답게 활용하고 싶은 분께 추천합니다. 기본에 충실하며 프로그래밍 근간을 이해하기 쉽게 설명하기 때문에 모든 개발자에게 도움이 되는 책입니다.”최용호 | 넥슨 코리아 소프트웨어 엔지니어6. 목차[0단계 Go 언어를 배우기 전에] 00장 개발 환경 구축 01장 컴퓨터 원리_1.1 비트의 탄생과 트랜지스터 _1.2 트랜지스터에서 계산기로 _1.3 계산기에서 컴퓨터로 _1.4 컴퓨터 동작 원리 핵심 요약 연습문제 02장 프로그래밍 언어 _2.1 초창기 프로그래밍 언어 _2.2 어셈블리어의 등장 _2.3 고수준 언어의 등장 _2.4 프로그래밍 언어의 구분 핵심 요약 연습문제 [1단계 가볍게 Go 입문하기]03장 Hello Go World _3.1 Go 역사 _3.2 Go 언어 특징 _3.3 코드가 실행되기까지 _3.4 Hello Go World 코드 뜯어보기 핵심 요약 연습문제 04장 변수 _4.1 변수란? _4.2 변수 선언 _4.3 변수에 대해 더 알아보기 _4.4 변수 선언의 다른 형태 _4.5 타입 변환 _4.6 변수의 범위 _4.7 숫자 표현 핵심 요약 연습문제 05장 fmt 패키지를 이용한 텍스트 입출력 _5.1 표준 입출력 _5.2 표준 입력 _5.3 <깊이보기> 키보드 입력과 Scan() 함수의 동작 원리 핵심 요약 연습문제 06장 연산자 _6.1 산술 연산자 _6.2 비교 연산자 _6.3 <깊이보기> 실수 오차 _6.4 논리 연산자 _6.5 대입 연산자 _6.6 연산자 우선순위 핵심 요약 연습문제 07장 함수 _7.1 함수 정의 _7.2 함수를 호출하면 생기는 일 _7.3 함수는 왜 쓰나? _7.4 재귀 호출 핵심 요약 연습문제 08장 상수 _8.1 상수 선언 _8.2 상수는 언제 사용하나? _8.3 타입 없는 상수 _8.4 상수와 리터럴 핵심 요약 연습문제 09장 if문 _9.1 if문 기본 사용법 _9.2 그리고 &&, 또는 || _9.3 중첩 if _9.4 if 초기문; 조건문 핵심 요약 연습문제 10장 switch문 _10.1 switch문 동작 원리 _10.2 switch문을 언제 쓰는가? _10.3 다양한 switch문 형태 _10.4 const 열거값과 switch _10.5 break와 fallthrough 키워드 핵심 요약 연습문제 11장 for문 _11.1 for문 동작 원리 _11.2 continue와 break _11.3 중첩 for문 _11.4 중첩 for문과 break, 레이블 핵심 요약 연습문제 12장 배열 _12.1 배열 _12.2 배열 사용법 _12.3 배열은 연속된 메모리 _12.4 다중 배열 핵심 요약 연습문제 13장 구조체 _13.1 선언 및 기본 사용 _13.2 구조체 변수 초기화 _13.3 구조체를 포함하는 구조체 _13.4 구조체 크기 _13.5 프로그래밍에서 구조체의 역할 핵심 요약 연습문제 14장 포인터 _14.1 포인터란? _14.2 포인터는 왜 쓰나? _14.3 인스턴스 _14.4 <깊이보기> 스택 메모리와 힙 메모리 핵심 요약 연습문제 15장 문자열 _15.1 문자열 _15.2 문자열 순회 _15.3 문자열 합치기 _15.4 <깊이보기> 문자열 구조 _15.5 <깊이보기> 문자열은 불변이다 핵심 요약 연습문제 16장 패키지 _16.1 패키지 _16.2 패키지 사용하기 _16.3 Go 모듈 _16.4 패키지명과 패키지 외부 공개 _16.5 <깊이보기> 패키지 초기화 핵심 요약 연습문제 17장 <Project> 숫자 맞추기 게임 만들기 _17.1 해법 _17.2 사전지식 _17.3 STEP 1 : 랜덤한 숫자 생성하기 _17.4 STEP 2 : 숫자값 입력받기 _17.5 STEP 3 : 숫자 맞추기 완성하기 핵심 요약 연습문제 [2단계 고급 기법으로 Go 레벨업하기]18장 슬라이스 _18.1 슬라이스 _18.2 <깊이보기> 슬라이스 동작 원리 _18.3 슬라이싱 _18.4 유용한 슬라이싱 기능 활용 _18.5 슬라이스 정렬 핵심 요약 연습문제 19장 메서드 _19.1 메서드 선언 _19.2 메서드는 왜 필요한가? _19.3 포인터 메서드 vs 값 타입 메서드 핵심 요약 연습문제 20장 인터페이스 _20.1 인터페이스 _20.2 인터페이스 왜 쓰나? _20.3 <깊이보기> 덕 타이핑 _20.4 인터페이스 기능 더 알기 _20.5 인터페이스 변환하기 핵심 요약 연습문제 21장 함수 고급편 _21.1 가변 인수 함수 _21.2 defer 지연 실행 _21.3 함수 타입 변수 _21.4 함수 리터럴 핵심 요약 연습문제 22장 자료구조 _22.1 리스트 _22.2 링 _22.3 맵 _22.4 <깊이보기> 맵의 원리 핵심 요약 연습문제 23장 에러 핸들링 _23.1 에러 반환 _23.2 <깊이보기> 에러 타입 _23.3 패닉 핵심 요약 연습문제 24장 고루틴과 동시성 프로그래밍 _24.1 스레드란? _24.2 고루틴 사용 _24.3 <깊이보기> 고루틴의 동작 방법 _24.4 동시성 프로그래밍 주의점 _24.5 뮤텍스를 이용한 동시성 문제 해결 _24.6 뮤텍스와 데드락 _24.7 또 다른 자원 관리 기법 핵심 요약 연습문제 25장 채널과 컨텍스트 _25.1 채널 사용하기 _25.2 컨텍스트 사용하기 핵심 요약 연습문제 26장 <Project> 단어 검색 프로그램 만들기 _26.1 해법 _26.2 사전 지식 _26.3 STEP 1 : 실행 인수 읽고 파일 목록 가져오기 _26.4 STEP 2 : 파일을 열어서 라인 읽기 _26.5 STEP 3 : 파일 검색 프로그램 완성하기 _26.6 개선하기 핵심 요약 연습문제 [3단계 Go 프로그래밍에 유용한 기법 익히기]27장 객체지향 설계 원칙 SOLID _27.1 객체지향 설계 5가지 원칙 SOLID _27.2 단일 책임 원칙 _27.3 개방-폐쇄 원칙 _27.4 리스코프 치환 원칙 _27.5 인터페이스 분리 원칙 _27.6 의존 관계 역전 원칙 _27.7 학습 마무리 핵심 요약 연습문제 28장 테스트와 벤치마크 _28.1 테스트 코드 _28.2 <깊이보기> 테스트 주도 개발 _28.3 벤치마크 핵심 요약 연습문제 29장 Go 언어로 만드는 웹 서버 _29.1 HTTP 웹 서버 만들기 _29.2 <깊이보기> HTTP 동작 원리 _29.3 HTTP 쿼리 인수 사용하기 _29.4 ServeMux 인스턴스 이용하기 _29.5 파일 서버 _29.6 웹 서버 테스트 코드 만들기 _29.7 JSON 데이터 전송 _29.8 HTTPS 웹 서버 만들기 핵심 요약 연습문제 30장 <Project> RESTful API 서버 만들기 _30.1 해법 _30.2 사전 지식 : RESTful API _30.3 STEP 1 : RESTful API 서버 만들기 _30.4 STEP 2 : 테스트 코드 작성하기 _30.5 STEP 3 : 특정 학생 데이터 반환하기 _30.6 STEP 4 : 학생 데이터 추가/삭제하기 핵심 요약 연습문제 31장 <Project> Todo 리스트웹 사이트 만들기 _31.1 해법 _31.2 준비하기 _31.3 STEP 1 : 웹 서버 만들기 _31.4 STEP 2 : 프론트엔드 만들기 _31.5 웹 배포 방법 고려하기 _31.6 STEP 3 : 헤로쿠로 배포하기 핵심 요약 연습문제 [Tucker 노트]A Go 문법 보충 수업 _A.1 배열과 슬라이스 _A.2 for range _A.3 입출력 처리 _A.4 알아두면 유용한 go 명령어 _A.5 cgo로 C 언어 호출하기 _A.6 go doc _A.7 Embed B 생각하는 프로그래밍 _B.1 Go는 객체지향 언어인가? _B.2 구조체에 생성자를 둘 수 있나? _B.3 포인터를 사용해도 복사가 일어나나? _B.4 값 타입을 쓸 것인가? 포인터를 쓸 것인가? _B.5 구체화된 객체와 관계하라고? _B.6 Go 언어 가비지 컬렉터 _B.6 Go 언어 가비지 컬렉터
  • Table of Contents:
Tucker의 Go 언어 프로그래밍: Golang 입문부터 고급 기법까지, 재미있는 4가지 ... - 공봉식 - Google Sách
Tucker의 Go 언어 프로그래밍: Golang 입문부터 고급 기법까지, 재미있는 4가지 … – 공봉식 – Google Sách

Read More

컴퓨터가 만드는 랜덤은 정말로 랜덤할까? | Evans Library

  • Article author: evan-moon.github.io
  • Reviews from users: 11036 ⭐ Ratings
  • Top rated: 3.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 컴퓨터가 만드는 랜덤은 정말로 랜덤할까? | Evans Library 랜덤(Random)이란 무엇일까? 먼저, 랜덤 이란 무엇일까? 위에서 설명했듯이 무작위 로 발생하는 어떠한 패턴이다. 사람마다 … …
  • Most searched keywords: Whether you are looking for 컴퓨터가 만드는 랜덤은 정말로 랜덤할까? | Evans Library 랜덤(Random)이란 무엇일까? 먼저, 랜덤 이란 무엇일까? 위에서 설명했듯이 무작위 로 발생하는 어떠한 패턴이다. 사람마다 … 이번 포스팅에서는 에 대해서 한번 이야기 해볼까 한다. 랜덤이란 어떤 사건이 발생했을 때 이전 사건과 다음 사건의 규칙성이 보이지 않는, 말 그대로 로 발생하는 패턴을 이야기한다. 우리가 사용하고 있는 컴퓨터도 랜덤한 패턴을 만들어야 할 때가 있고 또 실제로도 만들고 있다.
  • Table of Contents:

랜덤(Random)이란 무엇일까

컴퓨터에서의 랜덤

마치며

컴퓨터가 만드는 랜덤은 정말로 랜덤할까? | Evans Library
컴퓨터가 만드는 랜덤은 정말로 랜덤할까? | Evans Library

Read More

현대에서 이세계 아이 키우기 7권 – 딸기연필 – Google Sách

  • Article author: books.google.com.vn
  • Reviews from users: 14431 ⭐ Ratings
  • Top rated: 3.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 현대에서 이세계 아이 키우기 7권 – 딸기연필 – Google Sách Updating …
  • Most searched keywords: Whether you are looking for 현대에서 이세계 아이 키우기 7권 – 딸기연필 – Google Sách Updating 이세계에서 아이를 주워와서,   현대에서 키운다.
  • Table of Contents:
현대에서 이세계 아이 키우기 7권 - 딸기연필 - Google Sách
현대에서 이세계 아이 키우기 7권 – 딸기연필 – Google Sách

Read More

몬스터 잡는 배우님 1 – S프레소 – Google Sách

  • Article author: books.google.com.vn
  • Reviews from users: 46595 ⭐ Ratings
  • Top rated: 4.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 몬스터 잡는 배우님 1 – S프레소 – Google Sách Updating …
  • Most searched keywords: Whether you are looking for 몬스터 잡는 배우님 1 – S프레소 – Google Sách Updating 연기만 하며 살고 싶은 배우님. 임은한. 날벼락처럼 찾아 온 초능력자 각성! “세계 최고의 재능입니다!” 예? [??? : 당신은 해츨링, 즉 어린 드래곤입니다.] 예? 나 하고 싶은 거 하고 살겠다는데, 왜 이렇게 안 된다는 사람이 많아?! “그럼 몬스터도 잡고 배우도 하면 되지.” 은한, 투잡을 선언하다!!
  • Table of Contents:
몬스터 잡는 배우님 1 - S프레소 - Google Sách
몬스터 잡는 배우님 1 – S프레소 – Google Sách

Read More


See more articles in the same category here: 180+ tips for you.

랜덤 뜻 간단정리

랜덤 뜻

안녕하세요 오늘 설명드릴 내용은 많은 분들이 궁금해하셨던 랜덤이란 무슨 뜻인지 자세히 알아보는 시간을 갖도록 하겠습니다.

평소에 랜덤이라는 단어를 종종 듣게 될 때가 있는데요, 이럴 때 정확한 뜻을 몰라서 헷갈려 하시는 분들이 많이 계신 것 같습니다. 그렇다면 랜덤 뜻이 무엇일지 바로 살펴보겠습니다.

사전적 의미

우선 랜덤 뜻을 사전에서 찾아보게 되면 ‘무작위로’ 또는 ‘임의로’라고 설명되어 있는데요, 쉽게 말해서 ‘아무렇게나’라는 의미로 생각해 주시면 좋습니다.

보통 무엇을 추첨하려 할 때 랜덤 추첨 또는 랜덤 박스 등등 다양한 곳에서 랜덤이라는 단어가 사용되고 있는 것을 볼 수 있는데요, 이러한 것들은 아무나 무작위로 추첨돼서 나온다는 말로 이해해 주시면 좋습니다.

그렇기에 랜덤박스나 랜덤 뽑기의 경우 좋은 상품이 걸릴 수도 있고, 별로 좋지 않은 상품이 나올 수도 있기 때문에 복불복이랑 같은 뜻이라고 생각해 주시면 좋을 것 같습니다.

맨 처음 랜덤이라는 단어를 듣게 됐을 때는 무척 생소해 보이고 어려워 보였지만 이렇게 정확한 뜻을 알고 나면 이해하기 무척 쉬운 단어인 것 같습니다.

오늘은 이렇게 랜덤 뜻에 대해 알아보는 시간을 가졌습니다. 평소에 많은 분들께서 궁금해하셨을만한 내용이기에 소개해드렸는데요, 많은 도움이 되셨으면 좋을 것 같습니다.

랜덤(random) 뜻, 랜덤 발송 뜻은 무엇인가요?

인터넷 쇼핑, 게임, 수학 등 많은 분야에서 종종 볼 수 있든 단어가 있습니다. 바로 랜덤(random)이라는 용어입니다. 이 랜덤이 무엇을 뜻할까요? 간단하게 설명하면 어떤 개입도 없이 그대로의 운에 의해서 일어나는 것을 말합니다. 이해하기 쉽게 알아보겠습니다.

1. 랜덤(random) 뜻은?

random

happening, done, or chosen by chance rather than according to a plan

Cambridge Dictionary 中

랜덤은 ‘계획에 의한 것이 아닌 운에 의해서 일어나고 있는 일, 일어난 일, 선택된 일’이라는 뜻을 가지고 있습니다. 쉽게 말하면 누구의 의도와도 상관없이 그저 운에 의해서 벌어진 사건입니다. 한국어로는 ‘무작위(無作爲)’라고 합니다. 한자의 뜻은 아니하다 무(無), 일으키다 또는 만들다 작(作), 행동하다 위(爲)입니다. 결국, ‘(인위적으로) 만들거나 일으키는 행동을 하지 않는 것’을 말합니다.

2. 랜덤 발송이란?

랜덤 발송은 보내는 사람이 상품을 아무거나 보낸다는 의미입니다. 받는 사람이 무엇을 받을지 모르는 상태로 ‘판매자가 보낸 특정 상품을 받으면 그것이 당신의 운이다.’라는 전제가 깔려있는 것입니다.

예를 들어 A 모델, B 모델, C 모델의 상품이 있습니다. 판매자는 인터넷 쇼핑몰에 5개 묶음 랜덤 발송이라고 써놓았습니다. 랜덤 발송은 어떤 주문자 김 씨는 A 모델 2개, B 모델 2 개, C 모델 1개를 받을 수도 있고 다른 주문자 이 씨는 A 모델 3개, B 모델 1개, C 모델 1개를 받을 수도 있다는 것입니다. 주문자가 무엇을 받든 그냥 운으로 여겨야 한다는 뜻입니다.

3. 랜덤 발송은 정말 랜덤일까?

그렇다면 랜덤 발송은 판매자가 정말로 운에 의해서 선별된 제품을 넣는 것일까요? 결론부터 말하면 랜덤 발송은 랜덤이 아닌 경우가 더 많습니다. 대부분 판매자의 재고가 더 많이 남은 상품이 발송되는 것입니다. (물론 정말 운적 요소에 의해서만 발송하는 판매자도 있긴 합니다.)

진정한 의미의 랜덤 발송이라면 판매자 또한 제품을 포장하는 단계에서 랜덤으로 제품을 담아야 합니다. 주사위를 굴리든 컴퓨터 프로그램을 사용하든 어떠한 인위적 개입도 없어야 합니다.

그러나 현실적으로 주문자가 이것을 확인할 방법은 없습니다. 그냥 판매자가 보내는 대로 받고 그게 마음에 들면 운이 좋은 것이고 마음에 안 들면 불운이라고 치부하는 것입니다. 또한, 판매자의 입장에서는 재고가 가장 많은 것을 랜덤 발송이라는 명분하에 처리할 수 있기 때문에 주문자는 이미 재고가 많은 것을 받게 예정되어 있는 것입니다.

4. 랜덤의 순기능

인간이 가진 여러 능력과는 상관없이 오로지 운에 의해서 무엇을 선택하는 것은 옳은 것일까요? 학문적으로 랜덤이 가지는 기능은 다음과 같습니다.

첫째, 가장 공평하며 불만을 가질 대상도 없습니다. 랜덤의 가장 큰 기능 중 하나입니다. 운에 의해서 선택받는 것은 특정인이 가진 사회적 배경도, 능력을 고려하지 않습니다. 똑똑하든 멍청하든, 재산이 많든 적든 모두가 공평하게 경쟁하는 것입니다. 또한 랜덤에 의해서 선택받지 못한 사람들도 탓하거나 불만을 가질 대상이 없습니다.

둘째, 능력이 뒤처진 사람도 이길 수 있는 기회를 제공합니다. 능력이 뛰어난 A와 다소 부족한 B가 운적 요소가 없는 경쟁을 한다면 언제나 A가 이기게 됩니다. 그러나 랜덤에 의해서 운이 작용하게 된다면 능력이 조금 부족한 B가 A를 이길 확률이 생깁니다. 예를 들어, 수학을 잘하는 김 씨와 못하는 이 씨가 수학으로 경쟁하면 김 씨가 항상 이기겠지만 가위바위보로 경쟁하면 수학을 못해도 이 씨가 이길 수 있습니다.

우리의 생활 속에는 이미 랜덤 요소가 곳곳에 담겨있습니다. 랜덤이 가지는 사회적 기능을 생각해 본다면 단순히 운으로만 여길 수는 없습니다.

지금까지 랜덤(random)의 뜻과 랜덤 발송이 무엇인지 살펴보았습니다. 랜덤이라는 표현이 쓰이는 분야에서 엄밀한 조건 하에 랜덤이 이루어지는지 살펴보는 것도 필요하다고 생각합니다. 위의 내용을 요약하면 다음과 같습니다.

랜덤은 특정 의도적 계획이 없이 오로지 운에 의해서만 발생하는 것이다. 랜덤 발송이란 주문자는 무엇을 받을지 모르고 판매자가 발송한 물품을 운으로 여기는 주문이다. 사실상 랜덤 발송은 판매자의 재고가 많이 쌓인 것을 받을 확률이 높기에 엄밀히 랜덤 발송이라 할 수 없다. 랜덤과 운적 요소는 여러 사회적 기능도 가지고 있다.

반응형

컴퓨터가 만드는 랜덤은 정말로 랜덤할까?

이번 포스팅에서는 랜덤 에 대해서 한번 이야기 해볼까 한다. 랜덤이란 어떤 사건이 발생했을 때 이전 사건과 다음 사건의 규칙성이 보이지 않는, 말 그대로 무작위 로 발생하는 패턴을 이야기한다. 우리가 사용하고 있는 컴퓨터도 랜덤한 패턴을 만들어야 할 때가 있고 또 실제로도 만들고 있다.

하지만 컴퓨터는 사실 그냥 기능이 많은 계산기 에 불과하다. 계산기는 입력된 값을 가지고 이리 저리 가지고 놀다가 결과값을 내놓는 물건이다. 근데 이런 계산기가 어떻게 랜덤 한 결과를 만들어낼 수 있는 것일까? 우리는 이 질문에 대한 답을 찾기 전에 근본적으로 랜덤이란 것이 무엇인지부터 생각해봐야한다. 진짜 무작위 라는 것이 존재하기는 하는 걸까?

먼저, 랜덤 이란 무엇일까? 위에서 설명했듯이 무작위 로 발생하는 어떠한 패턴이다.

사람마다 의견이 분분하겠지만 지금 필자 머리 속에 떠오른 대표적인 랜덤은 바로 도박 이다. 도박의 가장 위험한 점이 비록 이번 판에는 잃었지만 다음 판에는 나도 딸 수 있을거야! 라는 희망인데, 이런 희망은 도박할 때 사용하는 게임들이 랜덤 에서 기반하는 게임이라는 생각에서 출발하기 때문이다. 즉, 어느 정도 운빨게임이어야 한다는 것이다.

대법원 판례 2006도736에도 도박의 정의를 재물을 걸고 우연에 의하여 재물의 득실을 결정하는 것 이라고 이야기하고 있다. 대표적인 도박인 파칭코, 섰다, 포커, 주식 등만 살펴봐도 대충 감이 온다.

필자는 도박에서 사용하는 게임을 잘 모르기 때문에 누구나 해봤을 법한 가벼운 도박을 예로 들어보겠다. 필자가 중고등학생 시절을 보낸 2000년대에 전국의 중, 고등학교에서 널리 행해졌던 놀이인 판치기 이다. 판치기는 워낙 전국적으로 유행했기 때문에 필자 또래의 독자분들이면 독자분들이면 한번 쯤은 해봤거나 아니면 친구들이 하는 걸 보기는 했을 거라 믿는다.

판치기하다가 선생님들한테 걸리면 교무실로 끌려가서 바로 빠따행이었다.

그래도 혹시 판치기가 뭔지 모르는 분들이 있을 수 있으니 일단 간단하게 룰을 설명하겠다.

적당히 두꺼운 교과서를 준비한다. 국사책이나 물리책처럼 적당히 두꺼운 책을 사용하자. 각자 준비한 동전을 교과서에 올린다. 보통 100원을 건다. 순서대로 교과서를 손으로 때려서 동전을 뒤집는다. 모든 동전을 뒤집어서 같은 면으로 만든 사람이 판돈을 모두 가져간다.

상식적으로 교과서를 손으로 때렸을 때 n 개의 동전이 뒤집어 질 것이라는 계산을 하기란 쉽지 않다. 즉, 판치기는 어느 정도 랜덤 에 기반한 게임이고 그래서 도박 의 기본적인 특성인 사행성 을 가질 수 있는 것이다.

참고로 형법 제 246조 1항과 국내 도박법 판례 상 학교에서 하는 판돈이 몇백원 정도인 판치기는 일시 오락으로 판정받아서 무죄이지만, 아무리 판치기라고 해도 몇백만원 수준의 돈이 왔다갔다 하는 수준이면 도박죄로 처벌받을 수 있다는 점 알아두자. (물론 저 정도 돈이 있는 사람들이면 판치기말고 다른 걸 한다…)

그럼 이 쯤에서 처음의 그 질문을 한번 던져보겠다.

이게 정말로 랜덤일까?

예전에 필자의 학창시절을 생각해봐도 학교에 1~2명씩 판치기의 절대 고수들이 있었는데 이 친구들은 자신이 원하는 동전만 정확히 뒤집을 수 있는 능력을 보유하고 있었다. 예전에 TV에서도 판치기의 고수라고 나온 분이 있었는데 이 분은 뭐 거의 닥터 스트레인지 수준이었다.

사실 판치기도 결국은 물리 법칙 내에서 돌아가는 판이기 때문에 판돈으로 걸린 동전의 무게, 판을 내려치는 힘, 판으로 사용된 교과서의 탄력성 등 몇가지 변수를 알면 어느 동전이 뒤집어 질지도 계산할 수 있을 것이다. 물론 이렇게 계산하는 것이 쉬운 일은 아니기 때문에 우리는 진정한 의미의 랜덤 이 아니더라도 이 정도면 그냥 랜덤 하다고 치는 것이다.

즉, 우리 주변에서도 진정한 의미의 랜덤은 그렇게 많지 않다는 것을 알 수 있다. 단지 우리가 랜덤하다고 생각할 뿐이다.

컴퓨터에서의 랜덤

사실 우리가 일상에서 어느 정도 우연성이 있다면 랜덤하다고 하듯이 컴퓨터도 진정한 의미의 랜덤을 만들어 내는 것이 아니라 어느 정도 납득할만한 우연성을 만들어 내고 이를 랜덤하다고 한다. 게다가 컴퓨터로 뭔가를 만드려면 어떠한 규칙을 만들어줘야 하는데, 어떠한 규칙으로 규칙이 없는 랜덤을 생성한다는 말 자체가 모순이다.

그래서 우리는 랜덤은 아니지만 랜덤에 가까운 유사 랜덤(Pseudo Random) 밖에 만들 수 밖에 없는 것이다. 또한 컴퓨터는 기본적으로 숫자를 기반으로 하는 일종의 계산기이기 때문에 랜덤한 사건을 만들기 위해서는 난수 , 즉 랜덤한 수를 뽑아 낼 수 있어야 한다.

그럼 컴퓨터는 어떻게 이런 난수 생성을 하는 걸까?

중앙제곱법(Mid Square Method)

중앙제곱법 은 폰 노이만이 1949년에 고안한 유사 난수 생성법으로, 임의의 숫자를 제곱한 다음 이 숫자의 일부분을 가져와서 새로운 난수로 만들어내는 방법이다.

임의의 4자리 난수를 만든다고 가정해보자. 초기 값은 심플하게 1234 로 가겠다.

페이즈 대상값 제곱값 난수 0 1234 1522756 1522756 1 5227 27321529 27321529 2 3215 10336225 10336225

이런 식으로 계속 중앙에 있는 값을 빼와서 제곱하면서 임의의 난수를 생성하는 방법이 바로 중앙제곱법 이다. 뭔가 딱봐도 예측하기 쉬워보인다. 아무래도 폰 노이만 형이 활동하던 1950년대에 개발된 알고리즘이고, 그 당시 컴퓨터의 성능은 눈물나기 그지 없었으므로 최대한 간단한 방법을 사용한 것이다. 그래서 이 방법은 요즘에는 거의 사용되지 않는다.

선형합동법(Linear Congruential Method)

선형합동법 은 C의 rand 함수에서 사용하는 알고리즘이며 다음과 같은 재귀 관계식으로 정의되며 난수들의 수열을 반환한다.

X n + 1 = ( a X n + c ) m o d m X_{n+1} = (aX_n + c) \mod m X n + 1 ​ = ( a X n ​ + c ) m o d m

여기서 X X X는 난수로 된 수열이고 나머지는 그냥 임의의 정수이다. 참고로 ANSI C 표준은 m = 2 31 , a = 1103515245 , c = 12345 m = 2^{31}, a = 1103515245, c = 12345 m=231,a=1103515245,c=12345로 정해져있다. 그럼 간단하게 한번 자바스크립트를 사용해서 구현해보자.

let m = 2 ** 31 ; const a = 1103515245 ; const c = 12345 ; function rand ( x ) { return ( ( ( x * a ) + c ) % m ) ; } function getRandomNumbers ( randCount = 1 ) { const initial = new Date ( ) . getTime ( ) ; const randomNumbers = [ initial ] ; for ( let i = 0 ; i < randCount ; i ++ ) { randomNumbers . push ( rand ( randomNumbers [ i ] ) ) ; } randomNumbers . shift ( ) ; return randomNumbers ; } console . log ( getRandomNumbers ( 10 ) ) ; 코드를 브라우저 콘솔에 붙혀넣고 실행시켜보면 인자로 주었던 10만큼의 길이를 가진 난수 배열이 출력된다. ( 10 ) [ 1163074432 , 465823232 , 1719475776 , 1744670976 , 790949120 , 552540416 , 896259328 , 1473241344 , 1074855168 , 575793408 ] 선형합동법 의 특징은 이전에 생성된 난수를 활용한다는 것이며 최대 m m m만큼 경우의 수를 가지므로 최악의 경우 m m m 만큼의 반복 주기를 가진다. 필자가 m 변수를 let 키워드로 선언한 건 이 이유다. 한번 브라우저에서 m 변수에 작은 수를 할당한 다음에 getRandomNumbers 함수를 다시 호출해보자. 난수의 경우의 수와 동일한 값이 출현이 눈에 띄게 커진다는 것을 확인해볼 수 있다. 선형합동법은 계산이 굉장히 간단하고 빠르기 때문에 초창기부터 컴퓨터에 널리 사용되었다. 그러나 선형합동법 은 난수에 주기성이 있고 생성되어 나오는 난수들 사이에 상관 관계가 존재하기 때문에 마지막으로 생성된 난수와 그 외 변수들만 알면 그 다음에 생성될 난수를 모두 예측할 수 있다. 문제는 그 변수들이 ANSI C 표준으로 정해져 있어서 누구든지 다 알 수 있다는 점이다. 즉, 조금 지식이 있는 사람이면 rand 함수의 결과를 보고 다음 난수를 미리 예상할 수 있다는 것이다. 그래서 이 알고리즘은 난수가 예측당해도 상관없는 경우나 임베디드처럼 메모리를 많이 사용하지 못하는 제한된 상황에서 주로 사용한다. 메르센 트위스터(Mersenne Twister) 메르센 트위스터 는 엑셀, MATLAB, PHP, Python, R, C++ 등에서 사용하고 있는 난수 생성 알고리즘이며, 1997년에 마츠모토 마코토 와 니시무라 다쿠지 가 개발한 알고리즘이다. 메르센 트위스터라는 이름은 이 알고리즘의 난수 반복 주기가 메르센 소수 인데서 유래했다. 메르센 소수라고 하면 뭔가 대단한 수 같은데 사실 별 거 없다. 메르센 수 는 M n = 2 n − 1 M_n = 2^{n} - 1 Mn​=2n−1으로 나타내며 식 그대로 2의 n제곱에서 1이 모자란 수 를 말하는 것이고 메르센 소수 는 그냥 이 메르센 수 중에서 소수인 것을 고른 것이다. 보통 2 19937 − 1 2^{19937} - 1 219937−1의 난수 반복 주기를 가지는 MT19937 이 많이 사용되는데, C++에서도 이 알고리즘을 채택해서 사용하고 있다. 이 알고리즘의 동작 원리를 간단하게 설명하면 다음과 같다. seed를 사용하여 624 만큼의 길이를 가진 벡터를 생성. seed는 보통 하드웨어 노이즈나 오늘 날짜를 사용한다. 이 벡터를 사용하여 624개의 유사 난수를 만든다. 이 벡터에 노이즈를 준 후 다시 2번을 반복. 이 노이즈를 주는 행위를 Twist한다고 한다. 이때 3번의 Twist 하는 과정에서 GFSR(Generalized Feedback Shift Register 라는 방법을 사용한다. GFSR 은 자료가 많지 않고 대부분 논문같은 학술 자료만 있는 상황이라 필자가 자세히 알아보지는 못했으나, 열심히 구글링하고 논문들을 뜯어본 결과 LFSR(Linear Feedback Shift Register) 를 약간 변형한 방법이라는 정보를 얻을 수 있었다. (정보가 너무 제한적이라 LFSR 기반이 맞는지는 정확하지 않다.) LFSR 은 이전 상태 값들을 가져와서 선형 함수를 통해 계산한 후 그걸 사용해서 다음 값을 만들어 내는 방법이다. 이때 사용하는 함수는 보통 XOR 를 많이 사용하고 맨 처음 값을 시드(Seed) 라고 부른다. LFSR 를 간단히 설명하자면, 우선 몇개의 메모리 주소를 골라놓고 초기화된 인풋인 시드를 레지스터에 밀어넣는다. 그러면 오른쪽으로 한칸씩 비트가 밀리게(Shifting) 된다. 그러면 우리는 끝에서 삐져나온 한개의 비트를 아웃풋에서 얻게 된다. 그 다음 미리 골라놨던 메모리 주소에 접근해서 값을 빼온 다음에 순서대로 하단에 위치한 3개의 XOR 게이트에 통과시키면 다음 인풋이 나오고 그걸 또 레지스터에 밀어넣는걸 반복하는 것이다. 메르센 트위스터도 결국은 LFSR 가 약간 변형된 GFSR 를 사용하여 난수를 생성하기 때문에 초반에 시드를 생성해줘야한다. 메르센 트위스터의 자세한 알고리즘은 위키피디아의 Mersenne Twister - Algorithmic_detail에서 확인할 수 있다. 필자는 2002년에 마츠모토 마코토 와 니시무라 다쿠지 가 자신들의 메르센 트위스터 알고리즘을 개선해서 다시 작성한 C의 MT19937 알고리즘 코드를 보고 자바스크립트로 한번 포팅해보았다. 이 코드는 최대 32bit 길이의 난수를 사용하도록 작성되어있다. 64bit용 알고리즘은 MT19937-64 라고 또 따로 있다. const N = 624 ; const M = 397 ; const F = 1812433253 ; const UPPER_MASK = ( 2 ** 32 ) / 2 ; const LOWER_MASK = UPPER_MASK - 1 ; const MATRIX_A = 0x9908b0df ; class MersenneTwister { constructor ( ) { const initSeed = new Date ( ) . getTime ( ) ; this . mt = new Array ( N ) ; this . index = N + 1 ; this . seedMt ( initSeed ) ; } seedMt ( seed ) { let s ; this . mt [ 0 ] = seed >>> 0 ; for ( this . index = 1 ; this . index < N ; this . index ++ ) { this . mt [ this . index ] = F * ( this . mt [ this . index - 1 ] ^ ( this . mt [ this . index - 1 ] ) >>> 30 ) + this . index ; this . mt [ this . index ] &= 0xffffffff ; } } int ( ) { let y ; const mag01 = new Array ( 0 , MATRIX_A ) ; if ( this . index >= N ) { let kk ; if ( this . index === N + 1 ) { this . seedMt ( 5489 ) ; } for ( kk = 0 ; kk < N - M ; kk ++ ) { y = ( this . mt [ kk ] & UPPER_MASK ) | ( this . mt [ kk + 1 ] & LOWER_MASK ) ; this . mt [ kk ] = this . mt [ kk + M ] ^ ( y >>> 1 ) ^ mag01 [ y & 1 ] ; } for ( ; kk < N - 1 ; kk ++ ) { y = ( this . mt [ kk ] & UPPER_MASK ) | ( this . mt [ kk + 1 ] & LOWER_MASK ) ; this . mt [ kk ] = this . mt [ kk + ( M - N ) ] ^ ( y >>> 1 ) ^ mag01 [ y & 1 ] ; } y = ( this . mt [ N – 1 ] & UPPER_MASK ) | ( this . mt [ 0 ] & LOWER_MASK ) ; this . mt [ N – 1 ] = this . mt [ M – 1 ] ^ ( y >>> 1 ) ^ mag01 [ y & 1 ] ; this . index = 0 ; } y = this . mt [ this . index ++ ] ; y ^= ( y >>> 11 ) ; y ^= ( y << 7 ) & 0x9d2c5680 ; y ^= ( y << 15 ) & 0xefc60000 ; y ^= ( y >>> 18 ) ; return y >>> 0 ; } ; }

코드 내부에 사용된 상수 F = 1812433253 , MATRIX_A = 0x9908b0df , this.seedMt(5489) 등은 필자가 임의로 넣은 수가 아니라 MT19937 의 표준 계수로 정해져 있는 수이다.

사실 알고리즘 자체가 너무 복잡해서 필자도 다 이해하지는 못했다. (대학 때 공부를 열심히 안한 죄…) 그래도 일단 이렇게 코드로 한번 직접 작성해보면 글로만 읽을 때보다는 확실히 조금 더 이해가 되기 때문에 C로 작성된 원래 코드를 자바스크립트로 포팅한 것이다. 필자가 참고한 C 라이브러리 코드는 여기서 확인할 수 있다.

const rand = new MersenneTwister ( ) ; console . log ( rand . int ( ) ) ;

작성한 코드를 직접 실행해보니 랜덤한 난수가 잘 생성이 되는 것 같다. 사실 난수가 잘 생성되는지 정확하게 보려면 결과를 시각화한 후 난수의 분포도를 봐야하지만 귀찮은 관계로 일단 패스하겠다. 참고로 이 알고리즘을 만든 마츠모토 마코토의 홈페이지에 들어가면 이 알고리즘이 왜 이런 이름을 가지게 되었는지 나와있다.

마코토: Knuth 교수님이 이 이름 발음하기 너무 힘들대.

다쿠지: … [며칠 후] 마코토: 하이 타쿤, 메르센 트위스터는 어때? 메르센 소수를 사용하기도 했고, 원형은 Twisted GFSR(Generalized Feedback Shift Register)니까.

다쿠지: 글쎄…?

마코토: 왠지 제트코스터 같이 들리는 걸? 빨라보이기도 하고 기억하고 쉽고 발음하기 좋고. 그리고 이건 비밀인데 이 이름엔 우리들의 이니셜이 숨어있지!(Makoto, Takuji)

다쿠지: …

마코토: 자자자 MT로 가는거다?

다쿠지: 음…그래 나중에 우리는 Knuth 교수님으로부터 “좋은 이름인 것 같다”라는 편지를 받았다.

뭔가 깨발랄한 마코토형과 시니컬한 다쿠지형 케미가 돋보인다. 뭔가 이런 대단한 알고리즘을 개발한 사람이지만 사람 냄새나는 네이밍 과정인듯.

XOR 시프트(XOR shift)

XOR 시프트 도 메르센 트위스터와 마찬가지로 Linear Feedback Shift Register 을 기반으로 한 의사 난수 알고리즘이다. 어떻게 보면 메르센 트위스트의 하위호환이라고 볼 수도 있는데, 메르센 트위스트와 원리는 비슷하지만 구현이 훨씬 간단하고 작동이 빠르기 때문에 왕왕 사용된다.

XOR 시프트 알고리즘은 여러 종류가 있는데, 32bit , 64bit , 128bit 의 수를 사용하며 각각 2 32 − 1 2^{32} -1 232−1, 2 64 − 1 2^{64} – 1 264−1, 2 128 − 1 2^{128} – 1 2128−1의 메르센 수 난수 반복 주기를 가진다.

근데 이게 TestU01 이라는 난수 품질 테스트 프레임워크의 테스트를 통과하지 못해서 조금 문제가 있었다. 이걸 통과해야 ANSI C 표준이 될 수 있기 때문이다.

그래서 몇가지 변종 알고리즘이 나오게 되었는데 그 중 하나가 128bit 를 사용하는 XOR 시프트 128 을 개량한 XOR 시프트 128 + 라는 알고리즘이다. (뭔가 게임 후속작 제목 같다…)

참고로 V8 , SpdierMonkey , JavaScriptCore 등 메이저 자바스크립트 엔진들이 채택한 난수 생성 알고리즘이 XOR 시프트 128 + 이다. 이 알고리즘은 2016년 11월에 Sebastiano Vigna 라는 분에 의해 학회에서 발표되었다. 논문 내용은 여기에서 확인할 수 있다.

전반적인 원리는 위에서 설명한 LFSR 와 비슷하니, V8 엔진에서 Math.random 메소드를 어떻게 구현했는지 한번 살펴보자. 원래 코드는 C++로 작성되어있으나 여러분이 브라우저에서 코드를 쉽게 실행시켜볼 수 있도록 동일한 로직을 자바스크립트로 포팅해서 작성하겠다.

V8 내부 소스 코드는 v8/src/base/utils/random-number-generator.h 의 XorShift128 메소드에 작성되어 있다.

const state = [ 1827981275 , 1295982171 ] ; function xorshift128plus ( ) { let s1 = state [ 0 ] ; let s0 = state [ 1 ] ; state [ 0 ] = s0 ; s1 ^= s1 << 23 ; s1 ^= s1 >> 17 ; s1 ^= s0 ; state [ 1 ] = s1 ; console . log ( ‘레지스터의 현재 상태 -> ‘ , state ) ; return state [ 0 ] + state [ 1 ] ; } console . log ( ‘초기 레지스터 상태 -> ‘ , state ) ; for ( let i = 0 ; i < 5 ; i ++ ) { console . log ( '난수 -> ‘ , xorshift128plus ( ) ) ; }

초기 레지스터 상태 – > [ 1827981275 , 1295982171 ] 레지스터의 현재 상태 – > [ 1295982171 , 867440954 ] 난수 – > 2163423125 레지스터의 현재 상태 – > [ 867440954 , 1393243966 ] 난수 – > 2260684920 레지스터의 현재 상태 – > [ 1393243966 , 37812574 ] 난수 – > 1431056540 레지스터의 현재 상태 – > [ 37812574 , 833890405 ] 난수 – > 871702979 레지스터의 현재 상태 – > [ 833890405 , 1661667227 ] 난수 – > 2495557632

출력된 로그를 보면 레지스터의 상태가 어떻게 변하고 있는지 알 수 있다.

[1] 번 인덱스에 있던 값이 [0] 번 인덱스로 옮겨지고 [1] 번 인덱스에 새로운 난수를 꽂아넣은 후 두 원소를 더해서 출력하고 있다는 걸 알 수 있다.

계산 과정을 보면 [1] 번 인덱스에 새로운 값을 넣을 때는 시프팅되어 왼쪽으로 삐져나온 값인 [0] 번 인덱스의 값을 사용하여 XOR 시프팅 을 진행하고 그 값을 다시 [1] 번 인덱스에 넣어준다.

그리고 시프팅하는 상수인 23 , 17 은 XOR 시프팅 128+ 알고리즘을 개발할 때 연구를 통해 찾아낸 최적의 상수이기 때문에 사용하는 것이다. 해당 논문을 보면 뭐 이것저것 시도해본 다음에 결과를 일일히 테스트해서 나온 결과를 비교한 도표도 함께 첨부되어있다.

마치며

사실 처음에는 가벼운 마음으로 랜덤 에 대한 이야기를 해보려고 했는데 예상보다 수학적인 내용이 많이 나와서 왠지 어려운 포스팅이 되어버린 것 같다.

사실 컴퓨터라는 계산기로 진정한 의미의 난수를 만드는 것은 거의 불가능하다. 최근에 미국에서 양자컴퓨터를 사용해서 진정한 의미의 난수를 생성하는 데 성공했다고 하지만 양자컴퓨터는 아직은 우리와 너무나도 먼 이야기이기 때문에 논외로 치겠다.

필자도 사실 수학을 그다지 좋아하는 편은 아니다. 하지만 이렇게 수학적인 연구를 통해 생성 규칙이 없는 난수 를 만드려는 많은 사람들의 도전을 보면, 편하게 상위 레이어에서 코딩하고 있는 필자로써는 이 분들에게 굉장히 감사함을 느낀다. (난 안될꺼야 아마…)

연구원 분들이 기반 알고리즘을 만들어주시면 열심히 상용 어플리케이션에 써먹겠습니다…!!!

필자는 이 포스팅을 작성하면서 논문과 위키피디아를 엄청 들여다봤는데 오랜만에 영어와 수식을 너무 많이 봐서 머리에 과부하가 걸린 상태다. 그리고 다른 건 몰라도 메르센 트위스트 같은 경우는… 아니 너무 복잡하다 인간적으로…

참고로 이거 만든 마츠모토 마코토 님은 지금 히로시마 대학교의 수학 대학원에서 조교수로 근무하고 계신데, 이 정도 머리가 되야 강단에 설 수 있는 건가라는 생각도 든다. 완전 어나더레벨…

이상으로 컴퓨터가 만드는 랜덤은 정말로 랜덤할까? 포스팅을 마친다.

참고문헌

XorShift – Wikipedia

There’s Math.random(), and then There’s Math.random() – V8 Dev

Futher scramblings of Marsaglia’s xorshift generators – Sebastiano Vigna

The Xorshit128+ random number generator fails BigCrush – Daniel Lemire

So you have finished reading the 랜덤 이란 topic article, if you find this article useful, please share it. Thank you very much. See more: 랜덤 우리말, 랜덤함수, 랜덤 뽑기, 랜덤 이름 제조기, 랜덤반대말, 랜덤 플레이 뜻, 랜덤하게, 랜덤발송뜻

Leave a Comment