📘프로그래밍/C#

[C#] 08 클래스

bohemdev1 2024. 10. 30. 07:27

정의

 

클래스(Class) 란?
같은 목적을 갖는 여러 데이터형 변수들과 메서드들의 집합

 

 

 

의의

 

객체 지향 프로그래밍(Object-Oriented Programming) 이란?

실생활에서 우리가 인식할 수 있는 사물은 객체(object) 로 표현합니다. 이러한 객체의 속성 및 행동을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍 입니다.

 

클래스(class) 는 객체를 주조하는 틀과 같은 역할을 합니다.

 

 

 

기능

 

 

구조체(structure) 과의 차이점

 

가장 큰 차이점은 구조체 객체는 값 타입(value type), 클래스 객체는 참조 타입(reference type) 인 것입니다. 새로운 변수에 각자의 객체를 대입할 경우 구조체 객체는 원본 데이터를 통째로 복사하여 독립적인 저장 공간을 구축하는 깊은 복사(deep copy) 를, 클래스 객체는 원본 데이터의 저장 공간 주소만 받아 해당 저장 공간을 같이 참조하는 얕은 복사(shallow copy) 를 수행합니다.

 

다음은 그 예시입니다.

 

#1 구조체 및 클래스 선언

/* #1 Student 구조체 및 Item 클래스 선언 */
public struct Student
{
    public string m_Name;
    public int m_Age;
    
    public void PrintfInfo() { Debug.Log($"이름({m_Name}) : 나이({m_Age})"); }
}

public class Item
{
    public string m_Name;
    public int m_Price;

    public void PrintfInfo() { Debug.Log($"아이템명({m_Name}) : 가격({m_Price})"); }
}

 

#2 구조체 객체의 깊은 복사

/* #2 Student 구조체 객체 A의 깊은 복사 */
void Start()
{
    Student A = new Student();
    A.m_Name = "홍길동";
    A.m_Age = 21; 

    Student B = A;
    B.m_Name = "김유신";
    B.m_Age = 23;

    A.PrintInfo();
    B.PrintInfo();
}
    
/*
이름(홍길동) : 나이(21)
이름(김유신) : 나이(23)
*/

 

A의 깊은 복사가 이루어져 A와 B는 독립적인 저장 공간을 가집니다. 따라서 B의 초기화 과정을 A는 영향을 받지 않아 서로 다른 출력값을 가집니다.

 

 

#3 클래스 객체의 얕은 복사(shallow copy)

/* #3 Item 클래스 객체 A의 얕은 복사 */
void Start()
{
    Item A = new Item();
    A.m_Name = "천사의 반지";
    A.m_Price = 1200; 

    Item B = A;
    B.m_Name = "드래곤의 목걸이";
    B.m_Price = 2000;

    A.PrintInfo();
    B.PrintInfo();
}
    
/*
아이템명(드래곤의 목걸이) : 가격(2000)
아이템명(드래곤의 목걸이) : 가격(2000)
*/

 

A의 얕은 복사가 이루어져 A와 B는 A의 저장 공간을 같이 참조합니다. 따라서 B를 초기화하면 같은 저장 공간을 공유 중인 A 또한 같이 초기화되어 서로 같은 출력값을 가집니다.

 

 

 

 

 

'📘프로그래밍 > C#' 카테고리의 다른 글

[C#] 10 REF / OUT  (1) 2024.11.01
[C#] 09 생성자 / 소멸자  (2) 2024.10.31
[C#] 07 구조체  (0) 2024.10.29
[C#] 06 디폴트 매개변수  (0) 2024.10.28
[C#] 05 메서드 오버로딩  (0) 2024.10.28