삽질의 현장/- .NET

#006_닷넷(.NET)_.Net Framework 기본 - namespace & 타입 & 가시성

shovelman 2015. 10. 22. 15:52


안녕하세요 삽잡이입니다.


이번 시간에는 객체지향에 있어서 namespace, type 등 

초적인 부분들 대해서 알아보는 시간을 가져보려고합니다.



객체지향 언어들에서는

모든 클래스 안에 형식이 들어가있고, 이 안에는 메소드들이 들어가있습니다.

이 메서드를 만들 때에는 반드시 주의해야할 사항이 있습니다.


메서드를 namespace 밖에다가 만들면 안됩니다.

이 namespace 밖에는 메서드 뿐만 아니라 어떠한 형식도 올 수 없습니다.

모든 형식은 namespace 안에 들어가 있어야합니다.

모든 메소드는 형식 내에 있어야합니다.

형식 밖에 메서드를 만들게 되면 이는 전역 메서드가 되는데

닷넷이나 Java는 존재하지 않습니다.

따라서 최소한 형식 안에 메서드를 만들어야되는 사실을 기억하시길 바랍니다.



제가 하고 싶은 말의 의도를 혹시나 파악하셨나요... 허허...

사실 위의 예제 코드에서 

PrintData() 메서드는 Test라는 클래스 내에 있는 메서드이기에 생략이 불가능합니다.

그리고 사실 namespace에 있는 타입의 정적 메서드이기때문에

Real 이름은 'MyApp.Test.PrintData()'입니다.


예제코드를 잘 보시면 아시겠지만 public이라는 접근 권한을 가지고 있습니다.

즉, 내 클래스에 있는 메서드는 private 권한이여도 상관이 없겠지만

외부 클래스에서 사용할 수 있게 만드려면 public으로 접근 속성을 부여해야한다는 것입니다.

이를 '한정자', '가시성', 'Modify', '접근권한' 이렇게 부릅니다...


같은 namepspace에 있다면, 같은 Class에 있다면... 등 

어디에 있냐에 따라 생략할 수 있는 부분들이 다르기 때문에 주의를 해야합니다.

namespace가 다르다면 Full set로 정확하게 명시를 해야겠지요...



그런데 일반적으로 namespace는 메서드에서 생략하고 사용합니다.

어떻게? using 키워드를 사용해서이지요...

그리고 이 using 키워드는 맨 위에 있어야합니다. 이게 규칙이지요...

즉, 모든 소스코드 가장 위쪽에 using 키워드가 있어야된다는 소리입니다.

이렇게 컴파일러는 알고 있기 때문입니다...


그런데 형식의 이름은 생략할 수 없습니다.

위의 코드에서는 나와있지 않지만... 

만약, 형식이 없다면 '내 클래스의 메소드'라는 의미가 되기 때문에 생략을 할 수없습니다.


그리고 사실 둘 이상의 namespace가 하나의 파일에 있는 경우는 없다고 보시면 됩니다.

namespace가 같다면 절대로 class가 두개 있을 수 없다 이겁니다...

.cs 파일 하나당 class 하나! 이렇게 생각하시길 바랍니다...


그리고 아까 가시성이 나온 겸 가시성에 대해서 알아보겠습니다.



가시성은 생략하게 되면 가장 높은 접근 권한을 갖게됩니다.

즉, 우리가 public, private 이런 한정자를 사용하지 않는다면

사실 private 한정자가 생략되있는 것입니다...


어떤 무엇보다도 가시성이 가장 먼저 나옵니다.
그 다음에 overide, static, virtual 등이 나오는 것이지요...

이번 시간은 여기까지 하도록 하겠습니다.


이상 삽잡이였습니다!