[Unity C#] 클래스 - 1

YongSeok·2022년 7월 11일
0

📌 객체 지향 프로그래밍

  • 객체를 기반으로 하는 프로그래밍 (OOP, Object Oriented Programming)
    • 프로그램을 여러 개의 독립된 객체 단위로 분할해 각각의 객체들이 메시지를 주고받고, 데이터를 처리할 수 있다
    • 프로그램 개발을 유연하게 할 수 있어 게임과 같이 유지/보수가 많고, 대규모의 소프트웨어 개발에 많이 사용된다.

  • 객체란?
    • 세상의 모든 것을 지칭 (사람, 자동차 등)
    • 추상적인 개념 (객채의 특징만 뽑아서 사용 - 속성과 기능으로 구분)

    • 자동차
      • 속성 : 바퀴(개수, 크기, 재징 등), 핸들(반지름, 색상,...), 기어, 브레이크, 가속페달 등
      • 기능 : 전진, 후진, 방향, 전환, 감속 등

✏️ 클래스 (Class)

  • 클래스란?
    • 객체를 표현하는 속성(변수)과 기능(메소드)을 하나의 집합으로 묶는 단위\
  • 타코야끼를 만들 때
    • 타코야끼 틀에 반죽 물과 문어를 넣고 타지 않게 돌리며 굽는다.
      • 타코야끼 틀 = 클래스
      • 만들어진 타코야끼 = 객체
    • 클래스의 정의
    public class 클래스이름
    {
    	//변수(데이터)와 메소드
    }
  • 클래스의 예
    • 아래 정보를 기반으로 하는 플레이어 캐릭터 클래스 작성
      • 속성 (변수, 데이터) : 플레이어 아이디, 체력
      • 기능 (메소드) : 데미지를 입어 체력 감소
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    private string  ID = "김철수";
    private int     currentHP = 1000;

    public void TakeDamage(int damage)
    {
        if ( currentHP > damage)
        {
            currentHP -= damage;
        }
    }
}

// MonoBehaviour : 부모 클래스
// ID, currentHP : 멤버 변수(필드)
// TakeDamage()  : 멤버 함수(메소드)

✏️ 멤버 변수, 멤버 함수

  • 멤버 변수 (필드, Field)
    • 클래스에 소속된 변수로 클래스의 속성을 저장, 사용하기 위한 용도
    • 같은 클래스에 소속되어 있는 메소드는 이 변수를 조건 없이 사용 가능
    • 클래스 중괄호 {} 내부, 메소드 정의 외부에 선언한다
      Tip. 메소드 내부에 선언된 변수는 멤버 변수가 아닌 지역 변수이므로 메소드가 종료되면 삭제된다

  • 멤버 함수 (메소드, Method)
    • 클래스에 소속된 메소드로 클래스의 기능을 정의하고, 사용하기 위한 용도
    • 같은 클래스에 소속되어 있는 메소드끼리는 조건 없이 호출 가능
    • 클래스 중괄호 {} 내부, 메소드 정의 외부에 선언하며 다른 메소드 정의 내부에 메소드를 정의하지 않도록 주의

✏️ 접근 지정자

  • 해당 멤버의 접근성을 설정하는 키워드
  • 멤버 변수, 멤버 함수의 앞에 작성 ( 지역 변수는 사용 불가능)
  • private, public, protected
    • public : 외부에서 클래스를 통해 접근할 수 있다.
    • private : 외부에서 접근할 수 없으며, 하위 클래스에서도 접근할 수 없다.
    • protected : 외부에서 접근할 수 없으며, 하위 클래스에서는 접근할 수 있다.
  • private는 default 지정자로 접근 지정자를 표기하지 않으면 private로 자동 설정

Tip. 멤버 변수의 경우 특별한 경우에만 public을 사용하고, 그렇지 않을 경우는 private, protected를 지향

  • 접근 지정자의 사용 이유
    • 객체 지향 프로그래밍을 할 때, 클래스에서 최소한의 기능만을 외부로 노출하고, 나머지는 감추는 것을 지향한다. (이를 클래스의 은닉성 이라고 함)
    • 현재 클래스 내부에서만 사용하는 기능의 경우 외부로 노출할 필요가 없다.

    • 예를 들어, TV를 사용할 때,
    • 리모컨을 조작해 TV 채널을 돌리고 즐겁게 TV를 시청하는 것이 사용자의 일이고,
    • 실제로 화면에 어떻게 색이 표현되고, 소리가 어떤 원리로 나는지 몰라도 된다.
    • 그래서 클래스 내에 있는 각 멤버(변수, 메소드)를 필요에 따라 외부에서 사용 가능하도록 하거나 사용할 수 없도록 설정하는 것이 "접근 지정자" 이다

✏️ 클래스의 생상과 사용

  • 클래스의 이용

    • 클래스도 변수 데이터로 활용 가능 (int, float 등과 동일)
    • 멤버 변수, 지역 변수, 매개 변수, 반환 값 등에 모두 사용 가능

      ☝Enemy 클래스에서 Player 타입의 멤버 변수 player를 선언하고, AttackToTarget의 매개변수로 Player타입의 target을 선언

  • 클래스 객체 생성

    • 클래스는 변수와는 다르게 선언만으로는 사용할 수 없다.
    • new 키워드를 사용해 생성해야 사용 가능
    • . 을 사용해 해당 클래스의 멤버(변수, 메소드) 에 접근 가능

    ☝ new 키워드로 메모리에 할당된 Player의 인스턴스(instance)가 변수 player01에 채워진다. palyer01의 public 멤버 변수, 메소드를 사용할 수 있다.


  • null

    • 사전적 의미는 존재하지 않는다는 뜻
    • 초기화 하지 않은 클래스의 default 값
    • 가장 빈번하게 Exception을 일으키는 원인
      • Exception : 실행 중에 발생하는 오류

0개의 댓글