본 캠프 TIL

2025.04.15 클래스와 객체

mrmuffin 2025. 4. 15. 21:07

오늘 배운 내용을, 클래스에 자주 비유되는 '붕어빵'을 통해 쉽게 정리해 보려고 한다.

 

먼저 클래스는 어떤 붕어빵이 만들어질지를 정하는 "설계도" 또는 "틀"이다.

 

필드는 붕어빵에 어떤 재료가 들어갈지를 정하는 것이다. 즉 붕어빵의 속성이나 상태에 해당한다.

 

코드 붕어빵 속성
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주차 강의까지 수강 및 정리하여 목요일부터 텍스트 던전 과제에 집중할 수 있게끔 할 예정이다.