C#의 기초 12 - namespace, static, partialclass

krokrai·2025년 12월 26일

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;
        }
    }
}
  • 다른 project
using MyMath

void Main()
{
	// const 선언으로 선언과 동시에 사용가능 한다.
	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의 메소드, 필드에 접근할 수 있습니다.
  • 단, 객체지향의 원칙 중 하나인 단일 책임 원칙에 위배가 될 수 있습니다. 즉, 무분별한 사용은 자제할 수 있도록 합니다.
profile
게임을 좋아하고 만들고 싶은 개발자 지망생입니다.

0개의 댓글