티스토리 뷰

안녕하세요 막간을 이용해 시시콜콜한 이야기? 를 하려고 합니다.

개발 20년차 친척형과 대화를 하면 항상 배우는 것이 많습니다.

늘 새롭게 알게 되고 깊은 내용, 그리고 시시콜콜한 내용들까지도 많이 배우게 되는데요.

 

저같은 멘토가 없을 수 있으신 분들을 위해서 저 또한 여러분들에게 아주 시시콜콜한 멘토가 되고자 이야기를 합니다.

(요즘 같은 인터넷 시대에 알고자하면 다 알겠지만.. 또 찾아보지 않으면 모르니까!)

 

우리가 프로그래밍을 하면서 랜덤한 숫자를 얻기위해서 Math.Random() 을 사용한 경험이 있으신가요 ?

우리가 랜덤이라고 믿었을수(?) 있었던 이 숫자가 사실은 랜덤하지 않다면 어떠세요 ?

이게 무슨 소리인가 싶으실 겁니다.

 

쉬운 이야기부터 하겠습니다.

혹시 스타크래프트라고 아시나요 ? (필자 나이 짐작가능ㅋㅋㅋㅋㅋㅋㅋ)

이 스타크래프트의 임요한 선수는 종족을 선택할 때 랜덤을 고르는 유저에 대해 신기방기하게 맞췄던 적이 있습니다.

이때 임요한 선수가 어느정도 일정한 패턴을 가지고 예측을 할 수 있다고 말했습니다.


랜덤이란?

우리가 실생활에서의 랜덤이라 함은 전혀 예측할 수가 없는 것이여야 하는데요.

우리가 돌을 물에 던졌다고 칩시다. 과연 이 돌은 현실적으로 똑같은 환경, 똑같은 힘, 똑같은 공기저항, 등의 환경에서 똑같이 던질 수 있을까요 ?

불가능하겠죠 ?

이런 무작위 로 발생하는 것을 랜덤이라고 말합니다.

 

자 그럼 컴퓨터는 과연 랜덤한게 맞을까요 ?

 

이에 대한 설명은 아주아주 초기로 거슬러 올라가야 합니다.

폰노이만 이라고 아시나요 ? ( 폰노이만의 사칙연산 한번쯤 들어보셨을수도! )

랜덤이라는 숫자가 필요했던 폰노이만은 컴퓨터에게 이를 알려줄 필요가 있었죠.

이를 위해 중앙제곱법 의 방법으로 처음에 유사 난수 생성법을 발견하였는데요.

 

이 중앙제곱법의 문제는 결국에는 예측이 쉬웠다는 점에 있었습니다.

 

또 다른 방법으로는 선형합동법을 이용한 랜덤 표현 방식이 있었습니다.

하지만 역시나 예측이 가능했죠. 

중앙제곱법,선형합동법이 궁금하신 분들은 검색..

 

그래서 이런 결과에 시간이라는 변수를 더해서 계산해보자. 라는 형식으로 현재의 랜덤함수에 이르게 되었는데요.

현재의 랜덤함수는 일정한 난수표 + 현재시간 을 계산으로 결과를 반환합니다.

즉, 이것도 결국 일정한 패턴이 생긴다는 것입니다.

 


하지만 왜 랜덤이라고 할까요 ?

예측은 가능하지만, 무수히 많은 시간과 리소스가 컴퓨터에게 요구되기 때문에 이정도면 랜덤으로 해주자!

라는 것이죠.

이를 pseudo - random(수도랜덤) 이라고 합니다.

가짜 랜덤이라는 뜻이죠.

 

 

자 그럼 처음으로 돌아가서 잠시 스타크래프트 이야기를 했었는데요.

왜 스타크래프트 이야기를 하였느냐.

스타크래프트의 리플레이가 랜덤을 이야기 하기 좋은 것 같습니다.

스타크래프트의 리플레이 용량을 보셨나요 ?

길면 1시간 이상의 게임을 하는 스타크래프트의 용량이 말도 안되게 작다는것을..

그럼 스타크래프트는 리플레이를 어떻게 보여주는 것일까요 ?

바로 이 랜덤함수를 이용하는 것입니다.

같은 상황의 같은 시간, 같은 마우스 패턴? 등을 예측하여 보여주는 것입니다.

그렇기 때문에 스타크래프트의 뒤로감기 기능이 없는 것이기도 합니다.

 

 

하지만 요즘 양자화 컴퓨터를 이용하여 완벽한 랜덤을 만들 수 있다 라고 이야기를 합니다.

불연속인 세상에서 완벽한 랜덤을 만들 수 있는 시대가 오고 있나봅니다.

 

아무튼 이 이야기를 한 점은 정말 시시콜콜한 이야기며, 사실 개발 20년차 형에게 어떤 대답하면 무조건 붙이겠느냐 라고 했더니 이 이야기를 하더군요..ㅋㅋㅋㅋㅋㅋㅋㅋ

 

뭐.. 알아두면 재밌는 이야기니까요 

조금 더 알고싶으신 분들은 이분 유튜브 보시면 이해가 쉬울 겁니다.

( 제 유튜브 아닙니다..ㅋㅋㅋㅋㅋㅋㅋ 저도 이분 유튜브 보고 조금 더 이해했을 뿐 )

https://www.youtube.com/watch?v=dzzryM3TtHk

 

 

 

 

 

 

 

 

 

 

 

 

댓글
공지사항
글 보관함
최근에 올라온 글
최근에 달린 댓글