[멋쟁이사자처럼부트캠프 Unity게임개발 4기] 7일차 : 클래스 + 캡슐화

2025. 2. 28. 15:52·공부/부트캠프
728x90

🚀 클래스와 생성자(Constructor)

클래스는 객체 지향 프로그래밍(OOP)에서 가장 중요한 개념이며,
생성자는 클래스의 객체가 생성될 때 자동으로 호출되는 특별한 메서드입니다.


1️⃣ 클래스(Class)란?

클래스(Class)는 객체(Object)를 만들기 위한 설계도입니다.
클래스를 사용하면 데이터(속성)와 기능(메서드)를 하나로 묶어 관리할 수 있습니다.

📌 클래스 기본 구조

class 클래스이름
{
    // 필드 (속성)
    데이터형 변수이름;

    // 생성자
    public 클래스이름() { }

    // 메서드 (동작)
    반환형 메서드이름() 
    {
        실행 코드;
    }
}

2️⃣ 생성자(Constructor)란?

생성자(Constructor)는 객체가 생성될 때 자동으로 실행되는 메서드입니다.
✔ 클래스와 동일한 이름을 가진다.
✔ 반환형이 없다. (void도 생략됨)
✔ 객체가 생성될 때 자동 호출되어 필드를 초기화할 수 있다.

📌 생성자 종류

✅ 기본 생성자 (Default Constructor)
✅ 매개변수가 있는 생성자 (Parameterized Constructor)


3️⃣ 예제 코드 - 클래스와 생성자 활용하기

using System;

namespace _2502281
{
    class Person
    {
        private string Name;
        private int Age;

        // 🔹 기본 생성자 (Default Constructor)
        public Person()
        {
            Name = "이름 없음";
            Age = 0;
            Console.WriteLine("기본 생성자 실행");
        }

        // 🔹 매개변수가 있는 생성자 (Parameterized Constructor)
        public Person(string pName, int pAge)
        {
            Name = pName;
            Age = pAge;
            Console.WriteLine("매개변수가 있는 생성자 실행");
        }

        // 🔹 객체 정보 출력 메서드
        public void ShowInfo()
        {
            Console.WriteLine($"이름 : {Name}, 나이 : {Age}");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // ✅ 기본 생성자 호출
            Person p1 = new Person();
            p1.ShowInfo(); 

            // ✅ 매개변수가 있는 생성자 호출
            Person p2 = new Person("철수", 25);
            p2.ShowInfo();
        }
    }
}

 


4️⃣ 코드 설명

위 코드에서는 Person 클래스를 정의하고, 두 가지 생성자를 구현했습니다.
✔ 기본 생성자(Person()) → Name = "이름 없음", Age = 0 기본값 설정
✔ 매개변수 생성자(Person(string, int)) → 전달된 값으로 Name과 Age 초기화

📌 실행 결과

 

➡ 객체 p1이 생성될 때 기본 생성자 실행
➡ 객체 p2가 생성될 때 매개변수가 있는 생성자 실행


5️⃣ 생성자의 역할과 특징

✅ 객체가 생성될 때 자동 실행된다.
✅ 초기화 작업을 수행할 수 있다.
✅ 생성자는 여러 개(오버로딩) 정의 가능하다.

📌 생성자 오버로딩

public Person(string pName)
{
    Name = pName;
    Age = 0;
}

➡ 매개변수 개수에 따라 적절한 생성자가 호출됨.

 


💊캡슐화

객체 지향 프로그래밍(OOP)에서는 캡슐화(Encapsulation) 원칙을 따르며,
객체의 내부 데이터를 보호하고, 필요한 경우에만 접근할 수 있도록 관리하는 것이 중요합니다.
이때 사용하는 것이 Getter & Setter 함수, 그리고 프로퍼티(Property) 입니다 🚀

1️⃣ Getter & Setter 함수란?

C#에서는 클래스 내부의 변수를 private(외부에서 직접 접근 불가)로 설정하여,
데이터를 직접 수정하는 것을 방지할 수 있습니다.
하지만 외부에서 값을 설정하거나 가져와야 할 때,
Getter & Setter 함수를 사용하여 데이터를 안전하게 관리할 수 있습니다.

📌 Getter & Setter 함수 구현

class Person
{
    private string name; // 내부 변수 (private 접근 제한)

    // 🔹 Setter (값 설정)
    public void SetName(string newName)
    {
        name = newName;
    }

    // 🔹 Getter (값 가져오기)
    public string GetName()
    {
        return name;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();

        person.SetName("철수"); // 값 설정
        Console.WriteLine(person.GetName()); // 값 가져오기 → 철수
    }
}

✅ SetName("철수")를 통해 private 변수 name에 값을 저장
✅ GetName()을 호출하면 name 값을 읽어올 수 있음

 

2️⃣ 프로퍼티(Property)란?

C#에서는 Getter & Setter를 더 간편하게 사용할 수 있는 문법인 프로퍼티(Property)를 제공합니다.

📌 프로퍼티의 역할

✔ 변수를 직접 노출하지 않고도 데이터를 안전하게 관리
✔ Getter & Setter를 자동으로 생성하여 코드 가독성 향상
✔ 값을 설정(set)하거나 가져올(get) 때, 추가 로직을 쉽게 추가 가능

📌 프로퍼티를 이용한 코드

class Person
{
    private string name; // 내부 변수 (private)

    public string Name // 프로퍼티
    {
        get { return name; }  // Getter (값 가져오기)
        set { name = value; } // Setter (값 설정하기)
    }
}
class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();

        person.Name = "영희"; // Setter 사용
        Console.WriteLine(person.Name); // Getter 사용 → 영희
    }
}

