●/섹션 4. 객체지향 여행
05.static (일반함수 VS static(정적)함수)
한국 /프랑스 웹툰 리뷰
2021. 7. 12. 10:08
728x90
using System;
namespace Csharp
{
class Knight
{
//static은 변수뿐만 아니라 나중에 함수에도 붙일 수 있다!
static public int counter = 1; //오로지 1개만 존재
public int id;
public int hp;
public int attack;
//< 일반함수 vs static(정적)함수 >
//static이 아닌 일반함수는, Knight knight = new Knight();처럼 Knight클래스 자체를 인스턴스화 한 변수 knight에 종속된다.
public void Test1()
{
}
//static으로 만들면, class Knight에 종속된다. 그러므로 유일성이 보장된다.
static public void Test2()
{
//class Knight에 종속되는 공용함수
}
}
}
using System;
namespace Csharp
{
class Knight
{
//static은 변수뿐만 아니라 나중에 함수에도 붙일 수 있다!
static public int counter = 1; //오로지 1개만 존재
public int id;
public int hp;
public int attack;
//< 일반함수 vs static(정적)함수 >
//static이 아닌 일반함수는, Knight knight = new Knight();처럼 Knight클래스 자체를 인스턴스화 한 변수 knight에 종속된다.
public void Test1()
{
}
//static으로 만들면, class Knight에 종속된다. 그러므로 유일성이 보장된다.
static public void Test2()
{
//class Knight에 종속되는 공용함수
}
static public void Test3()
{
//id = 23; 불가능 (빨간줄이 뜬다)
//hp = 100; 불가능 (빨간줄이 뜬다)
//공용함수라는 것은, 각각 개개인의 정보에 접근한다는 것은 사실 말이 안되는 것임.
//id라는 변수의 값이 모든 Knight 객체마다 다 다를수 있는데 id를 어떻게 알고 어떤 애의 객체를 참조해야 할지 알고 접근을 하겠음?
}
static public void Test4()
{
//static함수 안에서는 static변수만 사용 가능
counter++;
}
static public Knight CreateKnight()
{
//오해할까봐 그러는데, static을 붙였다고 해서, 일반 인스턴스에 접근 못하는 건 아니다..!
//hp나 attack에 접근하기 위해서 인스턴스화한 새로운 객체를 생성했다.
Knight knight = new Knight();
knight.hp = 100;
knight.attack = 1;
return knight;
}
public void Move()
{
Console.WriteLine("Knight Move");
}
public void Attack()
{
Console.WriteLine("Knight Attack");
}
}
class Program
{
static void Main(string[] args)
{
//static함수 같은 경우, class Knight에 종속되어 있기 때문에,
//class Knight를 통해 바로 호출할 수 있다.
Knight.CreateKnight();
//public void Move(), public void Attack() 같이 인스턴스화한 객체에 종속적인 함수들은
//class Knight로 호출할 수 없다.
//Knight.Move(); <--------- 불가능 (빨간줄이 뜬다)
//static 함수
Knight knight100 = Knight.CreateKnight();
//일반 함수
knight100.Move();
//일반 함수
Knight knight101 = new Knight();
knight101.Move();
//얘도 대표적인 static 함수 (왜냐하면 class Console로 바로 접근해서 함수 WriteLine를 바로 사용하기 때문)(인스턴스화한 객체 없이)
Console.WriteLine();
//static 함수가 아닌 일반 함수 (왜냐하면 class Random으로 바로 접근하는 것이 아닌, 인스턴스화한 객체를 새로 만들어서 함수 Next를 불러오기 때문)
Random rand = new Random();
rand.Next();
}
}
}
728x90