• 카테고리

    질문 & 답변
  • 세부 분야

    기타 (개발 · 프로그래밍)

  • 해결 여부

    미해결

리팩토링 8. 매개변수 객체 만들기 강의 부분에서...

22.02.10 22:37 작성 조회수 104

1

안녕하세요!

리팩토링 8. 매개변수 객체 만들기 강의를 보다가 궁금한점이 생겨서 질문 드립니다.

백기선님이 처음에 getRate()와 getMarkdownForParticipant()에서 매개변수인 int 타입의 totalNumberOfEvents와 Participant 타입의 매개변수가 반복적으로 등장하기 때문에 매개변수 객체 만들기를 실시하여야 한다고 하셨습니다. 변경하는 와중에 다른방법을 채택하여 totalNumberOfEvents를 필드 변수로 이동시켰는데요 혹시 이 상황에서 매개변수 객체 만들기 대신 필드이동을 선택하신 이유가 있을까요?

답변 1

답변을 작성해보세요.

1

좋은 질문 감사합니다. 해당 필드가 클래스 내부의 여러 메소드에서 사용하는 경우에 보통 필드로 선언하고 메서드에서 직접 참조하는 선택을 하는데요. 이렇게 하면 클래스 내부에 공유하는 데이터가 생기기 때문에 해당 데이터를 정말 클래스에 필드로 선언해도 적절한지 고민을 한 다음에 그 방법을 선택해야 합니다.

이 예제의 경우에는 그런 선택이 적절하다고 생각했기 때문에 2개의 매개변수를 묶은 매개변수 객체를 만들지 않고 그 중 하나를 필드로 선언하고 매개변수 한개만 넘기도록 고쳤습니다.

(질문을 남겨 주실 때 해당하는 수업에서 질문 남기기를 하실 수 있습니다. 그렇게 해주시면 해당 수업을 수강하는 다른 분들께도 도움이 될 것 같아요.)

감사합니다.

김남현님의 프로필

김남현

질문자

2022.02.11

필드 이동시 클래스 내부에 공유하는 데이터가 생겨서 단점이라고 하셨는데요.

이 부분에 대해서 잘 모르겠어서 혹시 조금 더 자세하게 설명해 주실수 있나요?

해당 데이터의 범위가 메소드라는 좁은 단위에서 좀 더 넓은 클래스 범위로 늘어났으니 그만큼 변경 될 여지가 많아지는거고 변경을 추적하는게 어려워 질 수 있습니다. 그렇다고 그 자체가 단점이라는게 아니라 (저는 단점이라는 말을 언듭한 적이 없는데요.) 그렇게 범위를 넓혔을 때 효용성이 더 나아진다면 그자체로 좋은 선택이 될 수 있습니다.

김남현님의 프로필

김남현

질문자

2022.02.12

> 변경 될 여지가 많아지는거고 변경을 추적하는게 어려워 질 수 있습니다. 

차근차근 답변을 다시 읽어보고 있는데 복잡한 시스템을 개발한 경험이 별로 없다보니 위의 부분이 정확히 이해가 되지가 않네요 ㅠㅠ

변경 될 여지가 많다는건 메소드 단위에서 클래스 단위로 변경이 되었으니 여러 메소드에서 해당 필드를 수정할수가 있게 되는것이기 때문에 변경 될 여지가 많다는것으로 이해했습니다. 그런데 여기서 변경을 추적한다는게 잘 와닿지가 않네요 ㅠㅠ

간단히 말해서, 사용되는 범위가 넓어졌으니 어디서 변경되는지 파악하기 어렵다는 말입니다.