✅ person.Name = "영희" → set 프로퍼티를 통해 name에 값 저장
✅ Console.WriteLine(person.Name) → get 프로퍼티를 통해 값 반환

3️⃣ 자동 구현 프로퍼티 (Auto-Implemented Property)

위에서 본 프로퍼티는 여전히 private 변수를 따로 선언해야 했습니다.
하지만 C#에서는 자동 구현 프로퍼티(Auto-Implemented Property) 를 제공하여
더 간결한 코드 작성이 가능합니다.

📌 자동 구현 프로퍼티 사용

class Person
{
    public string Name { get; set; } // 자동 구현 프로퍼티
}

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();

        person.Name = "민수"; // 값 설정
        Console.WriteLine(person.Name); // 값 가져오기 → 민수
    }
}

✅ private 변수를 선언하지 않아도 자동으로 관리됨
✅ 코드가 훨씬 간결해지고 가독성이 좋아짐

 


➕ 추가

1️⃣ DateTime 클래스란?

DateTime은 C#에서 날짜와 시간을 저장 및 조작하는 클래스입니다.
이를 활용하면 현재 날짜 및 시간 출력, 특정 날짜 생성, 날짜 차이 계산 등이 가능합니다.

DateTime now = DateTime.Now;
Console.WriteLine($"Current Date and Time: {now}");

 

DateTime now = DateTime.Now;

Console.WriteLine($"Year: {now.Year}");   // 연도 출력
Console.WriteLine($"Month: {now.Month}"); // 월 출력
Console.WriteLine($"Day: {now.Day}");     // 일 출력
Console.WriteLine($"Hour: {now.Hour}");   // 시간 출력
Console.WriteLine($"Minute: {now.Minute}"); // 분 출력
Console.WriteLine($"Second: {now.Second}"); // 초 출력

2️⃣ TimeSpan 클래스란?

TimeSpan은 시간 간격(두 날짜 사이의 차이)를 나타내는 클래스입니다.
이를 이용하면 두 날짜 간의 차이를 계산하거나, 특정 시간만큼 더하거나 빼는 연산이 가능합니다.

TimeSpan duration = new TimeSpan(1, 30, 0);
Console.WriteLine($"Duration : {duration}");

TimeSpan t1 = new TimeSpan(2, 5, 0, 0); // 2일 5시간
TimeSpan t2 = TimeSpan.FromHours(3.5);  // 3시간 30분
TimeSpan t3 = TimeSpan.FromMinutes(90); // 90분 (1시간 30분)

Console.WriteLine($"t1: {t1}"); // 2.05:00:00
Console.WriteLine($"t2: {t2}"); // 03:30:00
Console.WriteLine($"t3: {t3}"); // 01:30:00

 


🐥 마무리..

오늘은 실습으로 콘솔 슈팅 게임을 만들어봤는데 여러가지 개선한뒤에 정리해서 올려봐야겠당.

728x90

'공부 > 부트캠프' 카테고리의 다른 글

[멋쟁이사자처럼부트캠프 Unity게임개발 4기] 9일차 : LINQ / 상속  (0) 2025.03.05
[멋쟁이사자처럼부트캠프 Unity게임개발 4기] 8일차: 예외처리/리스트/배열리스트/스택/큐  (1) 2025.03.04
[멋쟁이사자처럼부트캠프 Unity게임개발 4기] 6일차 : 함수(메서드), 구조체, 클래스  (1) 2025.02.27
[멋쟁이사자처럼부트캠프 Unity게임개발 4기] 4일차 : 조건문과 반복문 + 콘솔 게임 실습  (0) 2025.02.25
[멋쟁이사자처럼부트캠프 Unity게임개발 4기] 3일차 : 연산자  (0) 2025.02.24
'공부/부트캠프' 카테고리의 다른 글
  • [멋쟁이사자처럼부트캠프 Unity게임개발 4기] 9일차 : LINQ / 상속
  • [멋쟁이사자처럼부트캠프 Unity게임개발 4기] 8일차: 예외처리/리스트/배열리스트/스택/큐
  • [멋쟁이사자처럼부트캠프 Unity게임개발 4기] 6일차 : 함수(메서드), 구조체, 클래스
  • [멋쟁이사자처럼부트캠프 Unity게임개발 4기] 4일차 : 조건문과 반복문 + 콘솔 게임 실습
knhoo
knhoo
  • knhoo
    &*
    knhoo
  • 전체
    오늘
    어제
    • 전체 (143) N
      • Unity 개발일지 (20)
        • [Unity2D]졸업프로젝트 (17)
        • [Unity3D]VR프로젝트 (2)
      • 공부 (118) N
        • 게임 수학 (1) N
        • 부트캠프 (12)
        • C++ (39)
        • Unity & C# (8)
        • 데이터베이스 (2)
        • 컴퓨터비전 (0)
        • 컴퓨터구조 (0)
        • python (7)
        • BAEKJOON (38) N
        • 개발 (2)
        • 자료구조 (9)
      • 일상 (2)
  • 블로그 메뉴

    • Github
    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 📖README
  • 인기 글

  • 태그

    Python
    야핏무브
    비트버니
    오블완
    unity2d
    패널파워
    unity
    멋쟁이사자처럼후기
    캐시워크
    백준
    C++
    구간합
    Cpp
    티스토리챌린지
    백준 #python
    자료구조
    til
    c#
    앱테크
    머니워크
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
knhoo
[멋쟁이사자처럼부트캠프 Unity게임개발 4기] 7일차 : 클래스 + 캡슐화
상단으로

티스토리툴바