닷넷의 배경/특징 및 네임스페이스은 무엇인가?


Microsoft/ASP.NET 2010.10.28 15:32



ShakeJ

닷넷이란?

  • C개발에 필요한 라이브러리, 실행환경, 툴등 모든 것을 포괄하고 있는 이상적인 개발 환경.
  • 다양한 언어를 지원함으로써 개발자는 다양한 언어로 개발, 닷넷에서는 하나의 방식으로 동작.
  • 플랫폼 독립성
  • 서로 다른 언어끼리의 호환성

 

닷넷 프레임웍(.NET Framework)

  • 닷넷의 개념에서 애플리케이션을 개발 및 실행하기 위해 준비된 플랫폼

( 예를 들어, 내가 프로그래밍한 프로그램은 윈도우 2003의 비쥬얼 스튜디오 2005기반으로 만들었다. 이 프로그램을 윈도우 7을 쓰는 친구에게 보냈을 때, 친구 컴퓨터에서 실행을 하기 위해서는 플랫폼인 닷넷 프레임 워크가 필요하다 )

  • 공통 언어 런타임(Common Language Runtime) : 닷넷에서 프로그램을 로딩하고 동적 컴파일하며 실행해주고, 메모리관리 까지 해주는 가상적인 운영시스템.
  • 공통 언어 스펙(Common Language Specification) : 닷넷 프레임워크에서 동작하기 위해서 언어들이 지켜야 하는 약속.
  •  

닷넷 언어의 핵심

중간언어(Intermediate Language) IL

* 기계어 : 컴퓨터가 이해하는 언어.

-à 보통은 코드를 컴파일 하면 CPU에서 처리할 수 있는 기계어로 컴파일 하지만

닷넷에서는 중간언어로 컴파일 된다

JIT(Just In Time)

  • 중간언어를 동적으로 컴파일 하는 컴파일러

 

닷넷의 컴파일과 실행

  • 중간언어(IL) 형태로 만드는 것을 컴파일이라고 한다.
  • 중간언어(IL)의 언어를 JIT가 재 컴파일하여 .NET 환경의 CLR이 실행시킨다

 

소스코드-à중간언어(IL)-àJIT컴파일러-à완전한 기계어-à운영체제

 

jit가 사람이 친 영어로 된 코드를 중간언어로 컴파일해서 다음 CLR이 실행시킨다

 

C# 이란 무엇인가

C#은 .NET CLR 안에서 실행되는 응용 프로그램 개발에 쓰일 수 있는 여러 언어들 중 하나이다.

C#은 C와 C++의 발전된 형태로, MicroSoft가 .NET 플랫폼과 작동할 수 있도록 특별히 만든 언어이다.

언어 문법이 보다 단순하기 때문에 C#을 이용한 응용 프로그램의 개발은 C++을 이용하는 경우보다 더 간단하다.

C#이 상위언어이기 때문에 C++에서 가능하고 C#에서 불가능한 것은 거의 없다.

 

닷넷 프로젝트

비쥬얼 스튜디오를 켠 뒤에 코딩을 하기 위해서 '새프로젝트'를 클릭한다.

 

콘솔 어플리케이션

콘솔 어플리케이션으로 개발할 때 그림과 같이 console application을 선택하고 프로젝트를 만들어 준다. 이후에 책에 나오는 예제와 같이

코딩을 한 후, 컴파일 ( 코딩- 프로그래밍 언어로 프로그램을 만드는 과정 이 끝난 뒤 )을 한다.

  • 컴파일 ?

컴파일이란, 코딩이 끝난 뒤에 비쥬얼 스튜디오 안에서 오류를 검사하고 실제로 만든 프로그램을 구동시키는 작업을 뜻한다

 

윈도우 어플리케이션

아까는 콘솔 어플리케이션을 선택을 했는데, 이번엔 윈도우에서 실행이 되는 프로그램을 만들기 위해 윈도우 어플리케이션을 선택된다. 그러고 나면 위 그림 처럼 화면이 뜨게 된다.

위에 form1.cs 같은 파일이지만 [design]이 붙은 탭을 누르게 되면, 눈에 보이는 형태가 어떻게 생겼는지 알 수 있다. 그리고 옆에 Toolbox를 눌러 Label과 버튼 2개를 끌어다 만들어 준다.

위의 예제는 button2_click은 버튼 2라는 버튼을 클릭 했을 때 어떤 게 실행될 지 정해주는 것이다. 그래서 버튼 2를 클릭했을 때, label1.Text = "예리바보"라는 문장은 label1에 "예리바보"라는 텍스트가 들어가도록 명령 한 것이다.

 

