[C#] #01 Base&Struct
[C#01] C# Base&Struct
기반
사전 용어
-
C# : C# 프로그램은 .NET 프레임워크를 기반으로 개발한 프로그래밍 언어이고, JAVA와 유사한 구조를 가진 객체 지향 프로그래밍 언어입니다.
-
.NET : 마이크로소프트의 개발 플랫폼, 다양한 언어와 도구를 사용하여 어플 개발하고 실행하는 데 사용됩니다. (.NET Framework, .NET Core)
-
CIL(Common Intermediate Language) : 인간이 이해할 수 있는 가장 낮은 수준의 프로그래밍 언어입니다. 객체지향 어셈블리어이며 완전한 스택 기반입니다.
-
CLR(Common Language Runtime) : 실행환경 전반을 관리하는 핵심 엔진 자바의 JVM 같은 역할을 합니다. 실행될 때 다양한 형태의 서비스를 지원합니다. 함수가 호출될 때 현재 프로그램이 돌아가는 컴퓨터의 환경에 적합한 기계언어를 만들어 냅니다. 그리고 만들어진 기계언어 코드를 캐시에 저장한다. 이것이 JIT(Just In TIme)컴파일링이라 불리는 기법입니다. 이렇기에 크래스 플랫폼에 유리합니다.
-
ManagedCode(관리코드) : CLR에서 컴파일되어 실행됩니다. (객체지향모델, 언어독립적, 형안전성, 가비지컬렉션, 단일통합라이브러리 등) C#, JAVA 등에 사용합니다.
-
NativeCode(네이티브코드) : 컴파일을 하게 되면 OS에서 해석 가능한 기계어로 바로 번역합니다. 즉 컴퓨터 아키텍처에 직접 실행되는 기계어 코드입니다. 일반적으로 C/C++언어가 네이티브 코드에 해당합니다. 소스코드가 해당 플랫폼의 기계어로 직접 변환되어 실행됩니다. 네이티브코드는 특정 OS와 H/W에 종속적이며, 이식성이 상대적으로 낮습니다. C/C++ 등에 사용합니다.
C# 컴파일 과정
소스코드를 중간언어(IL)로 변환
-
코드 작성
-
C# 컴파일러 컴파일 수행
-
C# 컴파일러 중간 언어 CIL 혹은 MSIL 코드를 생성 (IL 중간언어로 작성된 파일 생성)
중간언어 => 기계어 컴파일
-
CIL을 실행환경 CLR에 올림
-
어셈블리를 원시코드로 변환 이 역할을 수행하는 것이 JIT 컴파일러다.(JIT 컴파일러에서 해당 컴퓨터 아키텍처에 맞는 기계어 코드로 변환 )
-
기계어 실행
-
모니터 출력
c#의 컴파일 과정
구조
기본 구조
using System;
namespace MyNamespace
{
class MyClass
{
}
struct MyStruct
{
}
interface IMyInterface
{
}
delegate int MyDelegate();
enum MyEnum
{
}
namespace MyNestedNamespace
{
struct MyStruct
{
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello world!");
}
}
}
클래스
클래스는 C# 프로그램의 주요 구성 요소입니다. 클래스 내에서는 필드, 속성, 메서드 등의 멤버가 정의됩니다.
class MyClass
{
// 필드 (멤버 변수)
// 생성자
// 메서드 (함수)
// 속성 (프로퍼티)
}
네임스페이스
네임스페이스는 코드를 논리적으로 그룹화하고 충돌을 피하기 위해 사용됩니다. 기본적으로 C#은 System 네임스페이스를 기본으로 포함하며, 필요에 따라 사용자 정의 네임스페이스를 추가할 수 있습니다.
-
using : 다음 예제와 같이 전체 이름이 필요하지 않도록 (Keyword)를 사용할 수 있습니다.
-
namepsace : 고유한 네임스페이스를 선언하여 프로젝트에서 클래스 및 메서드 이름의 범위를 제어할 수 있습니다.
using System;
namespace MyNamespace
{
class MyClass
{
void MyMethod()
{
// 메서드 내용
}
}
}
메서드
클래스 내에서 특정 작업을 수행하는 코드 블록입니다. 매개변수와 반환값을 가질 수 있습니다.
class MyClass
{
void MyMethod()
{
// 메서드 내용
}
}
메인 메서드
C# 프로그램의 진입점 프로그램 실행 시 처음 호출되며, 일련의 작업을 시작합니다.
class MyProgram
{
static void Main(string[] args)
{
// 프로그램 진입점
}
}