🔥 중첩 슬라이스

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

위 코드를 단계별로 자세히 설명해 드리겠습니다.

  1. board 변수를 선언하고, 3x3 크기의 문자열 슬라이스를 담고 있는 슬라이스로 초기화합니다. 초기에는 모든 칸이 빈 칸("_")으로 설정되어 있네요.
  2. 플레이어들이 번갈아 가며 보드에 수를 둡니다. board[행][열] 형식으로 접근하여 해당 칸의 값을 "X" 또는 "O"로 변경하는 거죠.
  3. 보드의 현재 상태를 출력하기 위해 for 루프를 사용합니다. 루프 변수 i는 0부터 len(board)-1까지 반복되면서, 각 행을 나타내는 board[i] 슬라이스를 strings.Join() 함수로 공백(" ")을 구분자로 하여 하나의 문자열로 합칩니다. 그리고 fmt.Printf()로 해당 문자열을 출력하죠.

위와 같이 슬라이스를 담고 있는 슬라이스를 활용하면, 다차원 배열과 유사한 자료구조를 간편하게 다룰 수 있답니다. 게임 보드뿐만 아니라 다양한 상황에서 유용하게 쓰일 수 있을 거예요.