본문 바로가기

분류 전체보기

(392)
[5. 게임 규칙 - 5] 예외 규칙과 세부 규칙 예외 규칙과 세부 규칙 규칙의 검토와 수정 과정에서 해당 규칙으로 처리할 수 없는 특별한 경우는 이를 처리하기 위해 예외 규칙과 세부 규칙을 작성해야 한다. 두 규칙 모두 특별한 경우를 처리하는 것은 맞지만, 처리하는 방법이 다르다. 예외 규칙은, 일반적인 규칙이 있고, 그 일반적인 규칙으로 처리할 수 없는 것들만 따로 처리하는 것을 말한다. 세부 규칙은 일반적인 규칙을 따로 두지 않고, 각각의 특별한 경우들을 하나씩 처리한다. 예외 규칙은, 한 규칙(일반적인 규칙)을 통해 대부분의 경우를 처리할 수 있지만, 특정한 경우는 다른 규칙을 적용해야 하는 경우에 만들게 된다. 즉, 규칙과 관련한 내용 중에 상당 부분을 '일반화'할 수 있는 경우에 예외 규칙을 만든다. 예외 규칙은 완성된 규칙을 가지고 게임이 ..
[Java] 07.03 - 자바의 이름 규칙(Naming Rule) 들어가며 이번에는 자바 프로그램을 작성하면서 일반적으로 적용하는 '명명 규칙'을 소개하고자 한다. 지금 소개하는 보편적인 규칙을 따르면 자신이 만든 코드를 다른 이들에게 보여줄 때에도, 반대로 다른 이들의 코드를 볼 때에도 도움이 된다. 클래스의 이름 규칙 클래스의 이름을 지을 때 가장 보편적으로 선택하는 이름 규칙을 가리켜 'Camel Case Model'이라 한다. 그리고 이 모델의 기본 규칙은 다음과 같다. 클래스 이름의 첫 문자는 대문자로 시작한다. 둘 이상의 단어가 묶여서 하나의 이름을 이룰 때, 새로 시작하는 단어는 대문자로 한다. 예를 들어서 Circle이라는 단어와 Point라는 단어를 묶어서 Camel Case 모델로 클래스의 이름을 정의하면 CirclePoint가 된다. Circle +..
[Java] 07.02 - 생성자(Constructor)와 String 클래스의 소개 들어가며 지금까지 BankAccount 클래스의 정의를 통해서 클래스에 대한 여러 가지를 이해하고 관찰하였다. 그러나 이 클래스에는 몇 가지 문제가 있다. 그중 하나는 인스턴스를 생성하는 과정에서 적절한 초기화를 진행하지 못했다는 점이다. String 클래스에 대한 첫 소개 다음 이야기의 전개를 위해 문자열 처리에 대한 기술 몇 가지를 소개하고자 한다. 문자열은 큰따옴표로 묶어서 표현함을 이미 알고 있다. 그런데 이러한 문자열은 다음과 같이 참조변수를 선언해서 참조할 수도 있다. String myJava = "Java"; // String형 참조변수의 문자열 참조 위의 상황은 참조변수 myJava가 문자열 "Java"를 가리키는 상황이다. 지금은 이정도의 이해면 충분하다. 사실 String은 자바에서 제..
[5. 게임 규칙 - 4] 규칙의 검토 및 개선 규칙의 검토 및 개선 작성된 규칙들은 게임을 동작시키는 원리로 작용하기 때문에 논리적이어야 하며, 최대한 빈틈이 없어야 한다. 따라서 규칙들을 검토하고 발전시키는 작업도 병행해야 하며, 이를 통해 규칙의 완성도를 올리고 내용을 풍성하게 만들어야 한다. 기획자마다 각자의 논리 검토 방법이 있을 수 있으며, 여기서는 저자가 논리를 검토할 때 사용하는 '육하원칙을 이용한 논리 검토 방법'을 정리하여 소개한다. 이 방법은 규칙을 육하원칙 중에 필요한 부분을 사용해 재구성한 뒤에 규칙은 기획자의 의도에 만들어지기 때문에, 규칙을 작성할 때 많은 경우는 굳이 '왜'에 대한 내용을 밝힐 필요가 없다. 단계적으로 따져보는 방법이다. 초심자를 위해 상세함의 정도를 과장했으며, 사고의 흐름을 연습하기 위함이지 실전에서 그..
[5. 게임 규칙 - 3] 규칙 명세의 순서, 규칙 명세 규칙 명세의 순서 규칙 목록이 작성되었다면, 이제 상세 명세를 할 규칙들을 선정해야 한다. 규칙 작성에 순서가 따로 있는 것은 아니지만, 관여하는 영역이 큰 규칙의 상세 명세를 한다고 가정해보자. 예를 들어, 라는 퍼즐 규칙 게임의 상세 명세를 한다고 가정해보자. 퍼즐 게임이 시작되고 종료되는 규칙은 큰 규칙이다. 하나의 스테이지가 시작되고 끝나는 규칙은 그보자는 작은 규칙이다. 쌓인 블록 한 줄이 사라지는 규칙은 더 작은 규칙이다. 이런 여러 규칙들 중, 개념적으로 큰 규칙들을 먼저 정리하는 것이 바람직하다. 큰 규칙을 작성하다보면, 그보다 작은 규칙들에 대한 설명이 필요할 때가 있는데, 새로운 개념이나 용어가 등장해 추가 설명이 필요해지는 경우가 있다. 이럴 때 한 규칙에 모든 설명을 하는 것은 쉽지..
[5. 게임 규칙 - 2] 규칙 명세의 과정, 규칙 목록 작성 규칙 명세의 과정 지금부터 규칙 명세는 어떤 작업들을 포함하는지, 어떤 순서로 하는지 알아보자. [그림 29]는 규칙 명세의 과정을 보여준다. 먼저 규칙 목록을 작성해서 명세해야 할 규칙들을 찾아낸다. 그 다음에 목록에서 규칙을 선택해 하나씩 규칙을 작성하며, 규칙을 검토하는 작업을 병행해야 한다. 규칙을 검토하면서 규칙의 오류를 바로 잡고, 더 구체적인 하위 규칙들이 필요하다면 그것들도 작성한다. 규칙 장성이 끝나면 다음에 작성할 규칙을 선택하고 이 과정을 반복한다. 이러한 규칙 작성 과정은 전체 게임 단위로 하기보다는 하나의 시스템 단위로 하는 것이 바람직하다. 또한 규칙 하나하나 작성할 때마다 이 과정을 거치는 것은 지나치게 번거롭고 피곤하기 때문에, 강약을 조절해 적용하는 것이 좋겠다. 규칙 목록..
[5. 게임 규칙 - 1] 규칙의 종류와 형식 들어가며 인지요소들만 정리하는 것은 그저 부품들의 나열에 불과하다. 작게는 시스템, 크게는 전체 게임이 의도한 대로 작동하려면 게임의 규칙이 필요하다. 이 장에서는 시스템 기획의 꽃이라고 할 수 있는 게임 규칙 작성에 대해 살펴보겠다. 우선 게임 규칙은 어떤 것들이 있고 어떤 형식으로 정리 되는지 설명한 뒤, 규칙을 작성하는 방법과 요령에 대해 알아본다. 게임 규칙에는 다양한 게임 요소들, 즉 인지요소들이 얽히기 때문에 인지요소 명세가 일정 수준이 된 다음에 규칙을 명세하는 것이 좋다. 따라서 규칙을 작성하기에 앞서 인지요소 명세가 일정 수준이 되었다고 가정한다. 규칙의 종류 게임 규칙은 크게 유저 시나리오에 따라 필요한 규칙과 유저 시나리오 규칙 인지요소들에 필요한 규칙으로 나뉜다. 인지요소 규칙 앞서..
[Java] 07.01 - 클래스의 정의와 인스턴스 생성 들어가며 클래스에 대한 지나치게 학문적인 접근은 오히려 처음 객체지향 언어를 공부하는 학습자에게 부담이 될 수 있다. 따라서 쉬운 접근을 통해서 클래스에 대한 첫 이해를 돕고자 한다. 클래스(Class) = 데이터(Data) + 메소드(Method) 작성된 프로그램의 코드를 관찰해보면 종류에 상관없이 모든 프로그램은 다음 2가지로 이뤄진다는 사실을 알 수 있다. 데이터 프로그램상에서 유지하고 관리해야 할 데이터 기능 데이터를 처리하고 조작하는 기능 이 중에서 데이터는 '변수의 선언'을 통해 유지 및 관리가 되고, 또 변수에 저장된 데이터는 '메소드의 호출'을 통해 처리가 된다. 이와 관련해서 다음 예제를 보자. 참고로 이 예제는 은행 계좌를 간단히 표현한 것이다. public class temp { st..
[Java] 06.03 - 메소드의 재귀 호출 들어가며 자바는 메소드의 '재귀적 호출'을 지원한다. 따라서 이에 대해 설명할 텐데, 이 내용이 부담된다면 본서를 조금 더 공부하다가 접근을 해도 괜찮다. 메소드의 재귀적 호출은 자료구조와 알고리즘의 구현에 유용한 문법이므로 조금 천천히 이해해도 괜찮다. 수학적 측면에서의 재귀적인 사고 재귀함수와 관련해서는 귀찮으니 나중에 다루겠다.
[Java] 06.02 - 변수의 스코프 들어가며 변수의 스코프(scope)란 임의의 변수에 대한 '변수의 접근 가능 영역' 또는 '변수가 소멸되지 않고 존재할 수 있는 영역'을 의미한다. 가시성(visibility) 지금까지 중괄호가 사용되었던 때를 정리해 보면 다음과 같다. if문 또는 if ~ else문에서 사용되었다. 다양한 반복문과 switch문에서 사용되었다. 메소드의 몸체 부분을 감싸는 용도로 사용되었다. 이처럼 중괄호는 다양한 경우에 사용된다. 그런데 이렇듯 중괄호로 특정 영역을 감싸면, 해당 영역은 변수에 관한 별도의 스코프를 형성하게 된다. 예를 들어서 다음과 같이 중괄호 내에 변수 num이 선언되면, if (...) { int num = 5; . . . } 이 변수 num은 중괄호 내에서만 접근이 가능하며, 중괄호를 벗어나는..
[Java] 06.01 - 메소드에 대한 이해와 메소드의 정의 들어가며 지금까지 예제를 작성할 때마다 main이라는 이름의 메소드 내에 실행할 내용을 담아 두었다. 이러한 main 메소드의 실행 원리만 이해하더라도 메소드의 기본 성질을 파악할 수 있다. 따라서 main에 대한 관찰에서 부터 이야기를 시작하고자 한다. main 메소드에 대해서 우리가 아는것과 모르는 것 앞서 main이 메소드이고, 이 메소드는 클래스의 내부에 존재해야 함을 간단히 보였다. 따라서 다음 메소드를 보면서 우리가 아는 것과 모르는 것들을 정리해 보겠다. public class temp { public static void main(String[] args) { int num1 = 5; int num2 = 7; System.out.println("5 + 7 = " + (num1+num2));..
[Java] 05.05 - 반복문의 중첩 들어가며 이번에는 반복문 관련하여 응용을 해보려고 한다. 우리는 이미 '하나의 문장 안에 다른 문장을 삽입할 수 있음'을 알고 있다. 예를 들면 for문 안에 if문을 삽입하는 경우이다. 마찬가지로 for문 안에 while문도, do ~ while문도 그리고 for문도 삽입할 수 있다. 이처럼 하나의 반복문 안에 다른 반복문이 삽입된 경우를 가리켜 '반복문의 중첩'이라고 한다. 생각해 볼 수 있는 중첩의 종류는? 반복문의 종류가 3가지 이니, 도출되는 경우의 수는 9가지 형태다. for + for for + while for + do ~ while while + for while + while whlie + do ~ while do ~ while + for do ~ while + while do ~ wh..