#1 번에서 만들었던 추출기는 번호 정렬이 안되어있다. 정렬 방법은 많지만, 이곳에선 숫자 6개만 정렬하면 되기 때문에 제공되는 함수를 쓰겠다. 

기본은 오름차순 정렬( ascending order ) 이며 내림차순 정렬 ( descending order ) 을 위해서는 내림차순을 비교대상데이터 비교를 어떻게 할것인지에 대한 인터페이스와 인터페이스를 Realize (구현화) 한 클래스를 파라미터로 작성하면 된다. 여기까지 따라오는데 아직 필요 없는 내용이지만 궁금한 분들은 문서를 참고 바라고 댓글을 남겨주시기 바란다.

https://docs.microsoft.com/ko-kr/dotnet/api/system.collections.generic.list-1.sort?view=net-6.0

list.Sort() 를 쓰면 된다. 

정렬 전 모습
정렬 후 모습
빨간줄이 정렬함수 호출이다.

 

한결 깔끔해진 모습이고 추가된 코드는 딱 한줄이다.

for문은 정렬된 모습을 출력하기 위해서 추가되었다.

프로젝트 세팅 - 잘 모르는 부분이나 용어는 댓글로 남겨주시면 답변 드리겠다.

비쥬얼스튜디오 2019 무료버전이며, 세팅은 다음과 같다. 프로젝트 이름은 똑같이 할 필요는 없다.

비쥬얼 스튜디오 다운로드는 이곳   이며 2022 와 같은 다른버전을 사용해도 무방하다.

프레임워크 버전도 같을 필요는 없다. 로또번호 추출기에서 사용할 라이브러리는 대부분 기본적인 라이브러리만 제공되면 만들 수 있는 수준이다.

 

프로젝트를 만들고 나면 다음과 같은 화면이 보일 것이다.

 

프로그램을 작성할 기본적인 준비는 끝났다.

이제 로또번호를 추출한다는 기능을 아주 세세하게 분리해보자

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번을 실행함을 확인 할 수 있었다.

 

파란색으로 표기된 부분이 새로 작성된 영역인데, 

int randomNum = ran.Next(1,46); -> 이부분은 먼저 문서를 보는 방법을 알려주겠다. 아무 인터넷 창을 띄우고, 구글로 가서 검색창에 C# random.next 라고 검색을 하면 물론 List와 마찬가지로 F12를 눌러도 나온다. ( MicroSoft 에서 제공하는 문서에는 좀 더 자세한 설명을 볼 수가 있다. https://docs.microsoft.com/ko-kr/dotnet/api/system.random.next?view=net-6.0#system-random-next(system-int32-system-int32)

 

위와같이 검색을 하면 보통은 첫번째에 Microsoft docs 라고 써진것이 공식 문서이다. 눌러서 들어가보자.

 

아주 자세하게 나와있는데 우리가 필요한것은 로또번호 즉 1에서 45사이의 임의의 수다. 그럼으로 세번째것을 눌러보자.

 

Random.Next(int32, int32) 함수는 반환값이 (흔히 리턴 return 값 이라고한다) minValue 는 포함이고 maxValue는 포함되지 않는다고 한다. 그럼 우리가 작성하던 부분으로 돌아오면

 

처음 작성했던 부분의 (파란색 영역) 숫자중 45를 46으로 고치고 Random.Next 함수의 숫자 대신에 저렇게 넣어보자.

그리고 List.Add() 함수를 이용하여 List에도 담고 Console.WriteLine()함수를 이용하여 실행 해보자. 당연히 저장 ( Ctrl + S) 을 하여야 한다.

 

6개의 임의의 수를 뽑았다. 몇번 더 실행해보자. 어쩌면 이미 중복된 숫자가 나온사람도 있을것이다.

 

위와같이 중복된 숫자가 나왔다. 중복된 숫자를 검사하는 함수는 List.Contains() 이다. 

 

새로 작성된 부분을 설명하면, 

List 에 randomNum 이 Contains (포함) 이 False (거짓) 이면 이라는 조건이다. 즉 다시  쓰면

list 에 같은 숫자가 들어 있지 않으면 다음 블록 { } 을 실행한다. 위와 같이 작성하고 저장한 후 실행하면 몇번을 실행 해도 중복된 숫자가 출력되지 않는다.

 

축하드린다. 첫 프로그램을 작성하였다.

다음은 보기좋게 순서 다듬기와 파일출력을 다루겠다.

위에서 작성된 코드는 깃허브에 올려둔다.

무엇을 할까 하다가 로또번호 추출기와 내가 산 번호들을 확인할수 있는 간단한 기능들이 있는 프로그램을 만들어 둔것을 깃헙과 이곳에 차례차례 따라만드는 것을 올려보려한다.

풀소스는 이곳에 있다. (getLottoNum220423.zip 라는 이름의 압축파일) https://github.com/IlseonSEO/getlottonums

기능 

1. 로또번호를 랜덤으로 100개 추출하여 텍스트 파일로 뽑음 ( 1개는 기능은 있으나 메뉴에 넣어두지 않음)

2. 이번주 번호와 내가 추출한 번호 비교하여 등수 확인하기.

3. 이번주 번호가 역대 로또 당첨번호 리스트에 없으면 추가하기.

로또번호를 추출하여 텍스트파일로 저장한 모습.
이번주 번호를 입력하여 내가 몇개나 맞았나 확인해보기

 

+ Recent posts