강의

멘토링

커뮤니티

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

대흉근님의 프로필 이미지
대흉근

작성한 질문수

Simple Design 개론 3강: Less is more

코드의 구성요소는 어떤 것들이 있으며, 왜 줄여야 하는가?

거대한 클래스/메서드의 경우

작성

·

7

·

수정됨

0

안녕하세요, 영록님!

앞서 제작해주신 강의와 밋업 영상을 감명 깊게 듣고, 세번째 강의도 즉시 구매하여 즐겁게 듣고 있습니다.

 

구성 요소를 줄이기 위해 클래스/메서드 수를 최소로 운영하다 보면 클래스/메서드가 비대해지는 경우를 왕왕 보는데요.

개인적으론 새로운 구성요소가 필요하다는 신호라고 판단되어 별도 구성요소로 분리하곤 했습니다.

예를 들어, 특정 도메인의 CRUD 로직을 하나의 서비스로 유지하다가 -> R / CUD로 분리하고 -> CUD도 커지게 되면 다시 쪼개는 방식으루요.

 

케이스 바이 케이스겠지만, 영록님께서는 이런 경우 어떤 기준과 근거를 갖고 어떻게 처리하시는지 궁금합니다.

 

아직 첫 강의만 수강하여 뒤에 나올 내용에 대한 질문일지는 모르겠지만, 커리큘럼 타이틀만 봤을땐 따로 언급하시지 않을 것 같아서 질문 남깁니다!

답변 1

0

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

질문하신 내용이 사실 이번 강의 전체에 걸쳐서 나오는 핵심적인 내용입니다. 좋은 코드를 만든다는 것은 결국 좋은 함수(메서드)를 만드는 거라고 요약할 수 있고, 좋은 함수를 만드는 기준이 아마도 질문하신 내용에 대한 답이 되겠지요. 그래서, 강의 흐름을 따라가다보면 자연스럽게 답을 얻으실 수 있을 거라고 생각합니다만, 그래도 간단하게 제 관점을 설명해 보겠습니다.

우선, 적절한 함수의 크기, 함수를 언제, 어떻게 쪼개야 할 것인가에 대해서 저는 변수를 기준으로 많이 둡니다. 특히 지역변수 할당이 많거나, 인자가 많으면 함수의 역할을 적절하게 나눠야 하는 시점이라고 보구요. 나누는 방향도 변수 할당을 줄이거나 인자의 개수를 줄일 수 있는 방향을 먼저 봅니다.

메서드는 여기에 멤버 변수라는 기준이 추가됩니다. 주로 사용하는 변수가 그 메서드가 속한 클래스의 멤버라면 별 문제 없는 상황인데, 다른 클래스의 멤버 변수나 메서드를 많이 호출한다면 메서드가 속한 위치를 변경하거나 일부분 분리해야 한다는 신호일 수 있습니다.

반대로, 그런 요인이 없다면 단순히 클래스가 크다는 이유로 메서드를 다른 클래스로 분리하진 않습니다. 예로 드신 CRUD를 담당하는 서비스라면 굳이 R과 CUD로 나누지 않을 것 같습니다. 그보다는 R이 왜 복잡해졌는지를 좀더 분석해보고 분리할 수 있는 부분을 찾아내려고 할 것 같습니다.

이렇게 분리할 때도 그냥 코드 일부분을 그대로 extract method하게 되면 더 구조를 나쁘게 만들 수 있기 때문에, extract method를 하고 나서 변수를 줄일 수 있는지, public으로 해도 유익한 메서드가 될 수 있는지 등을 따져봅니다.

이런 관점에서 제 강의를 바라봐주시면 감사하겠습니다.

 

대흉근님의 프로필 이미지
대흉근
질문자

우왓 빠른 답변 감사드립니다!

뒷 강의들이 더욱 기대되네요 ㅎㅎ

대흉근님의 프로필 이미지
대흉근

작성한 질문수

질문하기