C#

namespace

2zreal 2025. 2. 16. 21:29

프로그래머가 2명 이상 동시에 개발을 진행하면 Class명이 겹칠 수 있다. 

 

 A프로그래머도 Player 클래스를 선언하고

B프로그래머도 Player 클래스를 선언하면 클래스 이름이 중복된다. 

이렇게 함께 개발을 하게 되면 중복되는 문제가 발생하는데 이 중복되는 문제를 방지하기 위해 namespace를 사용한다.

A.Player과 B.Player은 다른 기능을 한다.

A프로그래머의 Player 클래스를 사용하려면 A.을 붙여서 A.Player로 객체를 만들고

B프로그래머의 Player 클래스를 사용하려면 B.을 붙여서 B.Player로 객체를 만든다.

namespace _02NameSpace
{
    internal class Program
    {
        static void Main(string[] args)
        {
            
            A.Player aplayer= new A.Player();
            B.Plaeyr bplayer= new B.Plaeyr();
        }
    }
}


namespace A
{
    class Player
    {

    }
}
namespace B
{
    class Plaeyr
    {

    }

}

 

그러면 System이라는 namespace를 using 하면 Console.WriteLine("!");을 사용할 수 있는데  

이 Console이라는 클래스 안에 WriteLine() 이라는 함수를  Console의 객체 생성 없이 어떻게 바로 호출을 할 수 있는 것인가라는 생각이 들었다.

 

이뉴는 Console이라는 클래스는 static(정적)클래스 이기 때문이다.

정적 클래스는 객체 생성이 불가능하고 클래스 내부의 모든 멤버가 static으로 선언돼야 한다. 그리고 상속도 불가능하다고 한다.

namespace System
{
    public static class Console 
    {
        public static void WriteLine(string value)
        {
            
        }
    }
}

 

그러면 객체를 생성하지 않는데 굳이 클래스를 사용하는 이유가 뭐지??

연관된 기능들을 한 곳에 묶어서 관리하기 위해 클래스 안에 관련된 함수를 선언한다.(수학 관련 함수를 Math클래스 안에서 관리한다.)

C#에서는 함수를 클래스 외부에 선언하는 것이 불가능하다.(함수를 선언하려면 Class안에다가 선언해야 한다.)

C++에서는 함수를 클래스 외부에 선언하는 것이 가능함.(꽤 중요한 차이점이다.)

 

그렇게다면 왜 C++에서는 클래스 외부에 함수를 선언할 수 있고 C#에서는 선언할 수 없는 거지?

C++은 절차적 언어의 특징과 객체지향적 언어의 특징을 둘 다 가지고 있어 클래스 외부에 함수를 선언할 수 있다고 한다.

하지만 C#은 순수한 객체지향적 언어이기 때문에 클래스 내부에만 함수를 선언할 수 있다.

(이게 C++과 C#의 컴파일 방식이 다르기 때문에 발생하는 문제이다. C++과 C#의 컴파일 방식은 나중에 다루어봐야겠다.)

'C#' 카테고리의 다른 글

접근 제한 지정자  (0) 2025.02.18
맴버변수와 맴버함수, 상수  (0) 2025.02.18
객체지향 && Class  (0) 2025.02.16
다중 프로젝트 && using  (0) 2025.02.15