트랙
/
Julia
Julia
/
연습 문제
/
로봇 이름
로봇 이름

로봇 이름

보통

지침

로봇 공장 설정을 관리해요.

로봇이 공장에서 나올 때는 이름이 없어요.

로봇을 처음 켜면 대문자 두 개 뒤에 숫자 세 개가 붙는 형식의 무작위 이름이 만들어져요. 예를 들어 RX837이나 BC811 같은 이름이에요.

가끔 로봇을 공장 초기 설정으로 되돌려야 할 때가 있는데, 그러면 로봇의 이름이 지워져요. 다음에 이름을 물어보면 그 로봇은 새로운 무작위 이름으로 답해요.

이름은 무작위여야 해요. 예측할 수 있는 순서를 따라서는 안 돼요. 무작위 이름을 쓰면 이름이 겹칠 위험이 있어요. 풀이는 모든 로봇이 고유한 이름을 갖도록 해야 해요.

테스트 스위트는 기본적으로 약 100개의 이름만 생성해요. 유효한 이름은 약 70만 개나 되기 때문에, 충돌이 일어날 기회는 아주 적어요. 그래서 테스트 스위트와 함께, 다른 방법으로도 풀이에 충돌이 생기는지 확인해 보면 좋아요.

이 연습 문제는 Julia의 타입 시스템 탐구를 이어가요. 이번에는 가변 타입을 다루고, 난수 생성도 소개해요.

로봇을 공장 초기 설정으로 되돌리는 일은 수술과 비슷하다고 상상해 봐요. 수술은 대상에 변화를 주지만, 대상을 교체하지는 않아요. 로봇을 초기화할 때 새로운 로봇을 만드는 방식으로 문제를 모델링할 수도 있었어요. 하지만 모든 문제를 불변 데이터 구조만으로 모델링할 수는 없어요. 순수 함수형 언어조차 런타임 내부에서는 가변성을 다뤄요!

Julia에서는 관례적으로 인자를 변경하는 함수 이름 끝에 !를 붙여요. 그래서 이 일을 하는 메서드는 reset!이라고 부르기로 해요.

이건 어디까지나 관례일 뿐이지만, 공개된 Julia 코드는 거의 모두 이 관례를 따르고 있어요. 곧 이게 꽤 유용하다는 생각이 들지도 몰라요!

힌트

고유한 이름을 생성하는 메서드, 로봇을 표현할 구조체, 로봇을 초기화하는 메서드, 그리고 로봇의 이름을 가져오는 메서드를 정의해야 해요.

먼저는 충돌을 신경 쓰지 않고 로봇에 무작위 이름을 붙여 주기만 하는 프로그램을 설계해 보고, 그다음에 중복된 이름이 절대 나오지 않게 하는 방식을 고민하고 설계해 보면 도움이 될 거예요. 설계할 때는 쓸 수 있는 이름이 줄어들수록 이름 생성에 걸리는 시간이 어떻게 달라지는지도 잘 생각해 봐요. 호출하는 쪽에 어떤 보장을 해 주고 싶나요?


출처

gSchool에서 Paul Blackwell과 함께한 디버깅 세션.
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Julia Exercism

로봇 이름 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Julia 트랙을 개념 35개연습 문제 128개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.