Collecting Parameter ¶
몇몇 메소드ì�˜ 결과와 í˜‘ë ¥í•˜ëŠ” ì½œë ‰ì…˜ì�„ 어떻게 ë¦¬í„´í• ê²ƒì�¸ê°€?(?)
ComposedMethodì�˜ 단ì �중 하나는, ìž‘ì�€ 메소드들 사ì�´ì�˜ 연관때문ì�´ë‹¤. í�° 메소드 하나ì—�서 ê³µìœ ë�˜ì—ˆë�˜ 임시 변수들ì�´, ì�´ì œëŠ” ìž‘ì�€ 메소드들 사ì�´ì—� ê³µìœ ë�œë‹¤. 가장 해결하기 쉬운 방법ì�€ ComposedMethod를 ì—†ì• ê³ ë‹¤ì‹œ 하나ì�˜ í�° 메소드ì—� 다 ë•Œë ¤ë„£ëŠ” 것ì�´ì§€ë§Œ, 안좋다. ë˜� 다른 해결책으로는 ì�´ ìž‘ì�€ 메소드들 사ì�´ì—�서 ê³µìœ ë�˜ëŠ” 임시 변수를 멤버변수ì—� 넣는 것ì�´ë‹¤. ì�´ê²ƒì�€ ê°�ì²´ì�˜ ìƒ�명기간 ë�™ì•ˆ ìœ íš¨í•œê²Œ 아니ë�¼, ì € 메소드들ì�´ 실행ë� 때ì—�ë§Œ ìœ íš¨í•˜ë‹¤. ì—시 안좋다.
우리� 해결책�, 메소드들마다 필요한 파�메터들� 넘겨주는 것�다. �것� 좀 �설여지는 방법�긴 하나, 다른 것들보단 낫다.
ì–´ë–¤ ì½œë ‰ì…˜ì�˜ 기혼남과 미혼녀를 추출해내는 코드를 ë³´ìž�.
~cpp
vector<People> marriedMenAndUnmarriedWomen()
{
vector<People> result;
for(vector<People>::iterator it = result.begin() ; it != result.end() ; ++it)
{
if(it->isMarried() and it->isMan())
result.add(*it);
}
for(vector<People>::iterator it = result.begin() ; it != result.end() ; ++it)
{
if(it->isUnmarried() and it->isWoman())
result.add(*it);
}
return result;
}
ComposedMethod를 ì �용해보ìž�.~cpp
vector<People> marriedMen()
{
vector<People> result;
for(vector<People>::iterator it = result.begin() ; it != result.end() ; ++it)
{
if(it->isMarried() and it->isMan())
result.add(*it);
}
return result;
}
vector<People> unmarriedMen()
{
vector<People> result;
for(vector<People>::iterator it = result.begin() ; it != result.end() ; ++it)
{
if(it->isUnmarried() and it->isWoman())
result.add(*it);
}
return result;
}
vector<People> marriedMenAndUnmarriedWomen()
{
return marriedMen() + unmarriedMen(); // ë� ì§€ 안ë� 지는 ëª¨ë¥´ê² ì§€ë§Œ ë�œë‹¤ê³ ê°€ì •í•˜ìž�.
}
ì½œë ‰ì…˜ì�„ 리턴하지 ë§�ê³ ê°�ê°�ì�„ ì½œë ‰ì…˜ì—� ë�”하ìž�.
~cpp
vector<People> marriedMenAndUnmarriedWomen()
{
vector<People> result;
addMarriedMenTo(result);
addUnmarriedWomenTo(result);
return result;
}
void addMarriedMen(vector<People>& aCollection)
{
for(vector<People>::iterator it = result.begin() ; it != result.end() ; ++it)
{
if(it->isMarried() and it->isMan())
aCollection.add(*it);
}
}
void addUnmarriedMen(vector<People>& aCollection)
{
for(vector<People>::iterator it = result.begin() ; it != result.end() ; ++it)
{
if(it->isUnmarried() and it->isWoman())
aCollection.add(*it);
}
}
즉, ë‘� 메소드ì�˜ 결과를 모으는 경우ì�¸ë�°, 그리 í�”한 경우는 아니였ë�˜ê±¸ë¡œ 기억. 약간ì�€ 다르긴 하지만 나ì�˜ 경우 CollectionParameter ì�˜ 성격으로 필요한 경우가 read/write 등 I/O ê°€ ë‚´ë¶€ì �으로 í•„ìš”í• ë•Œ ë˜�는 Serialization 등ì�˜ ì�¼ì�´ í•„ìš”í• ë•Œ. ê·¸ 경우 I/O 부분ì�€ Stream í�´ëž˜ìŠ¤ë¡œ ë§Œë“¤ê³ (C++ ì�˜ Stream ì�„ ì“°ë�˜ì§€ ë˜�는 ì§�ì ‘ Stream í�´ëž˜ìФ 만들어 ì“°ë�˜ì§€) parameter 로 ë„˜ê²¨ì£¼ê³ ê·¸ 파ë�¼ë©”í„°ì�˜ 메소드를 사용하는 형태였ì�Œ. --1002









