본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby/유니티unity로 게임 만들기

유니티15_C#_08_객체

객체 만들기 (Object Instantiation)

 

앞 글에서 객체를 만드는 틀인 class(클래스)만드는 법을 배웠다.

이제 만들어 놓은 클래스 MainCharacter를 이용해서 객체(오브젝트)를 만들어 본다.

 

클래스로 객체를 만들었을 때 클래스의 '인스턴스(instance)'를 만들었다고 부른다.

즉, 객체를 만드는 것은 '클래스를 이용하여 instantiating(예시 : 예를 보여줌)'한 것이다.

한마디로 객체는 클래스의 인스턴스(instance)이다.

그러므로 객체와 인스턴스를 같은 뜻으로 사용할 수 있다.

 

ObjectExample 스크립트를 새로 만들고 MainCharacter클래스를 이용해서 객체(인스턴스)를 만들어 보자.

 

먼저 15~23번 줄에 MainCharacter 클래스를 간단하게 필드와 메서드 각각 1개씩만 작성한다.

 

7번줄

Tom 이라는 객체를 만들었다.

객체 만드는 방법은 다음과 같다.

 

클래스명 객체명 = new 클래스명( )

 

MainCharacter Tom은 변수를 정의한 것이다.

즉, MainCharacter 타입의 Tom이라는 변수이다.

객체를 생성하면 클래스명이 타입명이 되고 객체명은 변수명이 된다.

결국 객체도 데이터를 저장할 수 있는 변수의 한 종류이다.

 

클래스로 객체를 생성할 때new 키워드를 사용한다.

 

9번줄

객체가 만들어지면 클래스에 정의된 모든 필드와 매서드에 접근할 수 있고 여러 번 다시 사용할 수 있다.

이것이 객체 지향 언어의 특징이자 장점이다.

 

각 필드와 매서드에 접근할 때는 객체명 다음에 점(.)을 찍어서 구분한다.

Tom.name = "Tom Cat" 의 뜻은 객체Tom의 name필드에 문자열 Tom Cat을 저장하라는 뜻이다.

 

이렇게 보면 필드도 변수와 같은 역할을 한다는 것을 알 수 있다.

결국 필드도 변수의 한 종류.

 

11번줄

Tom객체에서 클래스의 메서드에 접근하는 것도 필드와 같은 방법으로 한다.

 

유니티로 실행하면 콘솔창에 다음과 같이 보여준다.

 

 

 

생성자(Constructor)

*constructor : 건설자, 제작자

 

생성자는 객체를 만들 때 반드시 초기화 하고 싶은 필드호출하고 싶은 메서드가 있는 경우에 사용하는 메서드 이다.

즉, 객체 생성용 특별 메서드라고 할 수 있다.

 

예를 들어 객체를 만들 때 '이름' , '나이' , '능력' 필드의 초기값을 반드시 넣어서 객체를 만들어야 하는 경우 생성자를 이용한다.

 

앞 글의 메서드 예제에서 인수를 전달하여 메서드를 호출했다.

SquareNumber(2)

인수를 전달할 수 있었던 이유는 메서드가 미리 만들어져 있었고, 또 인수를 받아서 저장할 수 있는 매개변수가 정의되어 있었기 때문이다.

int SquareNumber( int number ) {  }

 

그런데 클래스로 객체를 만들 때 초기값을 전달하기 위한 인수는 사용할 수 없다.

예를 들어 이름이 Tom Cat , 나이가 28인 객체 Tom을 만들어야 한다면 다음과 같은 코드가 되어야 한다.

 

MainCharacter Tom = new MainCharacter("Tom Cat", 28)

 

그런데 Tom Cat , 28 두 인수를 받기 위한 매개변수가 정의된 메서드를 만들지 않았기 때문에 위와 같은 객체를 만들 수는 없다.

 

#기본 생성자 (Default Constructor)

위에서 Tom이라는 객체를 만들 때 new MainCharacter( )를 사용했다.

new 키워드와 함께 클래스명과 괄호를 사용했는데 이것은 메서드를 나타내는 모양이다.

즉, MainCharacter( )는 객체를 만들 때 호출하는 메서드이며 특별히 생성자라고 부른다.

 

MainCharacter( ) 처럼 매개변수가 없는 생성자기본 생성자라고 하며 클래스가 만들어지면 자동으로 만들어진다.

그래서 객체를 생성할 때 MainCharacter( ) 메서드를 호출해서 객체를 만들 수 있었던 것이다.

 

#생성자 만들기

그러면 필드나 메서드를 반드시 넣어서 객체를 생성하도록 하려면 생성자 메서드를 어떻게 정의해야 하는지 알아본다.

예를 들어 이름 필드, 나이 필드를 입력해서 객체를 만들 수 있도록 매개변수가 있는 생성자를 만들면 다음과 같다.

 

ConstructorExample.cs 파일을 만든 후 MainCharacter 클래스를 간단히 새로 작성했다.

 

17~21번줄

MainCharacter 클래스의 객체를 만들 때 name과 age 필드 2개를 인수로 반드시 넣어야 하는 생성자 메서드를 만들었다. 

생성자 메서드명은 클래스명을 사용하고 매개변수명은 필드명 앞에 밑줄( _ )을 넣는다.

매개변수명은 필드명과 혼동하지 않기 위해 간단히 필드명 앞에 밑줄을 넣어 구분했지만 다른 형태로 만들어도 된다.

주의: 생성자 메서드는 일반 메서드와 다르게 반환타입이 없다.

 

7번줄

Start()메서드가 실행되면 새 객체를 만들기 위해 MainCharacter( )메서드를 호출한다.

이 메서드가 호출되면 인수가 2개 있으므로 클래스 안에 정의된 생성자 메서드 중에서 일치하는 생성자 메서드에게 인수 값을 전달한다.

인수를 전달받은 생성자 메서드는 매개변수에 저장한 후 각각 name필드와 age필드에 입력하여 Tom이라는 객체를 만들게 된다.

이렇게 만들어진 객체 Tom은 name 필드 값은 Tom Cat , age는 28의 값을 가지게 된다.

 

생성자는 필요에 따라 여러 개 정의할 수 있다.

필드와 메서드 중에서 필요한 것만 매개변수로 정의하여 여러 종류의 생성자 메서드를 만들 수 있다.

 

그런데 만약 생성자가 만들어져 있는 상태에서 매개변수가 없는, 즉 초기화 하지 않은 객체도 만들수 있게 하려면 아래와 같이 기본 생성자를 정의해야 한다. 왜냐하면 다른 생성자가 만들어져 있으면 기본생성자가 자동으로 만들어지지 않기 때문이다.

 

18~21번줄

기본생성자를 만들었다.

 

8번줄

이제 기본 생성자를 사용해서 Merry라는 객체를 만들 수 있다.

 

 

끝.

Wraven...