C#의 타입은 클래스나 구조체의 스코프 안에서도 정의할 수 있어요. 이때 감싸고 있는 타입은 일종의 네임스페이스 역할을 해요. 안쪽 타입에 접근할 때는 바깥쪽 타입에 점을 찍는 문법을 사용해요.
class Outer
{
public interface IInner {}
public enum EInner {}
public class CInner {}
public struct SInner {}
}
var outer = new Outer();
var inner = new Outer.CInner();
안쪽 타입에도 접근 수준을 설정할 수 있어요.
바깥쪽 타입의 private 멤버는 안쪽 타입의 멤버에게도 접근할 수 있지만, 그 반대는 안 돼요.
몇몇 "다른" 개발자들이 원격 조종 자동차 프로젝트 remote-control-competition를 진행해 왔어요. 코드를 정리하러 불려 왔어요.
텔레메트리 메서드와 속성을 분리해 Telemetry 속성으로 접근하도록 RemoteControlCar 클래스를 리팩터링해요.
var car = new RemoteControlCar();
car.Telemetry.Calibrate();
car.Telemetry.SelfTest();
car.Telemetry.ShowSponsor("Walker Industries Inc.");
car.CurrentSponsor
// => "Walker Industries Inc."
car.Telemetry.SetSpeed(100, "cps");
car.GetSpeed()
// => "100 centimeters per second"
Telemetry 인스턴스를 자동차의 스코프 밖에서는 만들 수 없도록 해요.
RemoteControlCar 클래스의 스코프 밖에서는 Speed 구조체를 사용할 수 없도록 해요.
RemoteControlCar 클래스의 스코프 밖에서는 SpeedUnits 열거형을 사용할 수 없도록 해요.
Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.