여기서는 클래스를 이용하는 데 기본이 되는 인스턴스란 무엇인가를 알아봅시다.
클래스를 사용해 보자
——————-
제 1장에서는 오브젝트 지향의 메리트는 “클래스 속의 프로그램을 몰라도 사용방법만 이해하면 그 기능을 이용할 수 있다”고 설명했습니다. 그 예로 “쉐프에게 재료를 넘기고 조리의 방법을 지시하는 것으로 요리를 만들 수 있다”고 설명했습니다. 여기서 다시 쉐프의 예로 클래스를 이용하는 순서에 대해서 설명합니다.
용어–
클래스의 멤버
클래스는 프로퍼티와 메소드만이 아니라 필드, 컨스트럭터, 이벤트등의 조합으로도 구성됩니다. 그리고, 이것들 모두를 모아 클래스 멤버라 부릅니다. 또 필드와 컨스트럭터에 대해서는 5장에서 설명합니다.
클래스를 사용하는데에는 다음 3개의 포인트가 중요합니다.
1) 인스턴스화 2)프로퍼티의 설정과 참조 3)메소드의 실행
우선 클래스를 사용하려면 인스턴스라는 실체를 생성할 필요가 있습니다. 이것을 인스턴스화라 합니다. 클래스는 어디까지나 설계도이므로 인스턴스화에 의해 사용할 수 있게 됩니다. 쉐프라는 직함으로는 요리를 만들 수 없으며 쉐프를 고용하는(인스턴스화) 것으로 요리를 만들 수 있게 됩니다.
또, 클래스의 특징은 인스턴스마다 데이터를 가지고 있다는 것입니다. 클래스가 가진 데이터를 프로퍼티라 부릅니다. 쉐프 클래스를 2명 인스턴스화 하면 2종류의 다른 재료를 프로퍼티로 설정할 수 있습니다.
마지막으로 데이터를 조작하는 클래스의 명령인 메소드를 실행합니다. 쉐프의 예를 들자면 고기를 가진 쉐프에 “구워주세요”라고 명령하고, 채소를 가진 쉐프에게 “스프를 만들어주세요”라고 명령합니다.
이렇게 클래스를 이용하려면 “쉐프를 채용해(인스턴스화) 개별의 재료를 건네고(프로퍼티), 지시를 내리는(메소드)” 순서로 실행합니다. 그러면 실제 게임에서 클래스를 인스턴스화 해보겠습니다.
(중략)
코드 해설
여기서 난수를 발생할 수 있는 Random클래스를 사용합니다. 난수란 말 그대로 제멋대로 수를 내는 것입니다.
1] Random^ randomDice;
Random 클래스를 randomDice란 이름의 변수로 선언합니다. 이렇게 클래스의 변수를 선언할 때, 다음의 구문을 사용합니다.
클래스명^ 변수명;
int형등의 기본형 변수와 다르게 클래스 명 뒤에 “^”이라는 매니지코드의 클래스 인스턴스 영역을 나타내는 기호를 습니다. 이기호는 캐럿 또는 햇기호라 불립니다. 이렇게 인스턴스를 격납하는 변수를 선언할 때 이 기호를 사용합니다.
2] randomDice = gcnew Random();
클래스를 사용하려면 인스턴스화라는 초기화가 필요합니다. gcnew라는 키워드를 사용해 인스턴스화 하는 클래스의 이름을 지정합니다. 클래스에 따라서는 이름 뒤에 인수를 지정할 수 있습니다. 여기서는 Random 클래스를 지정하고 있기 때문에 Random 클래스라는 설게도에 근거해 randomDice가 인스턴스화됩니다.
변수명 = gcnew 클래스명();
3] int diceNumber;
diceNumber = randomDice->Next(1,7);
주사위의 눈을 격납하기위해 int형 diceNumber란 변수를 선언하고 Random 클래스의 Next메소드를 부르고 있습니다. 이 Next메소드에는 1과 1이라는 인수를 부여합니다. 그 결과 1이상 7미만(1~6)의 난수가 발생되어 diceNumber에 격납됩니다. 여기서는 메소드로부터 게산된 결과를 얻고있다는 걸 주목해 주세요. 이것을 메소드의 반환값이라고 합니다. 여기서는 Next메소드가 1~6의 숫자를 반환값으로 생성합니다.
4] Debug….
(중략)
힌트
(중략)
치형과 참조형
————
.NET Framework의 매니지코드에서는 변수의 형에 치형과 참조형의 2종류가 있습니다. int, bool, float와 같은 기본형과 헬프를 볼 대에 “구조체: value class”라 정의 되어있는 형은 치형입니다. 이것 이외의 클래스 (Random과 String등)의 “클래스:ref class”라 정의 되어있는 형은 참조형입니다. 또, 치형과 참조형에스는 몇개의 다른 점이 있습니다. 치형은 그 변수의 값을 직접 격납하는 것에 반해, 참조형은 실체로의 참조를 격납합니다. 치형은 초기화에 초기값이 설정됩니다만, 참조형은 초기화시에 Null이 설정됩니다. 또, 대입할 때 치형은 그대로 값이 대입됩니다만, 참조형은 값이 아니 참조 정보(어드레스)가 대입됩니다. 참조형의 변수를 사용할 경우에는 이런 것을 이해해둘 필요가 있습니다.







댓글 남기기