체스 말을 Piece라고 하고 체스 보드를 ChessBoard라고 하면

ChessBoard는 당연히 Piece배열을 인자로 가질거고

Piece를 상속하는 개별적인 세부 클래스들인 Pawn Rook Knight 뭐 이런식으로 있겠지?

이 클래스 각각에 GenarateValidMoves 가상 메서드를 넣는게 맞잖아 세부 클래스별로 움직이는 방식이 다르니까

근데 이 가상메서드가 ValidMoves를 생성하려면 Board 정보를 인자로 받던가 해야하지? 보드 보고 정해지는 거니까


근데 그러면 ChessBoard도 Piece에 의존하고 Piece도 인자로 Board를 받으려면 ChessBoard에 의존하는거 아닌가요

그럼 상호의존적이게 되고 별로 안좋은 설계가 될거같은데

이걸 어떻게 바꿀수 있어요?