인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

하다현님의 프로필 이미지

작성한 질문수

Readable Code: 읽기 좋은 코드를 작성하는 사고법

객체 설계하기 (2)

isLandMineCell() 메서드 질문

작성

·

102

0

  • 학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!

  • 먼저 유사한 질문이 있었는지 검색해 보세요.

  • 서로 예의를 지키며 존중하는 문화를 만들어가요.

     

리팩토링한 MinesweeperGame.open() 메서드에 대해서 질문있습니다!

 private static void open(int row, int col) {
        if (row < 0 || row >= BOARD_ROW_SIZE || col < 0 || col >= BOARD_COL_SIZE) {
            return;
        }
        if (BOARD[row][col].isOpened()) {
            return;
        }
        if (isLandMineCell(row, col)) {
            return;
        }

        BOARD[row][col].open();

        if (BOARD[row][col].hasLandMineCount()) {
            return;
        }

수업을 따라오면서 isLandMineCell()은 Cell이 지뢰인지 확인하는 메서드이기 때문에 MineSweeperGame 클래스의 메서드가 아닌, Cell 클래스의 메서드가 되어야 open 메서드가 동일한 추상화 레벨을 갖는게 아닌가 하는 의문이 들었습니다.

 

if (BOARD[row][col].isOpened())
...
if (isLandMineCell(row, col))
...

위 두 조건문의 추상화레벨이 통일되지 않다는 생각도 들었구요.

isLandMineCell이 Cell 클래스의 메서드로 작성하지 않은 이유가 뭔지 궁금하고, 제가 가지고 있는 생각(추상화레벨 관련)이 잘못된 이유도 궁금합니다.

 

항상 친절한 설명 감사합니다 많이 배우고 있습니다:)

답변 1

0

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, 하다현 님!

아마 뒷부분 강의를 계속 진행하시다보면 객체를 책임에 따라 나누고 응집하는 과정에서 자연스럽게 리팩토링이 될 거예요. 최종 완성된 코드를 보고도 의문이 드는 부분이 있다면 추가로 질문 남겨주세요.

감사합니다 🙂