[SBS게임아카데미] 1인개발 프로그래밍 (C#, 유니티)
[10] C# 클래스의 생성과 소멸, 접근제한자 (SBS게임아카데미 8일차_230723_일)
개발린마케터
2023. 7. 23. 22:40
반응형
[클래스의 생성과 소멸]
- 지난 시간에 이어서 클래스에 대해서 좀 더 알아보았다.
- 클래스를 만들고, 생성하고, 소멸하는 방식에 대한 설명이 추가되었다.
class Player
{
//상태. 멤버 변수. 필드
public string nickName;
public string job;
public int hp;
public int mp;
public int atk;
public int def;
//생성자. 클래스가 생성될 때 호출되는 함수.
//만약 생성자를 클래스에 포함하지 않는다면 암시적으로 호출
//오버로딩 가능. 같은 생성자 이름으로 매개변수의 타입과 갯수를 변화를 줄 수 있음.
//보통 멤버 변수 초기화에 활용.
public Player()
{
Console.WriteLine("기본 생성자: 플레이어 생성!!");
}
public Player(string nickName, string job, int hp, int mp, int atk, int def)
{
this.nickName = nickName;
this.job = job;
this.hp = hp;
this.mp = mp;
this.atk = atk;
this.def = def;
}
//기능. 멤버 함수. 메소드
public void ShowInfo()
{
Console.WriteLine("닉네임:{0}, 직업:{1}, HP:{2}, MP:{3}, ATK:{4}, DEF:{5}", nickName, job, hp, mp, atk, def);
}
//소멸자. 생성한 클래스가 삭제될 때 호출되는 함수.
~Player()
{
Console.WriteLine("{0} 바람과 함께 사라짐...", nickName);
}
}
기본적으로 클래스는 상태와 기능을 정의하는 것으로 시작한다.
거기에 추가로 생성자가 들어가고
소멸할 때 필요한 함수가 있다면 소멸자가 들어가면서 생성한 클래스가 삭제될 때 별도의 함수가 호출된다.
[접근 제한자]
//접근 제한자. 한정자. 접근 제약자
//private 키워드는 클래스 내부에서만 접근 가능.
class TestPrivate
{
//상태
//접근 제한자가 없다면 멤버 변수나 함수는 기본적으로 private
private int age;
private string name;
//기능
private void Test()
{
//private 함수나 변수는 자기 자신 클래스 내부에서만 접근 가능.
age = 10;
name = "프라이빗";
Console.WriteLine("나이:{0}, 이름:{1}", age, name);
}
public void ID()
{
Test();
}
}
public과 달리 private 키워드는 클래스 내에서만 접근이 가능하다.
그래서 기존 예제에서처럼 클래스에서 설정해놓고 메인에서 코드로 불러오려고 하면 불러와지지가 않는다.
[Protected]
//protected. 멤버 변수나 함수가 자기 자신 포함 상속받은 클래스, 파생 클래스, 자식 클래스 내에서만 접근 가능!!!
class TestProtected
{
private float height;
protected int age;
protected string name;
protected void Test()
{
}
}
말 그대로 보호받고 있기 때문에 자신과 상속받은 클래스에서만 접근이 가능하다.
[상속, Child]
//상속. 부모 클래스는 TestProtected, 자식 클래스는 Child.
//Child를 파생 클래스!!! 자식 클래스!!!
class Child : TestProtected
{
void Test2()
{
age = 20;
name = "프로텍티드";
Test();
//height //상속 받은 클래스더라도 private은 못 가져옴
}
}
위의 Protected와 연결해서 보면 Test 함수는 상속되었기 때문에 가져올 수 있지만,
height는 private이기 때문에 상속받은 클래스라고 하더라도 다른 클래스이기 때문에 가져올 수가 없다.
[조건을 통해 연결 상황을 제한]
class Capsule
{
private int age = 10;
public int AGE
{
//조건을 걸어둠으로써 값 반환 및 변경의 상황을 제한. 안정성을 높임
get { return age; } //AGE 변수를 통해서 age 변수의 값을 리턴. 값을 볼 수만 있고 변경은 불가
set
{
if (value == 1) age += value;
else { Console.WriteLine("나이는 1살씩 먹는다..."); }
}
}
}
나이가 한살씩만 먹도록 설정해놓음.
그 외의 상황을 넣게 되면 나이는 1살씩 먹는다라고 출력되도록 제한.
수업에서 좀 더 다양하게 변수나 함수를 넣고, 제한을 걸어서 불러와지는지 테스트해보았다.
내용상으로는 거의 비슷해서 개념적인 내용 중심으로 정리했다.
[강의 내용]
https://www.notion.so/2023-07-23-106afc818f5846c49b435b8d5a3a1e23
반응형