Board 클래스 — 흩어진 함수를 한 덩어리로
👋 이 챕터에서 배울 것
지금까지 짠 함수들을 한 덩어리로 묶어 깔끔한 Board 클래스를 만든다. 이게 PART 2~7에서 계속 쓸 기반이야.
지금까지 짠 코드를 떠올려봐. 다음 함수들이 있어:
neighbors(r, c)find_group(board, r, c)group_liberties(board, r, c)play_with_ko(board, r, c, color, prev_board)find_territories(board)score(board, komi)
다 동작은 하지만, 매번 board를 인자로 넘기고, prev_board를 따로 관리하고, SIZE 같은 상수가 모듈 전체에 떠다녀. 흩어져 있어. 한 덩어리로 묶자.
📖 OOP (객체지향)란
데이터(상태)와 그 데이터에 대한 동작(메서드)을 한 클래스 안에 묶어. 그러면:
- 보드 상태 (
grid,prev_grid,captures...) 를 클래스 속성으로 보관 - 한 수 두기, 그룹 찾기, 점수 계산은 모두
self.method(...)형태 - 여러 보드를 동시에 만들 수 있음 (AI 시뮬레이션 때 필수)
이번 챕터에서:
- 설계: Board 클래스가 가질 속성과 메서드
- 구현 1부: 기본 구조 + 그룹 관련 메서드
- 구현 2부: play() + score() — 가장 복잡한 부분
- 사용 예제: 두 사람 짧은 대국 시뮬레이션