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

이상진님의 프로필 이미지
이상진

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

유연한 컨트롤러1 - v5

안녕하세요, 컨트롤러의 구현 방법에 대한 질문입니다.

해결된 질문

작성

·

285

1

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
안녕하세요, 강의를 들으면서 영한님께서 작성해주신 코드 뿐만 아니라, 그동안 공부했던 방법을 활용하여 다르게 표현할 방법이 없을지를 항상 고민하며 강의를 수강하고 있습니다.
(강의를 열심히 수강중인 것으로 생각해주시면 감사하겠습니다 ㅎㅎ..)

물론 설명을 너무 잘해주셔서, 강의의 내용과 흐름은 이해할 수 있었는데요, 이 과정에서 몇몇 궁금한 것이 생겨 질문드리게 되었습니다.

  1. 메서드 파라미터 사용

스크린샷 2024-01-25 오전 5.21.31.png

이 코드는, v4에서의 프론트 컨트롤러 코드인데요, 저는 "메서드 파라미터는 변경하지 않는 것이 좋다"라고 알고 있는데, 그래서 controller.process(paramMap,model) 에서 model이 변경(정확히는 참조는 바뀌지 않지만 컬렉션 내부 내용의 변화)되는 부분이 조금 어색하게 느껴지는 것 같습니다.

그래서 드리는 질문은, 저는 v3에서의 프론트 컨트롤러 코드 흐름이 더 쉽게 와닿는 느낌인데요, 영한님께서는 각각의 컨트롤러에서 ModelView를 생성하지 않는 장점이 더 크다고 판단하신 건지 궁금합니다.

2. 인터페이스의 디폴트 메서드 사용
스크린샷 2024-01-25 오전 5.46.17.png이 코드는, v5의 Adaptor의 구현 클래스에 공통적으로 정의되는 createParamMap() 메서드인데요! 인터페이스의 디폴트 메서드를 활용하면 V3, V4에서의 코드 중복을 해결할 수 있을 것 같다는 생각이 들었습니다.

그래서 궁금한 점은, 나중에 createParamMap()을 사용하지 않는 어댑터를 추가할 수 있으니 중복을 감안하고 V3, V4에 각각 정의하는 것이 좋은 방법인지, 혹은 V3, V4에는 코드가 중복되니 코드 중복 제거 차원에서 디폴트 메서드로 정의하는 것이 좋은지에 대한 의견이 궁금합니다.


읽어주셔서 감사합니다. 즐거운 하루 보내세요!

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 이상진님

  1. 모든 프로그래밍의 적용 방법에는 트레이드 오프가 있습니다. 우리가 컬렉션을 인자로 넘기고 특정 함수에서 컬렉션에 값을 채우는 것은 일반적인 프로그래밍 방식입니다. 대신 이런 경우 의도를 명확하게 들어내는 것이 좋습니다. 이 경우 컬렉션(Model)에 데이터를 모은다는 의도가 아주 명확하기 때문에 괜찮습니다. 또한 실용적인 관점에서 컨트롤러 내부의 코드가 단순해지기 때문에 좋은 선택이라 할 수 있습니다. 아무리 좋은 방식이라도 해당 프레임워크를 사용하는 개발자가 코드를 복잡하게 작성해야 한다면 좋은 디자인이라고 하기는 어렵습니다.

  2. 인터페이스의 디폴트 메서드는 가급적 사용하지 않아야 합니다. 특히 단순히 중복 제거 관점에서는 권장하지 않습니다. 이 경우 간단한 유틸리티 클래스를 만들어서 위임을 하는 것을 더 권장합니다. 인터페이스의 디폴트 메서드는 하위호환을 유지해야 할 때, 고려하고 하는 것이 좋습니다. 쉽게 이야기해서 인터페이스는 최대한 인터페이스의 의도에 맞도록 사용해야 합니다.

감사합니다.

이상진님의 프로필 이미지
이상진
질문자

안녕하세요!
궁금했던 부분들이 너무나도 명확하게 해소되었습니다.
친절하고, 자세한 답변 너무 감사드립니다!

이상진 드림

이상진님의 프로필 이미지
이상진

작성한 질문수

질문하기