🔥 중첩 슬라이스
267자
3분
슬라이스는 다양한 타입을 담을 수 있는데요, 심지어 슬라이스 자체도 담을 수 있답니다. 이를 통해 다차원 배열과 유사한 자료구조를 만들 수 있죠.
예를 들어, 틱택토 게임 보드를 만든다고 가정해 볼까요? 3x3 크기의 보드이므로, 문자열 슬라이스를 담고 있는 슬라이스를 만들면 되겠네요.
package main import ( "fmt" "strings" ) func main() { // 3x3 크기의 틱택토 보드를 만듭니다. board := [][]string{ []string{"_", "_", "_"}, // 첫 번째 행 []string{"_", "_", "_"}, // 두 번째 행 []string{"_", "_", "_"}, // 세 번째 행 } // 플레이어가 번갈아 가며 수를 둡니다. board[0][0] = "X" // 첫 번째 플레이어가 (0, 0)에 수를 둠 board[2][2] = "O" // 두 번째 플레이어가 (2, 2)에 수를 둠 board[1][2] = "X" // 첫 번째 플레이어가 (1, 2)에 수를 둠 board[1][0] = "O" // 두 번째 플레이어가 (1, 0)에 수를 둠 board[0][2] = "X" // 첫 번째 플레이어가 (0, 2)에 수를 둠 // 보드의 현재 상태를 출력합니다. for i := 0; i < len(board); i++ { fmt.Printf("%s\n", strings.Join(board[i], " ")) } }
go
위 코드를 단계별로 자세히 설명해 드리겠습니다.
board
변수를 선언하고, 3x3 크기의 문자열 슬라이스를 담고 있는 슬라이스로 초기화합니다. 초기에는 모든 칸이 빈 칸("_")으로 설정되어 있네요.- 플레이어들이 번갈아 가며 보드에 수를 둡니다.
board[행][열]
형식으로 접근하여 해당 칸의 값을 "X" 또는 "O"로 변경하는 거죠. - 보드의 현재 상태를 출력하기 위해
for
루프를 사용합니다. 루프 변수i
는 0부터len(board)-1
까지 반복되면서, 각 행을 나타내는board[i]
슬라이스를strings.Join()
함수로 공백(" ")을 구분자로 하여 하나의 문자열로 합칩니다. 그리고fmt.Printf()
로 해당 문자열을 출력하죠.
위와 같이 슬라이스를 담고 있는 슬라이스를 활용하면, 다차원 배열과 유사한 자료구조를 간편하게 다룰 수 있답니다. 게임 보드뿐만 아니라 다양한 상황에서 유용하게 쓰일 수 있을 거예요.