E D R , A S I H C RSS

후�발달특별세미나

후� 발달 특별 세미나

냄새를 맡고 그 냄새를 없애는 방법� 대하여 세미나 입니다. 신입� 눈� 맞추어 쉽게 하겠지만 재학�� 들어� �움� ��� 만들겠습니다.

시간: 5월 2� 6 ~ 8시.
장소: 미정.

Upload:0503_RefactoringSeminar.hwp - 발표 �료.
Upload:0503_RefactoringSeminarSrc.zip - 예제 파�들.

위 문서� 리펙토� � 것입니다. 그리고 예제 파�들� 완벽히 리펙토� � 것� 아닙니다. � 소스�서 한가지 냄새를 ��고 그 냄새�만 집중해서 리펙토�하는 것만 했기 때문입니다. �외�� 여러가지 시�해보세요. --재�

�야기

1 Page로 �내다. --재�

재미 있는 세미나 였어요~^^ 고맙습니다.

재�아 정� 유�하고 재밌는 세미나 였다. 내가 깜박 존 것� 네 세미나 때문� 그런게 아니� 내 버릇�란거 알지? - �협

정� 재밌었어요. 수업중� 질문� 못한게 있는�요, 주�� ����면 안�주는건가요?? c언어 수업시간� �수님� 주�� 많� 쓸 수� 좋다고하셨는�... --최경현
주ì„�ì�´ 많다는 것ì�€ 코드가 ìž�ì‹ ì�„ 스스로 표현 못하기 때문입니다. 어딘가 주ì„�ì�„ 달려고 ìƒ�ê°� 한다면 한 번쯤 '주ì„� 없으려면 어떻게 해야하는가?'ë�¼ê³  ìƒ�ê°�해보세요. 단, 숙제 ì œìœì—�서는 êµ�수님ì�˜ 눈ì—� 맞춰야합니다. --재ë�™
êµ�수님ì�´ ë§�씀하시는 주ì„�ì�€ 소스가 어떻게 ë�Œì•„가는지 설명하는 주ì„�ì�„ ë§�하는거 아닌가 ì‹ìŠµë‹ˆë‹¤. 리펙토ë§�ì�„ 통해서 주ì„� ì—†ì�´ë�„ ì�´í•´ê°€ëŠ” 소스를 작성하ë�„ë¡� 노력하고, ë­� 필요한 경우ì—�는 쓸수ë�„ 있겠죠. - ìƒ�협

세미나 후 제 귀� 들어온 질문 중� '함수를 많� 만들면 메모리를 � 사용하지 않는가?'�는 질문� 있었습니다. 누가 �세히 설명 좀 부�드립니다. --재�
전문�� 설명� 아니구, 제 ���는 함수를 사용하여 메모리 사용하는 비용과 프로그래머가 함수를 � 사용하여 소스� 가�성� 올리고, 유지 보수 � 버그를 없애는 비용과 비�를 해볼때 후�가 훨씬� � 비중� 차지하기 때문� 함수를 � 사용하여 메모리를 � 사용하��� 리펙토�� 중요성� 결코 줄어들지 않는다고 ��합니다. 그리고 짧� 소스�서는 리펙토� 하여 함수가 많아 지는것� 낭비처럼 보�지 몰�� 좀� 프로그램� 커질수� 리팩토�� 해놓�으로 해서 추후� 최�화를 하는��� 훨씬 유리하기 때문� 결국� 가서는 ��� � 효율�으로 사용하리�고 봅니다. - �협

