1. 클래스란?
클래스는 쉽게 말하면 객체를 만들기 위한 틀 혹은 설계도라고 할 수 있습니다.
예를 들어 몬스터라는 오브젝트를 만든다고 했을때 몬스터를 만들기 위한 설계도라고 생각하면 됩니다.
몬스터를 만들기 위한 설계도는 어떻게 구성하는 것이 좋을지 생각해보고, 그 생각한 내용을 클래스에 담으면 됩니다.
2. 클래스 생성
클래스의 선언은 위 코드에서도 알 수 있듯이
class 키워드를 통해 만들 수 있습니다.
이후 class안에 객체가 가져야할 요소들을 넣어 주면 됩니다.
3. 클래스 사용
클래스의 생성은 위와 같습니다.
클래스를 보다 잘 활용하기 위해선 반드시 접근제한자라는 개념에 대해 알고 있어야합니다.
접근제한자 public은 아무데서나 접근이 가능하고 private은 클래스 내에서만 접근이 가능합니다.
접근제한자는 따로 지정해주지 않는다면 기본적으로 private으로 설정됩니다.
따라서 위 코드에 있는 name, damage, hp, speed 값에 접근 하기 위해서는 public 키워드를 붙여줘야합니다.
- 접근제한자 public
접근제한자를 붙여 위와 같이 slime이라는 객체의 값을 정해줄 수 있습니다.
4. 클래스 생성자
위 코드와 같이 클래스 생성자를 사용하면 객체를 만들 때 객체에 대한 정보값들을 정해 줄 수 있습니다.
5. 클래스 프로퍼티 (Property)
Monster Class에 있는 요소들은 public으로 설정했기 때문에 아무데서나 접근이 가능합니다.
의도된 경우라면 문제가 없지만, 다른 곳에서 값에 접근하면 안되는 경우 public을 사용하면
보안이나 이후 원치 않는 곳에서 해당 값이 변경될 수 있다는 문제점이 있습니다.
- 접근 제한자 Private
그렇다고 접근 제한자를 private으로 설정하면 클래스내에서만 값에 접근할 수 있기 때문에
해당 값을 바꾸거나 접근할 수 없다는 문제가 생깁니다.
이럴때 유용하게 사용할 수 있는게 프로퍼티(Property)입니다.
- 프로퍼티 사용법
name의 값에 접근할 수 있는 프로퍼티 Name을 만들었습니다.
get은 name의 값을 얻을 수 있고 set은 name값을 설정 할 수 있습니다.
이런식으로 만들어진 프로퍼티 Name을 활용하면 간접적으로 변수 name에 접근 할 수 있게 됩니다.
프로그램을 짜다보면 우리가 예상치 못한 값이 들어와 있는 경우가 있습니다. 값을 직접 변경할 경우
디버깅을 통해 언제 값이 바뀌었는지 확인하기 어렵지만 프로퍼티를 통해 값을 변경할 경우.
Set부분에 종단을 찍고 프로그램을 돌려보면 값이 수정된 순간을 전부 체킹해볼 수 있기 때문에
프로퍼티를 사용하면 디버깅을 좀 더 편하게 할 수 있다는 장점이 있습니다.
또한 프로퍼티를 이용하면 값을 읽기만 가능하고 변경하지 못하게 할 수도 있고
조건을 걸어 원하는 값만 받아오게 구현할 수도 있습니다.
-읽기 전용
-프로퍼티 조건추가
이런식으로 프로퍼티를 활용하면 몬스터의 체력값에 이상한 값이 들어오는것을 막을 수 있습니다.
6. 클래스의 상속
앞서 클래스는 객체를 만들기위한 설계도라고 언급드렸고 해당 클래스를 통해 슬라임이라는
객체를 만드는 방법 또한 설명했습니다. 그러나 생각해봐야하는 부분이 있습니다.
해당 Monster클래스를 활용해 Slime만 만들경우 Slime에 필요한 기능 ex) 점프기능, 높은 회피율
Monster 클래스 안에 구현하면 되지만, Monster 클래스로 슬라임 뿐만아니라 골렘이나 고블린과 같은 몬스터를
만들 경우 골렘과 고블린만 가지는 고유한 기능들을 Monster 클래스 안에 구현하게되면 원치 않은 기능들이
몬스터들 안에 포함 될 수도 있고 더욱 복잡해지기 떄문에 가독성이나 유연성이 떨어 질 수 있습니다.
이는 추후에 유지보수하기 힘들다는 문제를 야기할 수 있습니다.
이럴 때 사용할 수 있는게 클래스의 상속입니다.
클래스의 상속을 사용하면 부모 클래스 Monster의 특징을 자식 클래스인 Slime, Golem에게 물려줄 수 있고
또한 자식 클래스에서 필요한 별도의 기능 또한 구현하여 사용할 수 있습니다.
부모 클래스에서 사용한 프로퍼티는 그대로 사용할 수 있으나 생성자는 별도이기때문에
자식 클래스의 생성자를 활용해 필요한 값들을 지정할 수 있습니다.
- 자식 클래스의 생성자
자식 클래스는 부모 클래스의 생성자와 별개로
별도의 생성자를 만들어 주어야만 안에 있는 값들을 지정 할 수 있습니다.
자식 클래스에서 생성자를 만드는 도중에 name, damage, hp, speed가 오류가 뜨는데
이는 접근 제한자와 관련이 있습니다.
- 접근 제한자 Protected
접근 제한자 private은 해당 클래스 내에서만 접근을 허용하겠다는 의미입니다.
따라서 부모 클래스를 상속 받은 자식 클래스에서도 해당 변수에 접근할 수 없습니다.
protected는 본인과 상속 받은 클래스에서만 접근을 허용하겠다는 의미입니다.
따라서 해당 private을 protected로 변경하게 되면 자식 클래스에서도 해당 값에 접근 할 수 있기 때문에
오류가 사라집니다.
이처럼 객체 지향언어의 핵심인 class를 잘 활하면 보다 원하는 기능을 구현하기도 쉽고 이후에
유지보수에도 큰 장점을 가지는 프로그램을 만들 수 있습니다.
'C#' 카테고리의 다른 글
C# Partial (2) | 2024.01.05 |
---|---|
C# Static (2) | 2024.01.04 |
C# JSON 사용 방법(직렬화, 역직렬화) (1) | 2024.01.03 |
C# 틱택토 만들기(Console) (1) | 2023.12.30 |
C# 형변환 (Casting) (1) | 2023.11.30 |