ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Unity]유니티 입문하기 6-6(객체, 생성자)
    카테고리 없음 2023. 8. 7. 19:13

    저번 글에서 클래스에 대해 설명하면서 클래스와 객체가 각각 무엇인지에 대해서 배웠습니다.

    이번에는 이렇게 생성한 클래스를 통해 객체를 생성해 보고, 그 객체가 가진 필드와 메서드를 이용해 보겠습니다.


    이제 이 클래스를 통해 객체를 만들어보도록 하겠습니다.

     

    인스턴스화

    C#에서는 객체를 생성하는 것을 객체를 인스턴스화한다고 합니다.

    객체를 인스턴스 할 때에는 new라는 키워드를 사용하는데요, 자세한 방법은 아래와 같습니다.

    //클래스명 객체명 = new 클래스명();
    Human john = new Human();

    좀 더 정확하게 말해보자면, Human 자료형의 john이라는 변수를 만든 뒤, 그 안에 Human을 인스턴스화하여 저장한 것입니다. 즉, new Human(); 부분이 객체를 인스턴스화하는 부분이라는 것이지요.

     

    Human 클래스에 키, 나이, 이름 등의 필드와 먹기, 자기, 걷기 등의 메서드가 전부 정의되어 있으므로, john에도 역시 똑같은 멤버가 정의되어 있습니다.

    객체의 필드와 메서드에는 객체의 이름 뒤에 .구분자를 붙여서 접근할 수 있습니다.

     

    john.name = "John";
    john.age = 20;
    john.height = 170.0;
    john.Eat();
    john.Walk();
    john.Sleep();

    이렇게 john 내의 필드와 메서드에 접근할 수 있습니다.

    . 구분자는 john의 name, john의 Eat() 등  ~의 라고 해석하면 이해하기 쉽습니다.

     

    이를 실제로 활용하게 되면 아래와 같은 형태일 것입니다.

    public class ExampleObject : MonoBehaviour
    {
        void Start()
        {
            Human Alice = new Human();
            
            Alice.name = "alice";
            Debug.Log(Alice.name);
            Alice.walk;
        }
    }
    
    //출력 결과
    
    //alice
    //walk

    이렇게 어떤 객체를 한번 인스턴스화하게 되면, 해당 변수를 통해 여러 번 재사용할 수 있으며, 필드와 메서드에도 자유롭게 접근하며 재사용할 수 있습니다. 이렇게 코드의 재사용성이 좋은 것 또한 객체 지향의 큰 장점이라고 할 수 있습니다.

     

    생성자

    생성자는 객체를 인스턴스화할 때 호출되는 특별한 메서드입니다.

    실은 앞에서 생성자를 이미 사용했는데요, 객체를 인스턴스화하는 부분이었던 new Human();에서 Human()이 바로 생성자입니다.

     

    생성자는 다음과 같이 클래스의 안에 포함되어 메서드의 형태로 정의되게 되는데, 이때 생성자의 이름은 클래스의 이름과 같으며, 반환 타입을 갖지 않는다는 특징이 있습니다.

    class Human
    {
        public Human()
        {
            
        }
    }

    객체를 인스턴스화할 때 생성자를 호출해 실행하게 되는데, 앞에서 예제로 이용했던 코드들 처럼 생성자를 정의하지 않은 클래스의 경우, 객체를 인스턴스화 할 때 위와 같은 기본 생성자를 추가해 컴파일링 하게 됩니다.

     

    생성자는 객체를 생성할 때 호출되기 때문에, 주로 객체를 초기화하는 코드를 생성자의 안에 포함하게 됩니다.

    예를 들어, Human 클래스의 객체를 생성할 때 나이를 초기화하고 싶다면 아래와 같이 코드를 작성하면 됩니다.

    class Human
    {
        public string name;
        public float height;
        public int age;
        //(이하 생략)
        
        public Human(int _age)
        {
            age = _age;
        }
    }

    이렇게 하게 되면 생성자를 호출할 때 정수값을 인수로 넣어주어야 하며, 해당 정수값이 생성될 객체의 age 필드에 저장되게 됩니다.

    아까 생성했던 john을 이용해 예시를 들어봅시다.

    Human john = new Human(20);

     

    만약 Human 클래스에 생성자를 정의한 뒤 위와 같이 인스턴스화를 진행했다면, 별도로 age 필드에 값을 저장해주지 않아도 자동으로 20이라는 값이 저장된 채 생성되게 됩니다.

     

    다만, 이렇게 생성자를 직접 정의하게 되면 인수를 아무것도 요구하지 않는 기본 생성자는 자동으로 생성되지 않기 때문에, 아래와 같이 직접 수동으로 기본 생성자 또한 추가해주어야 합니다.

    class Human
    {
        public string name;
        public float height;
        public int age;
        //(이하 생략)
        
        public Human()
        {
            
        }
        
        public Human(int _age)
        {
            age = _age;
        }
    }

     

    이렇게 객체를 생성하고, 초기화하며, 객체에 포함된 필드와 메서드를 다루는 법에 대해서 알아봤습니다.

Designed by Tistory.