사실 � 질문� 제가 받았� 질문��, 질문 받았� 당시� 별 ��없� 메모리를 많� 사용한다는 단�� 있��� 잃는 것(단�)보다 얻는 것(장�)� � 많기 때문� �관없다고 얼버무렸습니다. 그렇게 틀린 대답� 아니였지만 많� 부족한 대답�었습니다. 그래서 재�형하고 �야기� 해보고 저� 나름대로 ��해서 답� 내어보았습니다.
메모리를 많� 사용한다는 우려� ��� 많� 변수들� 있습니다. 전달��를 받거나 값� 리턴할 때, �� ���는 변수가 필요하기 때문�죠. 하지만 변수는 그 변수가 선언� 함수내�서만 효력� 발휘하고 함수가 종료�는 순간 사�집니다(메모리해제). 그러므로 모듈화�(쉽게 �야기해서 함수로 나뉜)프로그램�서는 함수내� 많� 변수들� 메모리를 많� 차지하��� 그 함수가 �나면 그 메모리는 해제�어 사용가능해집니다. 그리고 전역변수나 메�함수내� 변수만� 사용하는 프로그램� 프로그램� �날 때까지(메�함수가 종료� 때까지) 메모리를 잡아�므로 한번 할당� 메모리는 사용불가능합니다.
모듈화� 프로그램�서� 메모리 사용� 개�� 필요할 때마다 할당해서 쓰고 필요없으면 해제하��고 전역변수나 메�함수내� 변수만� 사용하는 프로그램�서� 메모리 사용� 개�� 지금� 안쓰���� 나중� 쓸 메모리를 미리 할당하고 사용� �났��� 메모리를 계� 잡아��입니다. 전�� 경우�는 어� 순간 메모리를 많� 사용하는 경우� 있고 어� 순간�는 엄청 �게 사용하는 경우가 있습니다. 메모리 사용� � 유����고 할 수 있습니다. 밑� 참고 그래프(�체제작)를 참고해주시기 바�니다. --강�경
rkd49_answer_1.JPG
- 아래 �규� �대로 � 차�는 없� 것 같습니다. 모듈�서� 변수 선언, 사용� 있어서 메모리 사용량� 기�해야 몇 바�트 정�가 아�까요? 아래 코드처럼 극단�� 예가 아닌 �� � 변화가 없는 경우가 대부분��고 ��합니다(물론, ��할당� 여기서 논외입니다). 그런�, 아래� 코드는 몇가지 냄새가 나는 코드로군요. �. :(

~cpp 
// foo(), bar() ê°€ 호ìœë�  때마다 memory사용량ì�´ 4K 씩 늘어난다.
#include <iostream>
using namespace std;

#define ARRSIZE 1024
#define FUNMAX	10;

void foo();
void bar();

int funcCount = 0;

int main()
{
	foo();
	return 0;
}

void foo()
{
	int f[ARRSIZE];
	cout << "addr of f in " << funcCount << "th call : " << f << endl;
	cin.get();
	if( funcCount++<FUNMAX )
		bar();
}

void bar()
{
	int b[ARRSIZE];
	cout << "addr of b in " << funcCount << "th call : " << b << endl;
	cin.get();
	if( funcCount++<FUNMAX )
		foo();
}
   
혹시 다른 ��� 갖고 계신분� 제게 가르침�... 저� 조금 � ��해�야겠습니다. - 임��

함수가 많아지면 메모리를 많� 쓰게 �까??
(참고로 제가 �하고� 하는 것� 코드� �한 메모리 사용량 입니다.)

함수� 갯수와 메모리 사용량� �접�으로 관련� 없습니다. 메모리 사용량과 �접�으로 관련� 있는 것� 함수� 갯수가 아니� 프로그램� 길� 입니다.

함수가 많다고 프로그램� 길�가 긴 것� 아닙니다. 길�가 짧� 함수를 여러개 가진 프로그램과 길�가 엄청나게 긴 함수를 한개만 가진 프로그램� 있다고 해봅시다. 길�가 � 긴 프로그램� 어떤 것입니까?

리펙토�� 대해서 ��해 봅시다. 가장 먼저 배운 방법� 무엇�었습니까? 중복제거 입니다. 함수를 늘려 중복� 제거하면 프로그램� 길�는 길어질까요? 짧아질까요?

물론 함수가 추가�면 전달�� 처리를 위한 약간� 코드가 추가�는 것� 사실입니다. 하지만 그것� 몇바�트� 지나지 않습니다.

--�규
�악� 있어서 참 좋았어요~ 중간중간� �담� 좋았구요. 지나 치게 진지한 세미나 보다는 훨씬 났다는 ��� 드네요 ^^ 다만 조금 아쉬운건. 쉬는 시간� �료수�� 뽑아 드려야지 �고 ��하고 있었는�...프로�트 땜� 바�셔서 그런지 빠르게 진행 하시��고요~ ㅋㄷㅋㄷ 마지막으로~ 간결한 1장짜리 �료집� 너무 좋았어요~ - 톱아보다
프로�트 때문� 빠르게 진행한게 아니� 선전부 모임때문�... 여튼 간결하게 하는 건 중요하다. 시간 �면 ~cpp The One Page Proposal� �어보�� 해. --재�

�제서야 글� 남겨서 죄송스럽지만; ㅎㅎ 유�한 시간�였습니다. +_+ 리팩토�� 좀� 공부해야겠지만...;;
좋�정보 �사합니다아~ ㅎㅎ--정수민

통� 리팩토�� 대한 반론� 다�과 같� 양�� �니다. 리팩토�� 많� 한다 --> 함수 개수가 많아진다 --> 콜 체�� 길어진다 --> ��가 �려진다. 메모리 문제보다는 �� 문제�서 리팩토�� 대한 우려가 불거져 나오는 것�죠.

그런ë�°, 함수 호ìœì—� ì�˜í•œ 오버헤드는 컴파ì�¼ëŸ¬/VM 기술ì�´ 발전하면서 ì �ì � 줄어들고 있고, 문제가 복잡할수ë¡� 그런 ë‚®ì�€ 단계ì�˜ 옵티마ì�´ì œì�´ì…˜ë³´ë‹¤ 높ì�€ 단계ì—�서ì�˜ 최ì �화가 훨씬 ë�” 효과ì �ì�¸ë�°, 리팩토ë§�ì�´ 잘 ë�˜ì–´ 함수가 잘게 쪼개어져 있으면 높ì�€ 단계ì�˜ 최ì �화를 하기가 쉬워집니다. (그래ë�„ 여전히 로우레벨ì�˜ 옵티마ì�´ì œì�´ì…˜ì�´ 필요하다면 매í�¬ë¡œë‚˜ 코드 제너레ì�´ì…˜ì�„ 쓸 수 있습니다. DavidParnasì�˜ 논문 참고)

낮� 단계 최�화는 10% �� 높히는 경우가 많지만 높� 단계 최�화는 100%나 1000%� 종종 있습니다.

리팩토�� 잘 한다면, ��문제는 나중� 신경 쓰는 것� 결과�으로 나� 경우가 많습니다.

--JuNe

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:35
Processing time 0.0082 sec