[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

 

반응형