Video: How to Program in C# - Arrays (E05)
Channel: Brackeys
Duration: 17m 0s
Source: subtitle (manual, en-GB)
Transcript:
무료로 제공되는 수천 개의 고품질 음악, 사운드 및 아트 에셋을 사용하여 바로 게임 제작을 시작할 수 있습니다. Core를 사용하면 쉬운 도구로 자신만의 게임 로직을 구현하고 레벨과 아트를 만들 수 있습니다. 8월 6일부터 9월 6일까지는 Dungeons & Dragons와 협력하여 $20,000 상당의 상품이 걸린 판타지 테마 던전 빌딩 콘테스트도 Core에서 개최합니다. 이 콘테스트의 콘텐츠는 또한 유명인 패널과 함께 PACS에서도 선보여질 예정이며, 그들은 자신들이 가장 좋아했던 D&D 캠페인의 순간들을 Core로 재현할 것입니다.
다시 말씀드리지만, Core는 완전히 무료이므로 coregames.com에서 확인하거나 설명란에 있는 링크를 클릭하세요. 이제 예를 들어 '왕좌의 게임(Game of Thrones)'에서 제가 좋아하는 캐릭터들의 목록을 만들고 싶을 때, C#에서 가장 쉬운 방법은 배열(array)을 사용하는 것입니다. 배열은 여러 개의 값을 단일 변수에 저장할 수 있게 해줍니다. 그리고 배열을 생성하는 구문(syntax)은 실제로 상당히 간단합니다. 먼저, 우리가 배열에 저장하려는 변수의 타입을 지정합니다. 이 경우 여기서는 문자열(string)입니다.
그런 다음 대괄호 두 개를 열고 닫은 후 변수 이름을 붙입니다. 이제 만약 배열 안에 무엇을 넣을지 이미 알고 있다면, 여기에 바로 할 수 있습니다. 이렇게 하려면 등호(=)를 쓰고, 중괄호({})를 열고 닫은 후 세미콜론(;)을 찍습니다. 중괄호 안에는 우리가 원하는 모든 값들을 쉼표(comma)로 구분하여 넣습니다. 그리고 여기서는 문자열을 사용하고 있으므로 따옴표(
자, 이제 논의를 시작해 봅시다. (웃음) 그리고 이것으로 우리는 배열을 만들었습니다. 매우 주관적인 배열이지만, 분명히 배열입니다. 자, 우리가 배열을 생성할 때, 마치 각 항목에 번호가 할당된 항목표를 만드는 것이라고 생각하세요. 이 번호를 인덱스(index)라고 부릅니다. 첫 번째 항목은 항상 0의 인덱스를 가집니다. 두 번째 항목은 1의 인덱스, 그다음은 2의 인덱스입니다. 그리고 우리는 이 인덱스를 사용하여 배열 내부의 요소에 접근합니다. 예를 들어, 제가 가장 좋아하는 '왕좌의 게임(Game of Thrones)' 캐릭터 중 두 번째를 출력하고 싶다면, console.Write를 작성한 다음, 배열 이름을 입력하고 그 뒤에 대괄호 두 개를 붙일 것입니다.
그리고 여기서 우리는 인덱스를 지정합니다. 따라서 두 번째로 가장 좋아하는 '왕좌의 게임' 캐릭터를 표시하기 위해, 우리는 1이라는 인덱스를 입력합니다. 그리고 이것은 실제로 Cersei를 출력합니다. 그리고 이것은 멋지지만, 배열이 진정으로 빛을 발하는 곳은 루프(loop)와 결합할 때입니다. 자, VS Code로 넘어가서 한번 시도해 봅시다. 먼저 배열을 만드는 것부터 시작하겠습니다. 문자열 배열을 만들 것이고, 제가 좋아하는 영화 몇 편을 저장하게 할 것입니다. 그리고 이것들을 미리 알고 있기 때문에, 등호(=), 중괄호({}), 세미콜론(;)을 사용하여 진행할 수 있습니다.
그리고 여기에는 영화 몇 편을 넣을 수 있습니다. '반지의 제왕(Lord of the Rings)'부터 시작하겠습니다. '싸이코(Fight Club)', '인터스텔라(Interstellar)'를 넣고, '글래디에이터(Gladiator)'도 넣어봅시다. 확실히 좋은 영화들이 많네요. 그리고 우리는 이 영화들을 for 루프를 사용하여 반복할 수 있습니다. 자, for 루프를 만들겠습니다. for라고 작성하겠습니다. 여기 'for loop'라고 되어 있는 곳까지 내려가서 탭(Tab)을 눌러 자동 완성시키겠습니다. 여기서 변수 이름은 i로 부르겠습니다. 그리고 길이(length)는 여기에요. i가 10보다 작을 때까지 계속 진행하도록 하겠습니다.
그리고 이것으로 우리는 for 루프를 만들었습니다. 이제 이 안에서 console.WriteLine을 사용하여 반복할 때마다 무언가를 출력할 수 있습니다. 지금은 단순히 i만 출력하려고 합니다. 그래서 여기서는 변수 코드 i를 만든 후 0으로 설정하고, 그 숫자를 출력한 다음 i가 10보다 작을 동안 계속합니다. 따라서 프로그램을 실행하면 0부터 9까지의 숫자가 출력되는 것을 볼 수 있습니다. 그리고 단순히 이 숫자들을 출력하는 대신, 이들을 인덱스로 사용하여 배열의 다른 요소에 접근할 수 있습니다.
그래서 단순히 console.WriteLine i를 출력하는 대신, 실제로는 movies와 열고 닫는 대괄호를 사용하고 그 안에 i를 넣을 수 있습니다. 그래서 루프를 처음 돌 때 i는 0이 될 것이고, 따라서 movies 배열의 첫 번째 요소인 '반지의 제왕(Lord of the Rings)'을 가져옵니다. 두 번째로 i가 1이 되면, 배열의 두 번째 요소인 '파이트 클럽(Fight Club)'으로 이동합니다. 그리고 i가 작을 동안 계속해서 이 작업을 수행할 것입니다. 여기서 우리는 배열의 길이를 넣고 싶습니다.
따라서 우리 경우에는 여기에 네 개의 요소가 있으므로, 그냥 4를 작성하겠습니다. 실제로 이제 이 프로그램을 실행하면 인덱스를 출력하는 것이 아니라, 해당 인덱스의 배열 요소를 실제로 접근한다는 것을 볼 수 있습니다. '반지의 제왕(Lord of the Rings)', 그리고 '글래디에이터(Gladiator)'입니다. 이렇게 쓸 수도 있지만, 배열의 길이를 이렇게 하드코딩하는 것보다 movies.Length를 사용하는 것이 더 좋은 관행입니다. 이렇게 하면 나중에 movies 배열에서 요소를 추가하거나 제거하기로 결정하더라도 이 숫자가 업데이트되고 for 루프는 항상 적절한 횟수만큼 실행될 것입니다.
이제 저희는 영화들을 이렇게 보여줄 수도 있고, 순위(ranking)를 추가할 수도 있습니다. 그러면 실제로 i 변수를 사용해서 현재 영화가 배열에서 몇 번째 순서인지 보여줄 수 있게 됩니다. 따라서 영화를 출력하기 전에, rank라는 정수형을 만들고 여기에 i+1을 할당할 수 있습니다. 왜냐하면 i는 0부터 시작하기 때문에, 여기서 +1을 더해 주면 우리의 순위가 1로 시작해서 2, 그리고 3, 그리고 4로 올라갈 것입니다. 그다음에는 이 rank 변수를 write line에 추가할 수 있습니다. 그래서 여기서는 rank를 출력하고, 그다음에 점과 공백을 넣고, 마지막으로 해당 인덱스의 영화를 더해 출력할 수 있습니다.
그래서 이것을 실행하면 모든 영화가 나오지만, 1위부터 4위까지 순위가 매겨져서 나옵니다. 정말 멋지죠. 배열을 다루는 것이 얼마나 쉬운지 알 수 있습니다. 우리가 접근하려는 값과 인덱스 사이의 관계만 기억한다면 말이죠. 하지만 때로는 배열에 무엇이 들어갈지 미리 알지 못할 때도 있습니다. 예를 들어, 사용자가 가장 좋아하는 영화를 입력받기 위해 사용하고 싶다면, 빈 배열을 먼저 만들고 값을 하나씩 채워 넣는 대신 바로 값들을 할당할 수 있습니다.
여기서 코드를 지우고, 대신 빈 배열을 만드는 작업을 하겠습니다. 이를 위해서는 동일한 구문을 사용합니다. 즉, string, 대괄호, movies라고 이름을 붙입니다. 그리고 등호(=) 다음에는 new를 작성합니다. 그다음은 우리 경우의 배열 타입인 string이 오고, 그 뒤에 대괄호를 쓰고 세미콜론을 찍습니다. 그리고 괄호 안에서 길이를 지정할 수 있습니다. 이것이 우리가 배열에 저장하고 싶은 요소의 개수입니다. 이 경우에는 사용자가 영화를 입력하도록 할 것이므로, 여기를 4로 설정하겠습니다. 이렇게 하면 됩니다.
이제 네 개의 문자열을 담을 수 있는 배열을 만들었습니다. 이어서 사용자에게 영화를 입력받도록 할 건데, 콘솔(console)에서 진행하겠습니다. Console.WriteLine으로 '네 개의 영화를 입력하세요'라고 표시한 다음, 인덱스를 사용하여 배열의 각 요소에 값을 할당할 수 있습니다. 첫 번째 영화를 할당하려면 movies를 쓰고, 여기에 0번 인덱스를 부여합니다. 그리고 이 값을 Console.ReadLine과 같게 설정하면 사용자가 무엇을 입력하든 됩니다. 이렇게 네 번 반복할 수 있습니다. 각각의 인덱스마다요. 두 번째는 1을 넣고, 세 번째는 2를 넣고, 네 번째는 3을 넣겠습니다.
실제로 이 프로그램을 실행해 보면 작동하는 것을 확인할 수 있습니다. '네 개의 영화를 입력하세요'라는 메시지가 나타납니다. 저는 '펄프 픽션(Pulp Fiction)', '인셉션(Inception)', '해리 포터(Harry Potter)', 그리고 '카라티 키드(Karate Kid)'를 입력하겠습니다. 이제 더 이상 입력할 수 없고, 콘솔이 그냥 닫힐 것입니다. 보시다시피 실제로 아무 일도 일어나지 않은 것 같지만, 저희는 이 값들을 배열 안에 저장하고 있는 것입니다. 이제 이것들로 무언가를 할 수 있습니다. 예를 들어 알파벳 순서로 표시하고 싶다면 Sort 메서드를 사용할 수 있습니다.
여기에 몇 줄을 더 추가하겠습니다. 사용자에게 '여기가 알파벳순입니다.'와 같은 메시지를 출력할 거예요. 그리고 가독성을 좋게 하기 위해 그 앞에 새 줄을 하나 넣겠습니다. 그런 다음 배열을 정렬합니다. 그러려면 Array.Sort를 사용하고, 여기에 저희 배열의 이름을 간단히 입력하면 됩니다. 이 경우엔 movies가 됩니다. 이것은 실제로 알파벳순으로 자동 정렬해 줍니다. 숫자들을 많이 가지고 있을 때도 같은 함수를 사용하여 할 수 있으며, 그러면 오름차순(ascending order)으로 정렬됩니다.
그리고 나서 우리는 모든 영화들을 간단히 출력할 수 있습니다. 다시 말해, 하나씩 할 수도 있지만, for 루프를 사용하는 것이 훨씬 쉽습니다. 그래서 'for i in direct with zero'라고 작성하겠습니다. 'i가 movies.Length보다 작을 때까지 계속 진행하고,' 그리고 여기서는 단순히 console.WriteLine을 하고, 그 뒤에 인덱스인 i를 넣고 세미콜론으로 닫겠습니다. 이 코드를 테스트하기 전에, 저희 코드 일부를 아주 조금 정리하고 싶습니다. 방금 모든 영화들을 출력하기 위해 for 루프를 사용했듯이, 여기서 입력값을 모을 때도 for 루프를 사용하는 것이 좋겠습니다.
하나씩 할 필요가 전혀 없습니다. 그래서 여기에 네 줄을 작성하는 대신, 간단히 for 루프를 사용할 수 있습니다. 다시 말해, 인덱스를 0부터 시작하고, 'i가 movies.Length보다 작을 때까지 계속 진행합니다.' 그리고 여기 있는 라인 중 하나를 가져와서, 'serial one, two 또는 three'를 넣는 대신 단순히 i를 넣습니다. 이것은 여기에 있는 모든 줄들을 제거할 수 있다는 의미이며, 특히 엄청나게 많은 항목을 다룰 때는 훨씬 더 깔끔합니다. 그리고 이 프로그램을 지금 실행해 보면, 영화 네 개를 입력하고 엔터를 누르면 컴퓨터가 알파벳순으로 정렬하여 그 순서대로 표시합니다. 멋지네요.
이것은 우리가 많은 항목을 다루면서 자동화하기 위해 배열과 for 루프를 결합하는 간단한 예시입니다. 물론, 배열을 사용하는 단점 중 하나는 크기가 고정되어 있다는 것입니다. 이것은 일단 배열을 생성하고 길이를 지정하면, 이 경우 길이를 4로 지정했으므로 변경할 수 없다는 것을 의미합니다. 따라서 미리 얼마나 많은 항목을 저장할지 모른다면, 대신 리스트(list)를 사용합니다. 리스트를 다룰 때는 길이를 지정할 필요가 없습니다.
이들은 완전히 크기 조절이 가능합니다. 이것이 유용하게 사용되는 좋은 예는 쇼핑 목록을 만들 때입니다. 여기서는 구매해야 할 모든 품목을 추적하기 위해 리스트를 사용할 수 있습니다. 이제 리스트를 사용하려면 실제로 다른 네임스페이스(namespace)를 포함해야 합니다. 네임스페이스는 우리가 다양한 작업을 수행하기 위해 가져올 수 있는 기능 그룹이라고 생각할 수 있습니다. 예를 들어, 게임을 만들 때 오디오 전용, 그래픽 전용, 입력 전용 등의 네임스페이스를 갖는 경우가 많습니다. 지금까지 우리는 기본 시스템 네임스페이스만 사용해 왔습니다.
여기 맨 위에서 볼 수 있듯이, 여기에는 우리가 많이 사용했던 Console 클래스가 포함되어 있습니다. 하지만 리스트는 다른 네임스페이스 안에 있습니다. 따라서 맨 위에 한 줄을 더 추가해야 하는데, using 다음에 포함하려는 네임스페이스를 작성할 것입니다. 리스트는 이 System.Collections.Generic 네임스페이스 안에 있습니다. 그래서 여기에 이것만 작성함으로써, 우리는 이제 프로그램에서 사용할 수 있는 모든 기능을 포함하게 된 것입니다. 그리고 그것으로, 우리는 리스트 사용을 시작할 수 있습니다. 이제 리스트는 우리가 제네릭(generic)이라고 부르는 것이며, 이로 인해 구문이 일반 배열과 약간 다릅니다.
리스트를 생성하려면 먼저 List라고 입력하고, 다음으로 <T>와 같은 기호 다음에 타입을 작성합니다. 우리의 경우 문자열(string)이 되기를 원하며, 그 다음보다 큰 꺾쇠괄호를 사용합니다. 그리고 여기에 이름을 넣습니다. 저는 'shoppingList'라고 입력하겠습니다. 그리고 빈 배열을 만들 때처럼, 우리는 또한 빈 리스트를 생성해야 합니다. 다시 한번 이 구문은 약간 이상하지만, 제 뒤를 따라 적어보세요. 따라서 create와 등호(=)를 작성합니다. 그 다음 new List<string>()을 작성하고 괄호 두 개와 세미콜론(;)을 붙입니다. 그리고 그것으로, 우리는 이제 리스트를 생성했습니다.