namespace, static, partial class
개요
- namespace
- static
- partial class
namespace
namespace란 이름으로 유추하기 힘들지만, 이름을 갖인 공간이라는 느낌으로 받아드리면 됩니다.
namespace를 선언하고 그 안에 여러가지 선언문(class, int 등)을 작성한 후, 다른 작업공간(다른 c# file이나 project에서 다른 곳에 선언된 선언문들을 갖여다가 사용하고 싶을 때 사용할 수 있습니다.
- 대표적인 사용으로는 가장 맨 위에 줄(보통 1번줄)에 선언되어 있는
using namespace System에서 System이라는 이름으로 선언된 namespace에 있는 함수, class, struct들을 사용할 수 있게 선언한 것입니다.
namespace MyMath
{
class MyMathClass
{
public const float PI = 3.14f;
public int MySum(int a, int b)
{
return a + b;
}
}
}
using MyMath
void Main()
{
Console.WriteLine(MyMathClass.PI);
MyMathClass my = new MyMathClass();
Console.WriteLine(my.MySum(3,6));
}
- 위에서 보이듯 다른 공간에서 작업을 한 것을 갖고 와서 현제 작업 중인 곳에 붙혀서 사용가능합니다.
- namespace의 이름은 같으면 안되며, 서로 다른 namespace 안에 class, struct 같은 것들은 이름은 겹쳐도 괜찮으나, 내부 class 등에 이름이 겹치게 되면 컴파일 오류가 날 수 있습니다.
static
- 현제까지 선언된 대부분의 함수, class 등은 동적인(메모리 상에서 동적인) 상태를 지녔습니다. 하지만 동적인 부분이 있다면, 정적인 부분도 있습니다.
- 대표적인 것이 프로젝트를 새로 만들면 static void Main(string[] agrs)와 같이 Main에 달린 경우였습니다. 하지만 직접 선언하며, 사용법을 익히겠습니다.
- static은 메모리의 4단계 중 data에 저장되며, 최초로 호출 되는 시점에 data 영역에 저장되며, 한번 할당된 이후에는 프로그램이 종료되기 전까지 할당해제 되지 않습니다.
- static으로 선언된 class는 내부에 있는 모든 메소드, 필드가 static이여야 합니다.
- static으로 선언된 class 등은 따로 선언 없이도 바로 사용할 수 있습니다.
class Program
{
static void Main()
{
StaticProcess.printer();
}
public static void printer()
{
Console.WriteLine("static class 호출됌");
}
}
static class 호출됌
partial class
- 이 또한 위에 namespace 처럼 협업이나 현제 작업 중인 project에 적용 할 수 있도록 선언하는 선언문입니다.
- class 뒤에 partial 붙혀 파편화하여, 같은 class 이름을 갖고 있다고 하더라도, 하나의 class로 보기 때문에 class 명이 겹치거나 추가를 할때 문제 발생을 최소화합니다.
void Main()
{
Test test = new Test();
Console.WriteLine(test.health);
Console.WriteLine(test.lvl);
}
public partial class Test
{
public int health { get; protected set; } = 500;
}
public partial class Test
{
public int lvl { get; protected set; } = 10;
}
500
10
- 위와 같이 같은 class 명을 갖고 있지만, 하나의 class 선언으로 2개의 다른 class의 메소드, 필드에 접근할 수 있습니다.
- 단, 객체지향의 원칙 중 하나인 단일 책임 원칙에 위배가 될 수 있습니다. 즉,
무분별한 사용은 자제할 수 있도록 합니다.