강의에서 발생한 이슈에 관하여 (30:40)
306
작성한 질문수 2
안녕하세요. 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





