C++ 에서의 변수선언 스타일
글쓴이: gurumong / 작성시간: 화, 2005/09/20 - 7:14오후
언제 C++에서의 코딩 스타일에서
변수는 사용되기 직전에 변수선언을 한다고 들었습니다
저의 초보적인 생각에는
그렇게 변수선언을 하면 변수들이 모여있질 않아서 (소스내 흩어져있어서) 변수들을 관리하기 힘들꺼같은데요
위와 같은 C++에서의 변수선언 스타일을 따르면 어떤점이 좋은것인지요?
그리고 상대적으로 함수내에서 사용하는 변수들을 함수의 처음부분에 몽땅 선언하는 C 스타일의 변수선언은 어떤점이 안좋은지 알고싶습니다
Forums:
제 개인적인 생각은 이렇습니다.[code:1]int a;...
제 개인적인 생각은 이렇습니다.
이 경우와
이 경우를 비교해보면
하나의 함수내부를 기능별로 분리할 수 있지 않을까요?
처음에 몽땅 변수 선언해서 쓰는방법이나,중간중간에 필요에 의해서 선언
처음에 몽땅 변수 선언해서 쓰는방법이나,
중간중간에 필요에 의해서 선언해서 쓰는방법모두 안좋은 방법입니다.
제가 항시 생각하면서 coding하는 부분은
"사용하는 변수는 최대한 가까이에"입니다.
C도 그랬고, C++도 그랬고
학부에서 얼마안하고 뚝딱만들만한 크기가 아니면 디자인이나 구조에 공을 많이 들이게 됩니다.
당연히 그러다보면 함수가 자기가 하는 역할만 딱딱 나눠지게 되고,
그 함수의 길이는 얼마 커지지 않게 되지요.
일예로 리눅스의 kernel소스중 module쪽이 아닌 순수 kernel쪽코드를 보게되면 한 함수가 아무리 커도 20줄을 넘지 않는 경우가 대부분입니다. 각각의 함수는 무슨역할을 하는지 명확하고, 또한 상당히 직관적으로 되어있습니다.
그리하여 그함수에서 쓰는변수는 많지도 않고, 실제 쓰여지는 부분과 많이 떨어져 있지도 않게되지요.
회사에 취직을 해서 큰 프로젝트를 하게되는 경우나 잘짜논 코드를 분석하다보면 위와같은 룰이 적용되어있는걸 심심치않게 보실수 있을겁니다.^^
코딩할때는 지금 당장보다는 나중을 위한다는 생각으로 해야합니다.자신이
코딩할때는 지금 당장보다는 나중을 위한다는 생각으로 해야합니다.
자신이 짠 코드도 몇일,몇주,몇달 지나면 어색합니다.
그런걸 생각해서 코딩하는게 PL에서는 readability를 생각해서 코딩한다는건데요
위에분이 설명한것 처럼. 소스를 볼때 변수 이름을 보고 변수의 타입이나
용도를 파악해야 합니다. 이럴경우 사용되는 위치에서 가까이 선언된경우가
편하겠죠. 요즈은 컴파일러나 에디터들이 좋아서 변수 검색이 쉽습니다.
어떻게 보면 위치도 문제가 안될 수 있습니다. 자신만의 스타일로 해서
위에서 예로들었듯이 두가지 중에 한가지를 선택을 할 수도 있고 아니면
혼용을 해서 사용할 수도 있습니다.
저는 주로 앞에쪽 몰아서 사용하는데 변수 관리가 편해서 그럽니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
조건문 같은 곳에서는 allocation을 하지 않고 지나 갈 수도 있는
조건문 같은 곳에서는 allocation을 하지 않고 지나 갈 수도 있는 이점이 있다고 알고 있습니다만... ^^;
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
[quote="KTD"]제 개인적인 생각은 이렇습니다.[code:1]
(그것이 틀렸다는건 아니고요.)
C++에서 변수선언은 말그대로 개성이라 생각합니다.
단지 일관성이 필요하겠지요.
저같은경우 함수 전체에 쓰이는 변수는 함수 첫부분에 선언하고
단순히 루프 몇번 돌리기 위한건 루프문 바로 앞에 선언을 합니다.
Meyers의 Effective C++의 항목 32에 변수 정의 관련된
Meyers의 Effective C++의 항목 32에 변수 정의 관련된 내용이 있습니다. 제목이
Item 32: Postpone variable definitions as long as possible
입니다.
제목에 나온 것처럼 변수를 사용하기 직전에 정의하고 사용할 것을 권하고 있습니다.
그리고 본문을 읽어보면 아시겠지만, 이런 방식을 추천하는 이유는 정의만 하고 쓰이지 않는 변수(unused variable)가 생길 가능성 때문입니다. -- 변수가 객체인 경우 쓰이지 않는 변수는 불필요한 생성자와 소멸자의 호출 때문에 프로그램 성능 저하의 요인이 될 수 있습니다.
자세한 설명은 Effective C++의 본문을...
거짓말이 없다는 것은 현대성보다도 사상보다도
백배나 더 중요한 일이다.
변수사용하기직전이 좋은경우도 있고 그렇지 않은경우도 있죠예를들어볼
변수사용하기직전이 좋은경우도 있고 그렇지 않은경우도 있죠
예를들어볼까요..
변수가 국부적으로 사용되는 변수를 첫머리에 선언하고 나중에가서 한번사용한다면 불편할것이 분명합니다.
반대로 지금당장은 국부적으로 사용하지만 언제 다른곳에 사용될지 모를변수가 있습니다. 예를들면 불특정 임시사용목적의 buf, i 등이죠..
어떤사람이 중간쯤에 보니 buf 가 사용되었는데 앞쪽에 한번더 사용하려고 생각한다면 사용과 선언의 순서가 뒤집힐우려가 있고
혼돈을가져와 불편하겠죠..
그리고 개인적으로 국부적으로 쓸변수라면 대괄호로 해주는게 더이치적으로 맞다고 생각되는데.. C에서 그렇게 하죠..
----------------------------------------------------------------------------
TC++PL에서도 전반부에 C++에선 C와 다르게 변수선언을 조건문이나
TC++PL에서도 전반부에 C++에선 C와 다르게 변수선언을 조건문이나
제어문에서도 할 수 있으므로 그렇게 하는것이
다른 여러가지 문제들과 해깔림, 가독성문제 해소에 도움이 된다고
권장하곤 있습니다.
사실 이렇게하면 물론 매번 지정해줘야한다는것은 귀찮을지 몰라도
변수를 같은 이름으로 다르게 사용할 수도 있고, 훨씬 깔끔해 질 수도
있다고 생각되구요.
변수가 많이 필요로 하게 되는 프로그램같은경우엔 이 변수가 어디서
어떻게 선언되었었는지 쉽게 알 수 있어서 좋은듯 합니다.
내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.
많은 분들이 이야기 해주신 것과 동일하게 storage는 쓰여질 곳에 가
많은 분들이 이야기 해주신 것과 동일하게 storage는 쓰여질 곳에 가깝게 위치하는 것이 정답이라고 봅니다. 그렇게 하기 위해서 C99에서도 중간에 storage를 정의할 수 있게 바뀐 것이죠.
그리고 i, j와 같은 소위 임시 변수를 재활용하는 것에 대해 반대합니다. 문법적으로 반복문에서 지엽적인 정의가 허용된다면 반복문을 위한 storage를 재활용할 이유가 없다고 봅니다.
- 죠커's blog / HanIRC:#CN
변수 정의는 가능한 뒤로 늦춰라(Effective C++ 항목 32)
Effectvie C++ 항목 32를 보시면 이 부분에 대한 자세한 내용이 나와있습니다. 예를들면,,,
string foo(const string &ss)
{
string str;
if ( ss.length() < MIN_LENGTH )
{
return -1;
}
str = ss;
return str;
}
위의 코드를 보시면 ss라는 스트링 변수의 길이가 최소길이값보다 작으면 바로 리턴을 합니다.
이렇게 될때 위의 변수 str은 선언될 필요도 없는데 선언된 거죠..
생성자 호출과 소멸자 호출이라는 불필요한 오버헤드가 추가되는 겁니다. 따라서 C++에서는 변수 선언 위치를 C와 다르게 한 것입니다.
/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/
댓글 달기