Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

I'm FanJae.

[20260430] 클래스(Class) 본문

Unity/Unity 초격차캠프

[20260430] 클래스(Class)

FanJae 2026. 4. 30. 18:46

1. 클래스(Class)

1) 클래스의 정의

- 클래스는 상태(데이터)와 동작(기능)을 하나로 묶어 표현할 수 있는 참조 형식이다.

- 객체지향 프로그래밍에서는 클래스를 이용해서 객체를 만들 수 있다.

- 클래스는 객체를 만들기 위한 설계도라고 할 수 있다.

- 클래스는 참조 형식으로, 변수에는 객체 자체가 들어있는 것이 아닌 객체가 있는 메모리 주소를 참조하는 참조값이 들어있는 형태다.


2) 클래스의 기본 형태

class 클래스이름
{
		// 필드
		접근 제한자 데이터형 변수이름; // private int value;
		
		// 생성자(생략 가능)
		public 클래스이름()
		{
		
		}
		
		// 메서드
		반환형 메서드이름() // public add(int a, int b)
		{
		
		}
}

- 위와 같은 형태로 사용할 수 있다. 위에서 사용되었던 접근 제한자에 대해서는 뒷 내용에서 다룬다.


3) 클래스의 특징

-  클래스는 클래스를 구분하기 위한 식별자(이름)이 존재한다.

- 클래스의 내부에는 상태(데이터)와 동작(기능)이 존재한다.

class Warrior
{
		// 상태(데이터)
		int hp;
		int attackPower;
		string name;
		
		// 동작(기능)
		void Attack()
		{
		}
		
		void UsePoition()
		{
		
		}
		void Defence()
		{
		
		}
}	

- Warrior라는 클래스가 있다면 이는 다음과 같다.

- 클래스 이름 : Warriror
- 상태(데이터) : 체력, 공격력, 이름 등등…
- 동작(기능) : 공격(칼 휘두르기), 포션 먹기, 방어하기 등등..

4) 객체와 인스턴스

-  객체는 메모리에 실제로 만들어진 실체를 의미한다.

- 반면 인스턴스는 어떤 클래스나 타입으로부터 만들어진 객체를 의미한다.

Warrior my_warrior = new Warriror();

- 여기서 new Warrior() 를 통해 메모리에 전사 객체가 만들어진다.

- 이 객체는 Warrior 클래스의 인스턴스이다.

 

※ 단, 일반적으로 객체를 생성하다와 인스턴스를 생성하다라는 말은 통용되어 사용되고 있다.


5) 접근 제한자

-  접근 제한자는 클래스, 필드, 메서드, 프로퍼티 등에 접근할 수 있는 범위를 정하는 키워드이다.

- 이 멤버를 어디까지 공개하는가에 대한 제한을 두는 기능이다.

- 접근 제한자를 이용하면 필요한 부분만 외부에 공개하고, 외부에서 건드리면 안되는 데이터는 숨길 수 있다.

- 일반적으로 같은 프로젝트라고 하지만, 정확히는 동일 어셈블리로 구분한다.

- 접근 제한자는 주로 위의 3개(private, public, protected )가 많이 사용되고 있다.

 

① private

- private은 같은 클래스 내부에서만 접근할 수 있다.

class Warrior
{
    private int hp;

    public void TakeDamage(int damage)
    {
        hp -= damage;
    }
}
Warrior warrior = new Warrior();
warrior.hp = 100; // 오류.

- hp는 Warrior 클래스 내부에서는 사용할 수 있지만 외부에서는 접근할 수 없다.

- 일반적으로, 필드(변수)는 private 으로 선언한다. 객체의 상태를 외부에서 바꾸지 못하게 하기 위해서이다.

 

② public

- public은 어디서든 접근할 수 있다.

class Warrior
{
    private int hp;

    public void Attack()
    {
		    Console.Write("공격합니다. ");
    }
}

- 외부에서는 공개된 메서드를 통해서 객체의 사용이 가능하다.

 

③ protected

- protected는 현재 클래스와 해당 클래스를 상속받은 자식 클래스에서 접근할 수 있다.

class Character
{
    protected int health = 100;
}
class Warrior : Character // 상속
{
    public void TakeDamage()
    {
        health -= 10; // 상속 관계에서 protected라고 선언한 것은 접근을 허용한다.
    }
}

- health는 외부에서는 접근할 수 없지만, Character를 상속받은 Warrior 내부에서는 접근할 수 있다.


6) 캡슐화

- 데이터와 그 데이터를 다루는 기능을 하나로 묶는 것을 의미한다.

- 클래스는 필드와 메서드를 함께 가질 수 있기 때문에 캡슐화를 표현할 수 있다.

- 보통 클래스 내부의 데이터는 외부에서 직접 접근하지 못하도록 접근 제한자 private 을 이용해서 데이터를 감춘다. (※ 데이터를 은닉하고 내부 로직을 숨기는 것이다.)

- 필요한 경우 속성(Property)나 메서드(Method)를 통해서 안전하게 접근하도록 만들어 둔다.


7) 생성자

- 생성자는 객체가 만들어질 때 자동으로 호출되는 특수한 메서드이다.

- 클래스 이름과 동일하며, 반환 타입이 없다. 주로 객체의 초기 상태를 설정한다.

- 생성자에 대한 자세한 내용은 다음에 더 자세히 다룬다.

 

C#은 C++과 다르게 소멸자 호출이 아닌 가비지 컬렉터(GC)를 이용한 객체 회수를 한다.

 
Comments