#1 번에서 만들었던 추출기는 번호 정렬이 안되어있다. 정렬 방법은 많지만, 이곳에선 숫자 6개만 정렬하면 되기 때문에 제공되는 함수를 쓰겠다.
기본은 오름차순 정렬( ascending order ) 이며 내림차순 정렬 ( descending order ) 을 위해서는 내림차순을 비교대상데이터 비교를 어떻게 할것인지에 대한 인터페이스와 인터페이스를 Realize (구현화) 한 클래스를 파라미터로 작성하면 된다. 여기까지 따라오는데 아직 필요 없는 내용이지만 궁금한 분들은 문서를 참고 바라고 댓글을 남겨주시기 바란다.
프레임워크 버전도 같을 필요는 없다. 로또번호 추출기에서 사용할 라이브러리는 대부분 기본적인 라이브러리만 제공되면 만들 수 있는 수준이다.
프로젝트를 만들고 나면 다음과 같은 화면이 보일 것이다.
프로그램을 작성할 기본적인 준비는 끝났다.
이제 로또번호를 추출한다는 기능을 아주 세세하게 분리해보자
1. 로또번호는 1부터 45까지 이다.
2. 로또는 중복되지 않는 6개의 숫자를 뽑는다.
이렇게 기능을 적는것을 기능명세라고 한다.
본격적으로 작성을 시작해보자.
위와같이 먼저 Program 이라는 class 아래에 이름이 Numbers 라는 class 를 만들어두자.
public 과 class 를 왜 치는지 궁금할텐데 나중에 설명할테니 먼저 따라하는데 중점을 두자.
위와같이 이름이 Numbers인 Class 밑에 CreateNumbers() 라는 함수를 만들었다. 이제 기능명세를 주석으로(설명-컴파일되지 않음) 달아보자 주석은 슬러쉬 // 두개로 달 수 있다.
위와같이 프로그램을 본격적으로 작성하기 전에 기능을 기록해두면 로직을 작성에 도움이 된다.
다음은 변수라는 것을 작성해 볼것이다.
위와같이, 기능명세를 해둔부분의 기능을 구현하기 위해 먼저 정해진 수를 타입이 정수인(int) 변수로 만들어보았다.
이제 임의적으로 6개를 뽑는다는 부분인데, 임의적으로 사용한다는 말인 랜덤은
System.Random 이라는 클래스를 사용해보겠다.
위와같이 Type이 Random 이고 이름이 ran 인 랜덤변수를 함수내에 만들었다.
이제 뽑기 즉 추출을 하고 담을 바구니 같은 역할을 하는 LIST 를 하나 만들어 보겠다.
타입 ( type ) 이 정수형 ( int ) 만 담을 수 있는 List 를 위와같이 이름을 list 로 하여 만들었다.
이제 정해진 조건을 만족할때까지 계속 반복 실행하는 반복문 while을 사용하여 번호 6개를 뽑아보도록 하자.
List 가 바구니 역할을 한다고 했는데 List 안에 담긴 갯수는 Count 라는 읽을수만 있는 프로퍼티(약간 다른 개념이지만 지금은 변수라고 이해하면 된다) 를 제공하니 Count를 사용하겠다. 어떤 기능을 제공하는지는 타입에 F12 를 누르면 제공하는 기능들을 볼수 있다.
다음과 같이 List 타입을 클릭 혹은 더블클릭하고 F12를 누르면,
이처럼 List 가 제공하는 많은 기능들을 볼 수가 있다. 지금은 이기능들중에 Count 만 써볼것이다.
먼저, 반복문인 while를 계속 실행시키는 조건을 만들려면 처음에 적어둔 기능중에 임의로 6개를 추출한다. 를 풀어서 쓰면
1부터 45까지의 숫자중 임의로 6번을 뽑는다 -> 숫자를 6번을 반복하여 뽑는다 이말은 결국 List에 6개가 담기지 않으면 실행한다. 라고 조건을 쓸수 있다.
위와같이 반복문 while 의 괄호 ( ) 안에 list.count 리스트의 갯수가 6개보다 작으면 실행이라는 조건을 써 넣었다.
정말로 6번을 실행하는지 테스트를 해보자.
List 에 숫자를 넣는 방법은 List.Add 를 사용하면 되는데 다음과 같다.
List.Add() 함수를 사용하여 숫자 0을 넣어보았다. 이것이 6번 들어가는지 확인 할수 있는 방법은 여러가지가 있는데,
가장 기초적인 방법인 출력을 해보겠다.
출력은 Console.WriteLine() 을 사용한다.
그리고 콘솔창이 실행을 완료하고 바로 꺼지는 것을 방지하기 위해 잠시 입력을 받도록
Console.ReadKey() 로 써주겠다.
위와같이 작성을 하고, 어디에선가 이 함수를 호출을 해야한다.
이 함수는 이름이 Numbers 인 Class 아래에 있었는데, 처음 작성할때 자동으로 만들어져 있던 Main 부분에 다음과 같이 작성한다.
모든 프로그램은 Main(string[] args) 가 실행되게 되는데 위의 작성된 부분을 설명하자면,
Numbers num = new Numbers(); -> 타입이 Numbers 인 클래스 이름은 num 인 인스턴스 변수를(객체라고도한다) 만들었다.
num.CreateNumbers(); -> num 변수의 함수 CreateNumbers 를 호출한다 이다.
기능명세 부분 int min = 1; 과 int max = 45; 부분에 주석처리를 한다. 주석처리를 하는 이유는 사용하지 않는 내부변수는 컴파일 에러를 일으킬수 있기 때문이다.
위와같이 작성을 해주고 저장을 한후 ( 컨트롤+S키) F5키를 눌러본다.
위와 같이 검은색 창 (콘솔창이라고 한다)이 뜨며 hello world! 가 6번 뜨는것을 보아 반복문 while은 6번을 실행함을 확인 할 수 있었다.