페이지

11/11/2015

[C#] namespace, #include 선언의 의미

학부때 C언어 배운 지식으로 무턱대고 C#을 살펴보려니 대체 한줄 한줄이 해석이 안된다.
아무래도 Syntax를 모르기 때문인듯..

특히, C#시작시에 매번 당연하게 선언해주는

#include <iostream>
using namespace std

에 대해서 MSDN이랑 다수 여러 네이버 블로그 님들 지식을 짜집기 해서 간단히 정리 하고자 한다.
(매번 느끼는 거지만 이렇게 직접 글로 써보고 나면 머리에 남는다.)

#include, #define 등은 'Preprocessor'라고 하며 글자 그대로 본 프로그램 시작전에(pre) 실행되는걸 의미하는데, 중요한건 어떻게 부르는지보다 왜 쓰는지 아는게 중요한것 같다.

#include A 의 의미는 A헤더 파일의 내용을 본 프로그램 상단에 글자 그대로 포함 시키라는 의미이다. 더 쉽게 말해 A라는 이름의 헤더 파일에 적혀있는 모든 글자를 Ctrl + A, C 해서 Ctrl + V 하라는 의미이다.

헤더 파일안에는, namespace, class, struct, 변수 등등이 포함되어 있는데,
대략적으로 간단하게 이해하기 위해서는 

namespace > class ~= struct > function(=method), variables(=field) 

등의 먹이사슬(?) 관계를 가진다. 사실 독립적인거 같지만, 즉, 네임스페이스 바로 아래에 충분히 여러 메소드들이나 필드들이 정의 될 수 있는거 같다. 

그런데 그렇게 생각하기 시작하면 헷갈리는듯...
그냥 필드랑 메소드는 동급레벨이며 따라서 메소드 안에서 필드들이 사용될 수 있고,
비슷한 속성(Attributes)의 필드와 메소드들이 모여서 구조체나 클래스가 되고, 
비슷한 속성의 구조체나 클래스들이 모여서 네임스페이스로 정의된다 로 알고 있을 생각이다.;;
나중에 익숙해지면, 한단계 나아가겠지;;

이렇게 구분짓는 이유는 메소드, 변수들의 이름 '충돌(중복사용)등을 막기 위함' 이라고 함.

암튼 헤더파일안에 정의 되어 있을 'std' 라는 이름의 네임스페이스의 내부 값(메소드, 구조체, 클래스 etc..)에
접근하기 위해서는 아래와 같이

[C++] std:: class.method.variable..
[C#]   std.class.method.variable.. 

사용된다. 그러나, 매번 접근을 위한 operator를 사용하기 귀찮으므로,

using namespace std라고 서두에 정의를 해두면 매번 귀찮은 namespace의 이름을 쳐주지 않아도 된다. 즉,

class.method.variable만으로도 ㅇㅋ

쉽게 생각해서 컴퓨터가 나 대신에 std::을 복사  붙여넣기 해준다는 의미이다.




댓글 없음:

댓글 쓰기

블로그 보관함

Facebook

Advertising

Disqus Shortname

Popular Posts