개발/유니티(UNITY)

2.8 클래스 만들기

새벽감성개발자 2023. 9. 8. 19:00
반응형

2.8.1 클래스

  • 클래스를 사용하면 관계가 있는 변수와 메서드를 하나로 합칠 수 있어서 프로젝트를 관리하기 쉽다.
class 클래스명
{
   멤버 변수 선언;
   멤버 메서드 구현;
}
  • 작성한 클래스는 int나 string 등 데이터형으로 사용할 수 있다.
  • 유니티에서 제공하는 클래스도 있다.

 

2.8.2 클래스 작성하기

※ Player 클래스 구현하기

using System.Collections;
using System.Collections.Generic;
using UnityEngine;                  // 유니티가 동작하는데 필요한 기능 제공
using UnityEngine.UIElements;

public class Player
{
    private int hp = 100;
    private int power = 50;

    public void Attack()
    {
        Debug.Log(this.power + " 데미지를 입히다.");
    }

    public void Damage(int damage)
    {
        this.hp -= damage;
        Debug.Log(damage + " 데미지를 입었다.");
        Debug.Log("나의 남은 hp : " + this.hp);
    }
}


public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Player myPlayer = new Player();
        myPlayer.Attack();
        myPlayer.Damage(30);
    }
}

 

위 코드 실행시 결과가 Console에 출력된 모습

 

 

2.8.3 클래스를 사용하는 방법

Player myPlayer = new Player();
위 구문에서 new Player() 을 할 때 마다 새로운 객체가 생김에 유의 해준다.
새로운 객체를 만드는 것은 최초 1회만 하면 된다( 내 캐릭터 기준)
매 순간 새로운 객체를 만든다면, 늘 full hp 의 캐릭터를 기준으로 공격당하거나 공격하게 된다는 점을 유의하자

 

2.8.4 접근 수식자

  • 접근 수식자 : class 앞에 public 이나 private의 키워드
  • public 다른 클래스에서 접근이 가능함
  • protected 같은 클래스와 해당 클래스의 서브클래스에서 접근 가능
  • private 같은 클래스에서만 접근이 가능함
    • 다른 클래스에서 이 변수의 값을 변경 할 수 없도록 하기 위함이다.

접근 수식자를 class 앞에 쓴 경우 접근 가능한 위치

 

2.8.5 this 키워드

  • this 키워드를 사용하면서 자키 클래스의 멤버 변수를 사용할 수 있다.
  • Attack() 메서드 안에 power라는 변수를 새로 선언하고 초기값을 준다면, Debug.Log()에서 그냥 power만 출력하게 된다면, 어떤 변수를 지칭하는지 모르기 때문에 다른 값이 노출 될 우려가 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;                  // 유니티가 동작하는데 필요한 기능 제공
using UnityEngine.UIElements;

public class Player
{
    private int hp = 100;
    private int power = 50;

    public void Attack()
    {
        int power = 9999;
        // Debug.Log(this.power + " 데미지를 입히다.");
        Debug.Log(power + " 데미지를 입히다.");
    }

    public void Damage(int damage)
    {
        this.hp -= damage;
        Debug.Log(damage + " 데미지를 입었다.");
        Debug.Log("나의 남은 hp : " + this.hp);
    }
}


public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Player myPlayer = new Player();
        myPlayer.Attack();
        myPlayer.Damage(30);
    }
}

내가 의도하지 않은 결과 값이 도출됨

※ 여기서 설명한 것은 프로그래밍 단계에서 객제 지향 이라고 한다.

※ 객체 지향의 3대 요소 : 상속, 접근 수식자에 의한 캡슐화, 다형성

※ class test : MonoBehaviour 에서 MonoBehaviour은 게임 오브젝트를 구성하는 기본 기능을 멤버 변수와 멤버 메서드로 준비한 클래스

 

 

반응형

'개발 > 유니티(UNITY)' 카테고리의 다른 글

3장 오브젝트를 배치하고 움직이는 방법  (0) 2023.09.09
2.9 Vector 클래스 사용하기  (0) 2023.09.09
2.7 메서드 만들기  (0) 2023.09.08
2.6 배열 사용하기  (0) 2023.09.08
2.5.5 for 문으로 반복하기  (0) 2023.09.07