코드네임 :

Class 클래스⭐️ 본문

프로그래밍/Unity(C#)

Class 클래스⭐️

비엔 Vien 2023. 7. 3. 19:38

유니티는 Class 개념이 중요⭐️

~


<Class의 엑세스 한정자>  (MS 문서? 참고)

https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers

 

▷ public : 동일한 어셈블리의 다른 코드나 해당 어셈블리를 참조하는 다른 어셈블리의 코드에서 형식이나 멤버에 액세스할 수 있습니다. 형식 공용 멤버의 액세스 수준은 형식 자체의 액세스 수준에 의해 제어됩니다.

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/public

 

▷ protected : 같은 class 또는 해당 class에서 파생된 class의 코드에서만 형식 또는 멤버에 액세스할 수 있습니다.

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/protected

 

▷ private : 같은 class 또는 struct의 코드에서만 형식 또는 멤버에 액세스할 수 있습니다.

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/private

 


 

C에선 Class 없고 생김새 비슷한 Struct 구조체 잇음 - 근데 Class랑 완전히 다른거임!!!!!

⬇️ struct 구조체

https://andrew0409.tistory.com/150

⬇️ Class (c++)

https://andrew0409.tistory.com/151

 


Class

: method 와 변수를 모아둔 것

✔︎ 서로 관계가 있는 변수와 method를 하나로 합칠 수 있으므로 스크립트를 관리하기 쉬움

✔︎ Class에서 사용한 변수를 멤버 변수, 사용한 메서드를 멤버 메서드라고 함

 

Unity에서는 '처리 단위'보다는 '물건 단위'로 스크립트를 작성하는 것이 편리함!

 


 

✔︎ 작성한 Class는 int나 string등 데이터 (자료)형으로  사용가능 (Player 클래스를 만들면 Player형으로 사용가능)

▶  int num;을 쓰면 int형의 num변수를 만들 수 있음

   → num 변수의 상자는 비어있음(NULL)

       ▷  따라서 그 상자에 2나 1500 같은 숫자를 대입

▶  Player myPlayer;을 쓰면 Player형의 myPlayer 변수를 만들 수 있음

   → myPlayer 변수의 상자는 비어있음(NULL)

       ▷ 따라서 그 상자에 myPlayer 변수에는 플레이어의 실체 (인스턴스) 를 대입

 


 

. 의 사용

✔︎ myPlayer 변수가 가진 멤버 method나 멤버 변수 사용하려면 myPlayer.멤버 method명(or 멤버 변수명)을 씀

    → 반드시 . 을 사용할 것!

    ▷ 멤버 method나 변수 앞에 Public이라는 키워드 있어야 한대

 

✔︎ OO.xx   :   OO Class가 가지는 xx method(또는 변수) 를 사용(호출)한다는 의미 

myPlayer 클래스의 Attack 메서드를 사용한다!

 


 

 

유니티가 제공하는 클래스 :

Vector 클래스..., Debug 클래스(로그 표시 시)

 

 


 

접근수식자

✔︎ 접근 수식자를 생략하면 private으로 간주 !! 

    ▷ 따라서 공개하고 싶은 변수나 method가 있다면 public 수식자를 붙이는 게 굿

✔︎ public : 외부 클래스에서도 접근 가능 (전부 가능)

✔︎ protected : 외부 클래스는 ❌, 이 클래스를 상속받는 파생 클래스(서브클래스) 에서는 접근 가능 

                                                                                      ▶ 파생클래스 → class B : A

✔︎ private : 자기꺼만 ㄱㄴ (내부적으로만)

 

 


 

예제

✔︎ 지금까지 써온 Test2.cs에 Player 클래스 추가하기

✔︎ Player 클래스는 Test 클래스 외부(위쪽?)에 추가하는 것에 주의 !

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player // public : 외부 클래스에서 이 클래스를 불러다 쓸 수 있도록
{
    private int hp = 100; // private : player 혼자만 쓸 수 있는 변수 
    private int power = 50; // 앞에 아무것도 안 붙이면 저절로 private 되므로 안붙여도 됨
    // int hp = 100;
    // int power = 50;


    public void Attack() // 외부 클래스에서 불러다 쓸 수 있음
                         // void : 반환값 X
                         // () : 인자 값 X
    {
    Debug.Log("적에게 " + this.power + " 대미지를 입혔다!!"); // this. : Player클래스의 '인스턴스'를 가리킴
                                           // 걍 this.이 붙으면 "아 자기 클래스(Player)에 있는 멤버 변수구나" 라고 생각
                                           // 사실 근데 이 경우 this. 안 붙여도 문제는 안되지만 this.을 붙임으로써
                                            // 전역변수가 아니라 이 클래스의 멤버변수구나 라는 것을
                                            // 확실하게 알 수 있기에 가독성 높임

                                      // power는 정수 + "대미지를 입혔다"는 str = 결과는 str로 형변환

    }

    public void Damage(int damage) // public : Damage 메소드를 외부클래스(이 경우 Test2)에서 사용 가능
                                   // void : 반환값 X
                                   // (int damage) : 정수형 타입의 인자값 damage
    {
        this.hp -= damage; // this.hp : Player클래스 안의 hp라고 하는 멤버 변수를 호출
                           // 얘도 this. 필요없긴 함

                           // 원래 있던 hp 값에서 damage 만큼 빼주고, 다시 그 값을 hp에 대입 

        Debug.Log("적에게 "+ damage + " 대미지를 입었다..");
        Debug.Log("현재 플레이어의 hp : "+ this.hp);
    }
}

public class Test2 : MonoBehaviour
{
    private void Start()
    {

        Player myPlayer = new Player();  // new로 Player의 인스턴스 생성
                                         // 생성된 인스턴스는 myPlayer의 변수에 넣음

        myPlayer.Attack(); // Player클래스가 갖고 있는 Attack이란 함수를 호출 
        myPlayer.Damage(30); // Player클래스가 갖고 있는 Damage란 함수를 호출
                              // 인자값으로 30을 넣으면서 !! 
    }
}

/* 실행결과 */
// 적에게 50 대미지를 입혔다!!
// 적에게 30 대미지를 입었다..
// 현재 플레이어의 hp : 70

⬇️ 실행 결과 

 

 

 

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

슈팅게임 - #1 플레이어 이동  (0) 2023.07.04
Vector Class 벡터 클래스  (0) 2023.07.03
오류코드 영어로 읽기  (0) 2023.07.03
method (사용자 정의 함수)  (0) 2023.07.03
Unity랑 다른 VS 연결법  (0) 2023.07.02