본문 바로가기

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

유니티42_C#_27_더 편리한 델리게이트를 위한 기능들 지금까지 델리게이트 선언과 사용법에 대해 알아보았다. 여기서는 델리게이트를 더 편리하게 사용하기 위해 여러 가지 유용한 기능들을 배워보자. 그 기능들은 다음과 같은 것들이 있다. Anonymous method (익명 메서드 또는 이름없는 메서드) Lambda expression (람다 표현 또는 람다식) Action 과 Func Anomymous method (익명 메서드) 익명메서드는 이름이 없고 메서드의 body(몸체, 내용)만 있는 메서드를 말한다. 이 익명 메서드를 델리게이트에 사용할 수 있다 익명 메서드를 사용하는 것은 델리게이트에 미리 정의된 메서드를 저장하는 것이 아니라 '이름없는'메서드를 만들어서 전달하는 것이다. 메서드명 대신 다음과 같이 delegate 키워드와 함께 익명 메서드의 형태.. 더보기
유니티41_C#_26_Event 이벤트 Event 이벤트 이전 글에서 델리게이트에 대해 알아보았다. 델리게이트는 콜백 기능과 결합하여 화려한 기술을 구사할 수 있다. 이번에는 델리게이트를 이용한 콜백을 더욱 세련되게 구사하는 Event(이벤트)에 대해 알아본다. Event(이벤트)는 앱이나 게임 등에서 흔히 접할 수 있는 기능이다. 그러므로 오늘날 프로그래밍은 이벤트가 주도한다고 할 수 있다. 즉, Event Driven Programming (이벤트 주도 프로그래밍)의 시대라 할 수 있다. 콜백 기능을 떠올려 보면 '주고 받는' 또는 '받고 되돌려 주는' 과정에는 '주는 쪽'과 '받는 쪽'이 있다. 마찬가지로 이벤트 역시 이벤트를 '발생 시키는'쪽과 그 이벤트에 '반응하는 쪽'이 있다. 이벤트를 발생시키는 쪽이 하나라면 반응하는 쪽은 하나 .. 더보기
유니티40_C#_25_Delegate 델리게이트 Delegate(델리게이트) *delegate : (집단의) 대표(자) 델리게이트는 값을 저장하는 참조 타입의 일종이다. 델리게이트는 객체를 참조하지 않고 메서드를 참조한다. 델리게이트 타입의 변수를 만들어서 참조할 메서드를 저장한다. 그러므로 메서드를 전달하고 싶을 때 델리게이트를 사용하면 된다. 즉, 델리게이트는 메서드 전달 대표자라고 할 수 있다. 델리게이트 선언 선언 방법은 다음과 같다. delegate 반환타입 델리게이트명(매개변수); 반환타입과 매개변수는 델리게이트에 저장할 메서드의 반환타입, 매개변수와 일치해야 한다. 델리게이트 선언의 예는 다음과 같다. 어떻게 작동하는 지 예를 만들어서 확인해보자. 위 코드는 Sample( )메서드를 델리게이트에 넣어서 호출하는 예이다. 5번 줄에서 델리게.. 더보기
유니티39_C#_24_Exception handling 예외 처리 예외(Exception) 컴퓨터에서 일어나는 에러는 2가지가 있다. 첫째는 코드를 작성할 때 발생하는 컴파일 에러(compile error) 둘째는 프로그램 실행 중에 발생하는 런타임 에러(run-time error) 첫째 경우는 코드를 입력하는 사람이 잘못 입력하면 편집기 등에서 문제가 있는 부분을 대부분 알려주므로 어디가 잘못인지 파악하는 것이 어렵지는 않다. 둘째 경우는 프로그램을 실행(run)할 때 생기는 런타임 에러인데 이 경우도 컴퓨터가 예상하지 못한 에러와 프로그램 내에서 예상할 수 있는 에러로 나눌 수 있다. 런타임 중 프로그램 내에서 일어나는 예상할 수 있는 에러를 예외(Exception)이라고 한다. C#에는 이런 Exception(예외)이 발생하면 프로그램을 멈추고 그것을 처리하는 체.. 더보기
유니티38_C#_23_FileStream 파일스트림 스크립트에서 변수에 저장하는 데이터는 프로그램을 종료하면 사라진다. 컴퓨터의 메모리에 임시로 저장했기 때문이다. 전원이 꺼지더라도 데이터를 유지하려면 파일(file) 형태로 하드디스크 등에 저장하면 된다. 게임을 하다가 자신의 기록이 저장되는 경우나 게임 도중에 저장(save)했다가 저장했던 내용을 다시 불러오는(load) 과정도 모두 변수에 저장했던 내용을 파일로 변환해서 디스크에 저장해 두었기 때문에 가능하다. C#에서는 이런 작업을 위해 FileStream이라는 클래스를 만들었다. *stream : 흐름 클래스 FileStream은 네임스페이스 System.IO 안에 있다. 디스크에 파일 생성하기 FileStream클래스를 이용하여 파일을 생성한다. 바탕화면에 test.txt 파일을 만들어 본다. .. 더보기
유니티37_C#_22_Generic 제네릭 Generic(제네릭) 앞 글 마지막 부분에 컬렉션의 단점(boxing, unboxing)에 대해 설명하고 그것을 극복하기 위해 Generic을 만들었다고 했다. *generic : 포괄적인, 총칭의 Generic은 '타입(Type)을 미리 정하지 않고(포괄적인 상태로 해두고), 그것을 사용할 시점에 타입을 정의'하는 것을 말한다. 12번줄에 클래스를 만들고 int타입의 필드를 만들었다. 7,8번줄에 이 클래스로 객체를 만들고 data필드에 int값을 저장했다. 그런데 data에 다시 float타입의 값을 넣어야 한다면 다음과 같이 필드를 추가하거나, 새 클래스를 만들어야 한다. 위와 같은 상황을 해결할 수 있는 것이 Generic(제네릭)이다. 제네릭은 타입을 미리 정하지 않은 상태에서 나중에 타입을 .. 더보기
유니티36_C#_21_Collection 컬렉션 Collection(컬렉션) collection은 배열(array)의 단점을 개선하기 위해 만들어졌다. array(배열)는 지정한 배열의 크기를 변경할 수 없고, 배열을 추가하거나 삭제하는 경우 인덱스를 변경해야 하는 불편함이 있다. System.Collections 배열의 단점을 보완하기 위해 System.Collections라는 네임스페이스 안에 다양한 객체의 컬렉션을 정의한 클래스와 인터페이스들이 있다. 중요한 몇 가지 컬렉션들을 살펴본다. collection(컬렉션)은 '수집, 더미, 모아놓은것'이라는 뜻이다. 1. ArrayList 클래스 ArrayList는 크기를 지정할 필요가 없다. ArrayList는 네임스페이스에 포함되어 있으므로 선언하려면 using 키워드로 표시해야 한다. # Add(.. 더보기
유니티35_C#_20_static 스태틱 static (스태틱; 정적인, 고정된) static은 객체를 생성하지 않고도 멤버에 접근할 수 있게 만드는 키워드이다. class(클래스), field(필드), method(메서드) 등에 붙여서 static 멤버로 만들 수 있다. 정상적인 방법으로 클래스의 필드(변수)에 접근하는 예는 아래와 같다. TestClass에 number라는 필드(변수)가 정의되어 있다. 이 필드에 접근하려면 TestClass 타입의 변수(testObject)를 정의하고 new키워드로 새 객체를 만들어 저장한다. 그리고 객체를 가진 이 변수를 통해서 number에 접근해서 다른 값을 입력할 수 있다. 이번에는 필드(number)를 static으로 지정하면 다음과 같이 접근할 수 있다. 필드(변수)를 static으로 지정하면 '.. 더보기