C#에 존재하는 접근제한자는 4가지입니다.
기본값은 private입니다.

접근제한자는 클래스, 변수, enum, 함수 앞에 적어주게 되고, 선언된 접근제한자의 영향을 받습니다.

1. public
public으로 선언된다면 어느 곳에서든 자유롭게 사용될 수 있습니다. 아무런 제한을 받지 않고 원하는 곳에서 사용됩니다.

2. private
private으로 선언되면 약간의 제한을 갖게 됩니다. 예를 들어 어떤 클래스에 변수들이 private으로 선언된 경우 해당 클래스에서만 접근이 가능합니다.

3. internal
internal로 선언된다면 해당 프로젝트에 public처럼 사용됩니다. 자신의 프로젝트에서 내부적으로 사용된다는 뜻이죠. 이는 외부에서 사용될 가능성이 있는 프로젝트에서 유용하게 사용됩니다. 해당 프로젝트의 사용자가 굳이 몰라도 되는 정보를 감추는 것이죠. 클래스를 생성할 경우 아무런 접근제한자를 선언하지 않았다면, 기본값은 internal 입니다.

4. protected
protected로 선언된다면 상속받은 자식의 클래스에서만 사용 가능한 제한을 갖습니다.

접근제한자를 잘 고려해서 프로그램을 만든다면 코드를 구조화하고 체계적으로 정리할 수 있는 장점이 있습니다. 개인적으로 접근제한자는 항상 명시적으로 선언해주는 습관을 가지면 좋다고 생각해요.


C#에서는 네임스페이스라는 것이 있습니다.
다른 언어에도 비슷한 것들이 있죠. 예를 들면 자바에서는 패키지가 있죠..
뭐 언어마다 각각 만들어진 이유가 있고, 그 쓰임새가 다르지만 대부분 원리는 비슷해요.

네임스페이스는 과연 무슨 기능을 하는 것일까요?

코딩을 하다보면 프로그램이 커지고 한 프로그램 안에서 같은 이름의 클래스를 생성할 수 있죠..
컴퓨터는 이름이 같은 클래스는 같은 클래스로 인식하기 때문에 클래스의 이름은 유일한 키워드를 사용해야 합니다.
하지만 이때 같은 이름을 같은 클래스를 여러개 만들 수 있는데요. 
네임스페이스를 이용하면 가능합니다. 

네임스페이스는 클래스보다 위에 있는 레벨로 프로그램의 전체 구조를 표현하는 키워드입니다. 
네임스페이스는 여러 단어를 조합해서 만들 수 있어요. 

namespace 라는 키워드를 선언하고 뒤에 자신이 원하는 단어를 적어주면 됩니다. 

namespace project01 
namespace project01.myName
이런식으로 네임스페이스를 다르게 만들 경우 같은 이름의 클래스를 사용할 수 있게 됩니다. 
일반적으로 네임스페이스 결정하는 방법이 있는데요.

namespace 회사명.팀명.**.** 이런 식으로 사용하거나 팀명 뒤에 프로젝트 이름을 사용하기도 합니다. 

하지만 절대적으로 이렇게 해야한다는 원칙은 없습니다. 단순히 구분만 가능하면 되는거니까요.

네임스페이스를 더 쉽게 이해하려면 폴더구조를 생각하면 됩니다. 
사진을 폴더로 정리를 한다면 
나라별로 폴더를 만들고 그 폴더안에 날짜로 나누고 필요하면 더 자세하게 나누듯이 
네임스페이스도 그렇게 나누면 됩니다.


+ Recent posts