그 외에도 콘솔이랑 윈도우 어플리케이션 외에도 만들 수 있는 어플리케이션이 많다. 위의 두 가지가 가장 대표적으로 사용이 된다 .

 

 

네임스페이스

 

네임 = 이름. 을 뜻한다.

프로그램을 만들려면 여러가지의 클래스가 있어야 된다.

이 때 클래스의 이름을 지어 주어야 한다. 왜냐하면 다른 클래스를 불러 와서 사용 할 때 많은 클래스 중 필요한 클래스를 불러 와야 되기 때문이다.

 

Class 네이트온쪽지보내기 { dksjfakjekefkj쪽지보내기 }

클래스 이름 내용들

 

위와 같이 '네이트온 쪽지보내기'라고 이름을 정의 할 수 있다.

그런데 이 때, 같은 이름의 클래스가 두 개 이상이 있을 때에는 충돌이 일어나서, 오류가 뜨고 프로그램이 실행이 되지 않는다.

 

Class 네이트온쪽지보내기 { 쪽지 지우기 adsfagae }

 

Class 네이트온쪽지보내기 { dksjfakjekefkj쪽지보내기 }

이름은 똑같고, 내용은 다른경우에는 클래스끼리 충돌이 일어나서 실행이 되지 않는다.

 

이러한 이유 때문에 네임스페이스가 등장한다.

 

네임스페이스란,

 

Namespace A

{

Class 쪽지보내기 { … }

}

 

 

Namespace B

{

 

Class 쪽지보내기 { … }

}

 

 

A라는 namespace안에 쪽지보내기 이름을 가진 클래스가 있고, namespace B 안에 쪽지보내기라는 클래스가 생겼다.

원래는 쪽지보내기라는 클래스 이름이 두개면 충돌이 일어난다.

하지만 네임스페이스를 사용하면, A공간과 B공간이 따로 나누어지기 때문에 충돌이 일어나지 않는다.

 

Using

 

 

 

Namespace MH

{

Namespace ABDC

{

Namespace jjung

{

Class 쪽지보내기 { ,,, }

}

 

그냥 네임스페이스를 찾아서 클래스를 불러오기에는 명령문이 길어지기 때문에, (명령문이 길어지면 효율이 떨어지고, 이름 철자라도 잘 못 입력하면 오류가 뜨기 때문에) using을 사용한다.

 

긴 문구를 짧게 쓸수 있게 해준다. 다음과 같이

 

Using MH.ABDC.jjung;

 

이렇게 하면 이 MH, ABDC, jjung 안에 있는 모든 클래스 이름을 검색하게 된다. 때문에 일일이 네임스페이스 안의 클래스를 찾지 않아도 되기 때문에 시간을 짧게 단축하고 노력을 줄 일 수 있다.

 

Using의 한가지 기능을 더하면

 

Using 별명 = 네임스페이스;

 

이런식으로 명령을 하게 되면, 네임스페이스를 줄여서 부를 수 있다.

Using MH.ABDC.jjung;

 

뒤의 긴 네임스페이스 MH.ABDC.jjung 을 줄일 수 있다.

 

Using B = MH.ABDC.jjung;

 

이렇게 MH.ABDC.jjung을 B라고 부른다고 설정을 해 줄 수 있다. 그러면 매우 쉽고 정리가 잘 되어 논리적으로 프로그램을 짤 수 있게 된다.

 

namespace A

{

class 쪽지보내기{ int i;}

}

 

namespace B

{

class 쪽지보내기{ double d;}

}

 

class TEST

{

public static void Main()

{

A.쪽지보내기objA = new A.쪽지보내기();

B.쪽지보내기objB = new B.쪽지보내기();

}

}

 

 

using A:

using B;

 

namespace A

{

class 쪽지보내기{ int i;}

}

 

namespace B

{

class 쪽지보내기{ double d;}

}

 

class TEST

{

쪽지보내기 objA = new 쪽지보내기();

쪽지보내기 objB = new 쪽지보내기();

}

위에 예제는 using을 사용하지 않아서 일일이 네임스페이스를 지정하여서 명령문을 써야 한다.

하지만 밑의 예제와 같이 using 을 써서 A와 B라는 네임스페이스 안의 클래스를 사용한다고 정의 해주면, 밑에 예제와 같이 그냥 클래스 이름만 써서 명령문을 쓸수 있게 된다.

신고

WRITTEN BY
ShakeJ

0 ,