객체지향 - 추상화와 클래스(Class)
추상화는 클래스를 통해 실현된다고 했다.
그렇다면 클래스는 무엇일까
클래스는 추상화된 현실의 객체/개념을 잘 따라야 한다.
우선 클래스는 필드와 메서드로 이루어져 있다. 또한 클래스는 타입을 만드는데,
그래서 이렇게 설명할 수 있다.
필드는 어떤 타입의 속성이고, 메서드는 어떤 타입의 행동이다.
class Car
{
}
클래스를 통해 Car 라는 타입을 만들었다.
자동차가 어떤 속성들을 가지고 있는지 생각해보자. (추상화해보자)
엔진, 문, 바퀴, 창문, 의자, 핸들, 브레이크, 엑셀,,, 등 매우 많다.
여기서는 엔진과 창문만 구현해보자.
일단 엔진과 창문 필드를 추가한다.
class Car
{
string engine;
string window;
}
엔진과 창문을 다시 간단하게 추상화해보자.
엔진을 디젤 엔진, 가솔린 엔진 등이 있을 수 있고 창문은 방탄 유리와 일반 유리로 나누어질 수 있을 것이다.
그렇다면 이 필드들을 초기화해주어 엔진과 창문에게 어떤 값을 주어야 필드의 의미가 있을 것이다.
생성자를 만들어 필드들을 초기화해보자.
public Car(string engine, string window)
{
this.engine = engine;
this.window = window;
}
생성자 또한 매서드이다. 다만 다른 매서드들과는 달리 특별 취급되는데, 그 이유는 이 메서드가 추상화에 관여하지 않기 때문이다.
무슨 말이냐면, 보통의 메서드들은 기능을 수행하는 반면 생성자는 오직 인스턴스의 생성만을 위해 존재한다.
이제 이 생성자를 사용해 Car 인스턴스를 만들어보자.
Car mycar = new Car("가솔린", "방탄 유리");
이제 mycar 는 Car 라는 타입을 가진 인스턴스가 되었다.
이때 인스턴스 필드들은 각각 가솔린과 방탄 유리로 초기화된다.
그런데 만약 생성자의 이름이 Car 가 아니었다면 어땠을까?
생성자의 이름을 Box 라고 해보자. 그럼 코드가 이렇게 바뀐다.
Car mycar = new Box("가솔린", "방탄 유리");
Box 의 필드를 가솔린과 방탄 유리로 초기화한다.
누가 봐도 이해가 가지 않을 것이다.
이 코드를 제대로 이해하려면 Car 클래스에 가서 Box 메서드의 정체를 일일히 알아내야 한다.
따라서 생성자의 이름은 클래스의 이름과 동일하게 정하는게 원칙이다.
'C#' 카테고리의 다른 글
[C# / 객체지향] 5. 네임스페이스(namespace) (0) | 2019.12.15 |
---|---|
[C# / 객체지향] 4. 정적(Static) 멤버 (0) | 2019.12.14 |
[C# / 객체지향] 2. 추상화는 무엇일까 (0) | 2019.12.12 |
[C#] FQDN 을 알아보자. (0) | 2019.12.11 |
[C#] ToString() 메서드의 기능 (0) | 2019.12.10 |