inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

일급 컬렉션

강의에서 발생한 이슈에 관하여 (30:40)

306

김용기

작성한 질문수 2

0

안녕하세요. 30:40 강의 구간에서 발생한, 메서드 추출 이슈에 관하여, 원인이 무엇인지 궁금해서 질문 드립니다.

발생한 문제는

문제 발생 지점은 updateCellAt 메서드 사용 구간 입니다.

  private void initializeEmptyCells(CellPositions cellPositions) {
    List<CellPosition> positionList = cellPositions.getPositionList();
    updateCellsAt(positionList, new EmptyCell());
  }

  private void initializeLandMineCells(List<CellPosition> landMinePositionList) {
    updateCellsAt(landMinePositionList, new LandMineCell());
  }

  ...

  private void updateCellsAt(List<CellPosition> positionList, Cell cell) {
    for (CellPosition position : positionList) {
      updateCellAt(position, cell);
    }
  }  

상위 호출 부분으로 넘어가서,

제 생각에 initializeEmptyCells 와 initializeLandMineCells 메서드 호출로 넘기는 인자가, 공유될 대상이었나 라고 생각해볼 수 있었습니다.

cellPositions 나 landMinePositionList 모두 새로운 컬렉션으로 리턴되어서, 공유되지 않다고 생각되었습니다.

  public void initializeGame() {
    CellPositions cellPositions = CellPositions.from(board);
    initializeEmptyCells(cellPositions);

    List<CellPosition> landMinePositionList = cellPositions.extractRandomPositions(landMineCount);
    initializeLandMineCells(landMinePositionList);

    ...
  }

그러면 어느 부분이 메서드 추출로 인해, 공유될 대상이 발생한 원인이었나가 궁금합니다.

객체지향 리팩토링 클린코드-기획전

답변 1

0

박우빈

안녕하세요, 김용기 님!

강의에서도 설명하고 있지만, new EmptyCell(), new LandMineCell() 로 하나의 인스턴스를 생성한 뒤에, updateCellsAt()으로 동일한 인스턴스를 넘겨주고 있어서 발생한 문제입니다.

모든 셀에는 각각 다른 인스턴스가 생성되어 들어가야 각자 상태를 관리할텐데, 리팩토링 중의 착오로 모든 자리에 같은 셀 인스턴스가 위치하게 되어 문제가 발생한 것이죠.

도움이 되셨기를 바랍니다.
감사합니다 🙂

[강의 질문] 메서드 선언부

0

90

1

[강의 질문] 메서드와 추상화

0

61

2

DIP 개념에 대한 질문입니다.

0

64

1

만약 보드를 이용한 게임의 종류가 더 다양해진다면 어떻게 될 수 있을지에 대한 고민

0

86

2

DIP 설명 후반부에 IOC에 대한 질문 드립니다.

0

80

2

안녕하세요 ! 혹시 자바가 아닌 다른 객체지향 언어를 알고있어도 강의를 들어도 괜찮을까요 ?!

0

71

1

안녕하세요 메서드명 때문에 고민이 있어서 질문드립니다.

1

64

2

자바 record 사용에 대해서 질문 드립니다!

0

128

2

강의 내용 정리 및 자료 제작 툴 문의 드립니다.

0

136

2

사용할 변수 가깝게 선언하기 질문

0

93

1

오버 엔지니어링

0

150

2

학습용 java/spring 오픈소스 추천

1

368

2

중복된 메서드 줄이는 방법

0

185

2

MarketPlace에서 Sonarlint 검색이 안됩니다.

0

417

3

isLandMineCell() 메서드 질문

0

209

1

Cell[][]BOARD 매개변수받기

0

153

2

ConsoleInputHandler에서 왜 final붙여야 하는지

0

194

1

정적 생성자 메서드 of, from

0

265

2

Getter관해서

0

148

3

이름 바꾸기

0

129

2

stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??

0

164

2

현업에서 ISP를 도입하려는데 인터페이스 설계에 있어서 의문이 있습니다.

0

208

2

null을 가질 수 있는 값을 인자로 넘겨야 하는 경우

0

253

3

리팩토링을 하고 난 뒤 다시보면 오히려 더 복잡해 보이는것 같은 느낌입니다..

0

255

2