오늘 배운 내용을, 클래스에 자주 비유되는 '붕어빵'을 통해 쉽게 정리해 보려고 한다.
먼저 클래스는 어떤 붕어빵이 만들어질지를 정하는 "설계도" 또는 "틀"이다.
필드는 붕어빵에 어떤 재료가 들어갈지를 정하는 것이다. 즉 붕어빵의 속성이나 상태에 해당한다.
코드 | 붕어빵 속성 |
public string filling; | 팥 or 슈크림 |
public int size; | 크기 (작음, 중간, 큼) |
public string shape; | 꼬리 길이, 등무늬 등 |
메서드는 붕어빵 틀을 이용한 행동 방법, 기능, 조리법이라 할 수 있다. 이 메서드를 통해 붕어빵 틀로 붕어빵을 어떻게 만들고 다룰지를 정한다.
코드 | 붕어빵 행동 |
public void Bake() | 굽기 |
public void Flip() | 뒤집기 |
public void ShowInfo() | 현재 상태 출력 |
생성자는 붕어빵을 만들 때 작동하는 기계라고 할 수 있다. 왜냐하면 클래스(붕어빵 틀)에서 객체(붕어빵)을 만들면 자동으로 호출되기 때문이다.
소멸자는 붕어빵 가게를 정리하는 과정이라고 할 수 있다. 객체가 메모리에서 사라질 때 마지막으로 실행되기 때문이다.
프로퍼티(Property)는 외부에서 클래스 내부의 정보를 안전하게 제어하거나 읽을 수 있도록 해주는 보안 창구 같은 역할이다.
직접 필드에 접근하지 못하게 막고, 그 사이에서 검증 및 조건을 거친 후 값을 주고받도록 도와준다.
프로퍼티는 아래에서 다시 설명하겠다.
개념 | 붕어빵에서 비유 | 설명 |
클래스 | 붕어빵 틀 | 붕어빵을 만들기 위한 설계도 |
객체 | 실제 붕어빵 | 붕어빵 틀로 찍어낸 진짜 붕어빵 |
필드(Field) | 팥, 슈크림, 크기, 색 등 속성 | 붕어빵이 갖는 정보 |
메서드(Method) | 굽기, 뒤집기, 포장 | 붕어빵이 할 수 있는 동작 |
생성자 | 자동 기계 | 붕어빵을 만들 때 자동으로 작동해 초기 상태를 설정해주는 기능 |
소멸자 | 가게 정리 | 붕어빵이 사라질 때 자동으로 작동해 뒷정리를 해주는 기능 |
프로퍼티 | 보안 창구 | 외부에서 붕어빵의 정보를 직접 바꾸지 않고, 안전하게 읽고 쓸 수 있게 해주는 통로 |
프로퍼티(Property)
프로퍼티란?
-
- 프로퍼티는 클래스 멤버로서, 객체의 필드 값을 읽거나 설정하는데 사용되는 접근자(Accessor) 메서드의 조합
- 객체의 필드에 직접 접근하지 않고, 간접적으로 값을 설정하거나 읽을 수 있도록 한다.
- 필드에 대한 접근 제어와 데이터 유효성 검사 등을 수행할 수 있다.
- 프로퍼티는 필드와 마찬가지로 객체의 상태를 나타내는 데이터 역할을 하지만, 외부에서 접근할 때 추가적인 로직을 수행
구분 | 필드 | 프로퍼티 |
직접 접근 가능 | 가능 | 불가 (제어된 접근만 허용) |
캡슐화 | ❌ | ✅ |
안전성 | 낮음 | 높음 |
외부 노출 | 바람직하지 않음 | 바람직 |
프로퍼티 구문
- 프로퍼티는 get과 set 접근자를 사용하여 값을 읽고 설정하는 동작을 정의
- get 접근자는 프로퍼티의 값을 반환하고, set 접근자는 프로퍼티의 값을 저장
- 필요에 따라 get 또는 set 접근자 중 하나를 생략하여 읽기 전용 또는 쓰기 전용 프로퍼티를 정의할 수 있다
[접근 제한자] [데이터 타입] 프로퍼티명
{
get
{
// 필드를 반환하거나 다른 로직 수행
}
set
{
// 필드에 값을 설정하거나 다른 로직 수행
}
}
역할 | 예시 | 설명 | |
get | 값을 읽을 때 사용 | Console.WriteLine(사람.이름); | 내부 필드 값을 외부로 꺼내줄 때 사용 |
set | 값을 설정할 때 사용 | 사람.이름 = "철수"; | 외부에서 들어온 값을 내부 필드에 저장할 때 사용 |
자동 프로퍼티 (Auto Property)
- 자동 프로퍼티는 프로퍼티를 간단하게 정의하고 사용할 수 있게 해주는 편리한 기능
- 필드의 선언과 접근자 메서드의 구현을 컴파일러가 자동으로 처리하여 간단한 구문으로 프로퍼티를 정의할 수 있게 해줌
[접근 제한자] [데이터 타입] 프로퍼티명 { get; set; }
자동 프로퍼티의 장점
코드 간결 | 필드를 직접 만들 필요 없음 |
캡슐화 유지 | 여전히 get/set을 통한 제어 가능 |
빠른 개발 | DTO, 모델 클래스 등에 매우 유용 |
예제 코드
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Person person = new Person();
person.Name = "John"; // 값을 설정
person.Age = 25; // 값을 설정
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); // 값을 읽어 출력
C#이 내부적으로 private string _name; 과 같은 필드를 자동 생성해준다.
Name, Age 모두 프로퍼티로 각각 사람의 이름과 나이를 저장하거나 읽는 용도로, get; set; 이 있기 때문에 외부에서 읽고 쓰기가 가능하다.
만약 get; private set; 같이 쓴다면 외부는 읽기만 가능하고 내부에서만 수정이 가능하다.
오늘은 유난히 집중이 되지않아 힘든 날이었다. 그래도 강의 내용은 대부분 정리할 수 있을 정도로 이해한 것 같아 긍정적으로 생각한다.
특히 HashSet을 사용해 숫자 맞추기 코드를 짜본 것이 기억에 남는데, 사전캠프에서 숫자 맞추기 코드를 작성했을 때는 이 컬렉션을 몰랐기 때문에 난잡하게 코딩했기 때문이다.
내일은 좀 더 집중해서 4주차 강의까지 수강 및 정리하여 목요일부터 텍스트 던전 과제에 집중할 수 있게끔 할 예정이다.
'본 캠프 TIL' 카테고리의 다른 글
2025.04.17 TextRPG 개발일지 (0) | 2025.04.17 |
---|---|
2025.04.16 상속과 다형성, 인터페이스 (0) | 2025.04.16 |
2025.04.15 배열과 컬렉션(List, Dictionary, HashSet), 메소드 +제네릭 (0) | 2025.04.15 |
2025.04.14 VS Code에서 C# 파일 만들기, input.Split(), 삼항 연산자 (0) | 2025.04.14 |
2025.04.11 프로젝트 마무리, 피셔-예이츠, ///(XML) (0) | 2025.04.11 |