[C# 강의 13화] !중요! 맴버함수의 기본개념
출처 : https://www.youtube.com/watch?v=VmWXZCu1z6k&list=PL4SIC1d_ab-Y-bBKojxhtFWwNpawMM1h5&index=13
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// static
//몬스터가 100마리 죽으면 뭔가를 하기로 했다.
class Monster
{
static int MonsterDeathCount;
public void Death()
{
MonsterDeathCount += 1;
}
}
class Player
{
// 일반적인 멤버변수와 다른점
// static을 붙이게 되면
// 이런 경우 정적 멤버변수라고 합니다.
// 정적 멤버변수는 일반적인 멤버변수와 다르게
// 객체화를 하지 않고도 사용할 수 있다
// 그 사용법이 클래스의 이름만으로 사용할 수가 있다.
public static int PlayerCount = 0;
public int AT = 10;
public int HP = 100;
// 정적 멤버변수는 클래스 내부 안에서는 사용이 가능하다.
public void Setting(int _AT, int _HP)
{
// 왜냐하면 이건 공통
PlayerCount = 100;
AT = _AT;
HP = _HP;
}
}
namespace Static
{
class Program
{
static void Main(string[] args)
{
// 플레이어를 3번 new 하게 되면
// 플레이어가 3개 생긴것이고
// 그 3개의 플레이어는 각각의 HP를 가지고 있다.
Player NewPlayer1 = new Player();
Player.PlayerCount += 1;
Player NewPlayer2 = new Player();
Player.PlayerCount += 2;
Player NewPlayer3 = new Player();
Player.PlayerCount += 3;
// 객체들을 토오해서 정적 멤버변수를 사용할 수는 없다.
// NewPlayer3.PlayerCount
// NewPlayer3.PlayerCount를 가져올 수도 있지도 않다.
// 이런식으로 객체화를 전혀 하지 않고 사용할 수 있는 녀석.
// 정적 멤버변수라고 부르고 이런 정적 멤버변수는
// 데이터 영역에 들어가게 된다
// 이 멤버변수라고 하는 녀석은 각각 존재한다.
// 정적 멤버변수는
// 어떤 크랠스가 공유하고 싶은 값
// 몬스터 클래스라면
// 현재 존재하는 모든 몬스터의 수
// 객체를 아무리 만들어도
// 정적 멤버는 그 객체와의 관련성은
// 객체 내부에서 사용할 수 있다 뿐이지
// 객체의 개수만큼 만들어지는 것은 아니다.
// 즉 모든 객체가 공유하는 하나의 변수가 되어준다
NewPlayer1.HP = 1010000;
NewPlayer1.Setting(10, 100);
NewPlayer1.Setting(20, 50);
NewPlayer1.Setting(100, 500);
Monster NewMonster1 = new Monster();
Monster NewMonster2 = new Monster();
Monster NewMonster3 = new Monster();
// 모든 객체가 값을 공유할 필요가 있는 데이터를 정의하는데 사용한다.
NewMonster1.Death();
NewMonster2.Death();
NewMonster3.Death();
}
}
}
static
- static이 붙지 않은 멤버 변수들은 멤버 변수라고 불리며 이녀석들은 객체 하나하나가 자신의 것을 가진다.
- 정적 멤버 변수는 객체에 귀속된 것이 아니라 클래스 그 자체에 귀속이 되고 데이터 영역에 메모리가 올라간다.
- ex) 게임내에서 하나만 존재하며 일반적으로 클래스 내부에서 모든 객체가 공유하고 싶은 변수를 만들때 사용한다.
[C# 강의 14화] static 함수 & static class
출처 : https://www.youtube.com/watch?v=OP0Io2YpyWQ&list=PL4SIC1d_ab-Y-bBKojxhtFWwNpawMM1h5&index=14
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class Player
{
// 객체화를 하지 않아도 플레이어의 내부는 내부이므로
// 접근제한 지정자에 영향을 받지 않는다.
public static void PVP(Player _Left, Player _Right)
{
_Left.HP -= _Right.AT;
_Right.HP -= _Left.AT;
}
// public static void PVE(Player _Left, Monster _Right)
// {
// _Left.HP -= _Right.AT;
// _Right.HP -= _Left.AT;
// }
private int HP = 100;
private int AT = 100;
public void Damage(int _Damage)
{
HP -= 100;
}
public void Damage(Player _Other)
{
// 자기 자신의 레퍼런스는 자신의 내부에서 모두 public인 상태다
HP -= 100;
}
}
public class Monster
{
// 사용 할 수 없다!
// public static void PVP(Player _Left, Player _Right)
// {
// _Left.HP -= _Right.AT;
// _Right.HP -= _Left.AT;
// }
}
namespace StaticFunc
{
class Program
{
// 이녀석도 클래스에 속한 정적 함수이다.
// 어떤 클래스에 존재하는 Main의 이름을 가진
// 정적멤버함수에서부터 C# 프로그램은 시작한다.
static void Main(string[] args)
{
// F12를 누르면 그 클래스로 타고 들어가볼 수 있다.
// 타고 들어간다는 것은 그 클래스의 세부 내용을 기록된 곳으로 간다.
Console.WriteLine("static 함수 배우고 있어요");
// Player NewPlayer1 = new Player();
// Player NewPlayer2 = new Player();
// 마찬가지로 그 클래스에 속하지만
// 객체를 굳이 만들지 않고도 사용할 수 있는
// 함수를 정적 멤버 함수라고 한다.
// Player.PVP(NewPlayer1, NewPlayer2);
// NewPlayer1.Damage(100);
// public인 멤버변수라고 이렇게 사용해야 한다.
// NewPlayer.
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// 정적 클래스란
// 정적 멤버변수와 정적 멤버함수만을 가질수 있는 클래스이다.
static class StClass
{
// 일반 멤버변수는 선언만해도 오류가 나게 된다.
// int TEST = 100;
}
class Player
{
static int number = 100;
// 함수의 위치는 문법적으로 어디에 있건 상관 없다.
static void Main(string[] args)
{
Console.WriteLine("Console.WriteLine은 정적 멤버 함수입니다.");
}
}
namespace StaticClass
{
class Program
{
static void Main(string[] args)
{
}
}
}
'C# 개인 공부 기록용 > 어소트락 게임아카데미 - C# 무료강의[2019] 총48강' 카테고리의 다른 글
[C# 강의 17화] struct & enum (0) | 2022.10.13 |
---|---|
[C# 강의 15화] !중요! this 레퍼런스 (0) | 2022.07.05 |
[C# 강의 12화] !중요! 레퍼런스의 메모리 구조 및 처리 개념 (0) | 2022.07.04 |
[C# 강의 11화] !중요! 값형의 메모리 구조 및 처리 개념 (0) | 2022.07.04 |
[C# 강의 10화]실행되는 함수의 메모리 구조 (0) | 2022.07.04 |