프로그래머가 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 |