C#의 대표적인 객체 지향 구성 요소는 _클래스_예요. 클래스는 데이터(필드)와 동작(메서드)을 결합한 것으로, 클래스의 필드와 메서드를 _멤버_라고 해요.
멤버에 대한 접근은 접근 제한자로 제한할 수 있는데, 가장 흔히 쓰이는 두 가지는 다음과 같아요.
public: 모든 코드에서 접근할 수 있어요(제한 없음).private: 같은 클래스 안의 코드에서만 접근할 수 있어요.클래스를 그 클래스의 인스턴스를 만들기 위한 템플릿이라고 생각하면 돼요. 클래스의 인스턴스(_객체_라고도 해요)를 만들려면 new 키워드를 사용해요.
class Car
{
}
// Create two car instances
var myCar = new Car();
var yourCar = new Car();
필드는 타입을 가지며 클래스 어디에서든 정의할 수 있어요.
public 필드는 PascalCase로, private 필드는 camelCase로 정의하고 앞에 밑줄 _을 붙여요.
class Car
{
// Accessible by anyone
public int Weight;
// Only accessible by code in this class
private string _color;
}
필드에는 선택적으로 초깃값을 지정할 수 있어요. 초깃값을 지정하지 않으면 해당 타입의 기본값으로 설정돼요. 인스턴스의 필드 값은 점 표기법을 사용해 접근하고 갱신할 수 있어요.
class Car
{
// Will be set to specified value
public int Weight = 2500;
// Will be set to default value (0)
public int Year;
}
var newCar = new Car();
newCar.Weight; // => 2500
newCar.Year; // => 0
// Update value of the field
newCar.Year = 2018;
private 필드는 보통 메서드를 호출하는 부수 효과로 갱신돼요. 이런 메서드는 보통 아무 값도 반환하지 않는데, 이 경우 반환 타입은 void여야 해요.
class CarImporter
{
private int _carsImported;
public void ImportCars(int numberOfCars)
{
// Update private field from public method
_carsImported = _carsImported + numberOfCars;
}
}
이 연습 문제에서는 드디어 돈을 모아서 장만한 무선 조종 자동차를 가지고 놀아볼 거예요.
자동차는 완전히 충전된(100%) 배터리로 시작해요. 리모컨으로 자동차를 조종할 때마다 20미터를 이동하고 배터리가 1퍼센트 줄어들어요.
무선 조종 자동차에는 두 가지 정보를 표시하는 멋진 LED 디스플레이가 있어요:
"Driven <METERS> meters"."Battery at <PERCENTAGE>%".배터리가 0%가 되면 더 이상 자동차를 주행할 수 없고, 배터리 표시에는 "Battery empty"가 나타나요.
여섯 개의 작업이 있어요. 각 작업에서는 무선 조종 자동차 인스턴스를 다뤄요.
새 무선 조종 자동차 인스턴스를 반환하도록 (static) RemoteControlCar.Buy() 메서드를 구현해요:
RemoteControlCar car = RemoteControlCar.Buy();
LED 디스플레이에 표시되는 거리를 반환하도록 RemoteControlCar.DistanceDisplay() 메서드를 구현해요:
var car = RemoteControlCar.Buy();
car.DistanceDisplay();
// => "Driven 0 meters"
LED 디스플레이에 표시되는 배터리 잔량을 반환하도록 RemoteControlCar.BatteryDisplay() 메서드를 구현해요:
var car = RemoteControlCar.Buy();
car.BatteryDisplay();
// => "Battery at 100%"
주행 거리를 업데이트하는 RemoteControlCar.Drive() 메서드를 구현해요:
var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.DistanceDisplay();
// => "Driven 40 meters"
배터리 잔량을 업데이트하도록 RemoteControlCar.Drive() 메서드를 업데이트해요:
var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.BatteryDisplay();
// => "Battery at 98%"
배터리가 방전되었을 때(0%) 주행 거리를 늘리지도 않고 배터리 잔량을 줄이지도 않도록 RemoteControlCar.Drive() 메서드를 업데이트해요:
var car = RemoteControlCar.Buy();
// Drain the battery
// ...
car.DistanceDisplay();
// => "Driven 2000 meters"
car.BatteryDisplay();
// => "Battery empty"
Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.