A. namespace 키워드
namespace란?
프로그램은 메모리 상에 수 많은 저장 장소('변수')를 생성해서 사용하고 각 변수에 이름을 붙여 구별합니다.
프로그램 기법이 발전하면서 단순한 변수 외에도 같은 소(小)작업에 동원되는 여러 변수들을 하나로 묶어 변수들의 배열 같은 모습의 대형 변수를 만들 필요가 있었습니다. 그리고 이것을 구조체라고 불렀습니다. 그 이후 프로그램 기법은 구조체 내에 그 구조체 안에서만의 특별한 동작 기능을 추가(함수인데 특별히 '메소드'라 부름) 하고 이를 '클래스'라고 부르게 되었습니다. 이 클래스는 하나의 작은 프로그램 모듈의 붕어빵 틀같은 모양을 하고 있으며 그 자체로는 실행될 수 없고 실제 런타임 때, new 라는 키워드에 의해서 메모리에 업로드 되어 비로소 실행되는데, 이렇게 메모리에 업로드되어 하나의 독립 모듈이 된 상태를 '객체'라고 부릅니다. 즉, 프로그램 기법이 구조체를 도입하면서 급발전하여 곧바로 클래스를 만들어 객체화(캡슐화)시키자는 방향으로 발전한 것 입니다. 여기서 객체의 설계도라고 할 수 있는 것이 클래스 입니다. 객체화 프로그래밍의 장점은 코드를 편리하게 재사용 할 수 있고 수 많은 변수들을 체계적으로 분류하여 프로그래밍의 효율성을 높인다는 데에 있습니다.
다시 한 번 요약하자면, 어떤 소(小)작업을 위한 여러 변수들과 함수를 한 데 묶어 클래스라는 붕어빵 틀을 만들었습니다.
붕어빵 틀이 있으니 '이 틀로 객체를 만들어라!' 하는 명령만으로 무한대의 똑같이 생긴 붕어빵 객체들을 만들 수 있게 된 거죠. 때문에 현대의 프로그램에서 클래스는 소스 코드 작성의 핵심입니다. 그리고 그 클래스라는 붕어빵틀은 복사, 기능추가, 다형성(후에 설명함), 은폐성, 개선된 가독성등에서 강력한 잇점들을 프로그래머들에게 안겨 주었습니다.
C# 프로그램 소스에는 많은 클래스들이 포함되어 있습니다.
네임스페이스란, 대략적으로 말하자면 클래스가 나열된 공간입니다. (= 클래스들의 덩어리)
하나의 네임스페이스 안에서는 동일한 이름을 가진 클래스가 존재하면 안됩니다. 구별할 수 없으니까요.
클래스명의 중복을 불허 한다는 것은 하나의 네임스페이스 안에서의 얘기일 뿐, 다른 네임스페이스에 같은 이름의 클래스명이 있냐 없냐는 문제되지 않습니다. 네임스페이스란 이렇게 클래스들을 무리지어 놓는 하나의 구획입니다.
미리 정의되어 있는 대표적인 C#의 편리한 네임스페이스에는 System 이 있습니다.
B. using 키워드의 용도
using 키워드로 다른 네임스페이스에 정의된 클래스를 가져오거나
네임스페이스의 별칭을 정의해서 사용할 수 있습니다.
1. 다른 네임스페이스에 있는 클래스 가져오기
형식)
using 다른네임스페이스명;
using 다른네임스페이스명.클래스명; // 하위 클래스들은 .으로 구분
예문)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
2. 별칭 정의하기
C#의 네임스페이스 이름이나 클래스 이름들이 정말 긴 경우가 많습니다.
실생활 용어도 약어를 많이 사용하는데, 프로그램 코드에서도 약자를 쓰고 싶어 근질근질 합니다.
사용하는 전처리 지시자는 using (소문자임!) 입니다.
using으로 간략화 할 수 있는 대상은 네임스페이스 이름과 클래스 이름 뿐 입니다.
형식)
using 별칭 = 네임스페이스명;
using 별칭 = 네임스페이스명.클래스명;
예문)
using con = System.Console; // 별칭을 정의하고 있는 using 키워드
class Program
{
static void Main(string[] args)
{
con.WriteLine("으하하");
con.ReadLine();
}
}
별칭 사용시 고려할 점)
여러 사람들과 코드를 공유하면서 개발 하는 경우라면, 별칭 사용을 자제 하는 것이 좋을 수도 있습니다.
자신은 알아보기 쉽겠지만, 다른 사람들에겐 불편할 수 있으니까요!