프로그래밍 강의 (68)
using System; using static System.Environment; class Program { static void Main(string[] args) { string option = "/exit"; switch (option) { case "/exit": Console.Write("/exit "); goto case "/writeBye"; case "/writeHI": break; case "/writeBye": Console.Write("bye!" + NewLine); goto default; case "/writeCopyright": break; default: goto gotoLable; } Console.WriteLine("It will be silent."); gotoLabl..
C#에서는 연산자 우선순위에 따라 우선순위가 높은 연산자는 우선순위가 낮은 연산자보다 먼저 실행되며, 우선순위가 같은 연산자끼리는 '좌 결합성'과 '우 결합성'에따라 실행된다. 예를 들어 x+y*z라는 코드는 x+(y*z)로써 실행될 것이다. 여기서 주의해야 할 것은, 이러한 우선순위와 결합성은 연산자들이 실행되는 순서에만 영향을 끼친다는 것이다. 절대 피연산자의 평가 순서에 영향을 주지 않는다. C#에서 피연산자는 항상 왼쪽에서 오른쪽으로 평가된다. A()+B()*C()라는 코드는 'A()->B()->C()' 순으로 평가(호출)되고, 평가된 결과(return)값을 런타임은 우선순위와 결합성을 이용하여 계산한다. 그렇다면 x가 1일 때, F(x++, x++)와 같은 함수 호출은 C#에서는 어떻게 반응할까..
using System; class Program { static void Main(string[] args) { string text = "Hello World"; Console.WriteLine(text); } } Main 메소드는 프로그램의 시작점을 담당하는 특별한 식별자이며, static void 혹은 static int 한정자를 지닌다. static로 지정한 Main은 클래스에 종속된 정적 메소드이므로 new를 통한 인스턴스화 작업 없이도 다른 클래스의 메소드에서 이 메소드를 호출할 수 있음을 의미하기에 프로그램의 최초시작점인 Main 메소드는 정적이 되어야 하는 것이다. 만일 Main이 인스턴스 메소드라면 명령 콘솔에서 인스턴스화를 수행한 뒤 프로그램이 실행되어야 한다. Main의 반환 값은 ..
C# 6.0에서 바뀐 문법들을 요약해 정리해보았다. 내용을 보면 알겠지만, 제네릭과 람다식 등 그동안의 C# 버전의 변경(1.0~5.0) 때와는 달리 C# 6.0은 이전 버전과 비교해 기능적으로 그다지 크게 변화하지는 않았다. - nameof 키워드 추가 ex) nameof(Program.Method); //"Method"가 반환됨 식별자면 모두 다 허용. 개발 중 멤버의 이름이 바뀌었을 때 용이. - 문자열 보간 : string.Format 메소드의 축약표현($) ex) Console.WriteLine($"Name = {name}, hours = {hours:hh}"); ex) string text = $"{person.Name, 20} is {person.Age:D3} year {(p.Age == 1..
'-'는 우선순위 목록을 나타냅니다. 같은 '-' 항목들의 연산자 우선순위는 동일하며 '좌' 혹은 '우' 결합성에 따라 순서대로 실행됩니다. 할당 연산자는 '우' 결합성이기 때문에 'a = b = 3' 과 같은 식이 허용(b가 3이 되고 a가 b이 됨, 즉 a도 3이 됨)됩니다. 우선순위 목록(-)이 아래에 있을수록 더 늦게 실행됩니다. 그래서 '곱하기 연산자'보다 '가산 연산자'가 늦게 실행됩니다. 연산자와 우선순위 목록이 많기 때문에 일일이 외우기가 쉽지 않을 것입니다. 하지만 다음과 같이 구분하여 쉽게 외울 수 있는 방법이 있습니다. 단항 연산자는 피연산자가 한 개 있는 연산자를 뜻하며 두 번째로 우선순위가 높습니다. (사실상 기본 연산자도 단항으로 이루어지기 때문에 단항은 높다고 생각하면 됩니다)..
한정자라고 할 때도 있고 리터럴이라고 할 때도 있고, 또 어떤 것은 한정자 및 연산자가 될 때도 있는 혼란스러운 C#의 키워드를 정리해보았습니다. 키워드를 정리하면서 제가 알고 있는 같이 쓰이는 키워드들은 '키워드~키워드' 혹은 '키워드 키워드'로 묶어놓았는데, 같이 쓰이는 것인데 묶여있지 않거나 단독으로도 쓰이는데도 묶여만 있다면 알려주시면 감사하겠습니다. 한 줄에 작성되어있는 키워드들은 자주 같이 쓰이는 것들로 묶어놓았지만, 본문의 한정자의 경우를 보면 알겠지만 메소드, 필드, 지역변수 등에도 두루두루 쓰이는 것일 때도 있습니다. 한 줄에 묶여있는 것들은 그냥 가독성 쪽으로 생각해주시면 됩니다. 문맥 키워드의 경우에는 '키워드*' 처럼 키워드 뒤에 '*' 표시를 해두었는데, 여러 키워드를 '~'로 묶..
○ 10진수 -> N진수 10진법에서 임의의 진법으로 변환할 때에는 정수 부분과 소수 부분을 따로 처리한다. 여기서 정수 부분은 '10진수/N진수'로 몫이 0이 나올 때까지 계속하여 나눠주고 그 과정에서 나머지를 구하면 된다. 소수 부분은 '소수*N진수'로 소수 부분이 없어질 때까지 계속하여 곱해주고 그 과정에서 정수로 올라가는 수를 순서대로 나열하면 된다. 예를 들어 69.6875라는 10진수를 2진수로 변환하여보자. 먼저 정수 부분 69를 몫이 0이 될 때까지 2로 나눈다. 그리고 나온 나머지를 마지막에 나온 나머지부터 취하여 '1000101'이 10진수 69의 2진수 값이 되게 된다. 다음으로 소수 부분 0.6875를 2진수로 변환하기 위해서 2로 계속하여 곱하며, 그 과정에서 정수는 따로 취한다...
○ 2 입력 AND 게이트 XY = F ○ 3 입력 AND 게이트 XYZ = F ○ 2 입력 NAND 게이트 X`Y` + X`Y + XY` = F X`(Y`+Y) + XY` = F X` + XY` = F (X`+X)(X`+Y`) = F X` + Y` = F ○ 3 입력 NAND 게이트 X`Y`Z` + X`Y`Z + X`YZ` + X`YZ + XY`Z` + XY`Z + XYZ` = F X`Y`Z` + X`Y`Z + X`YZ` + X`YZ + XY`Z` + XY`Z + XYZ` + X`YZ` = F X`Y`(Z`+Z) + X`Y(Z`+Z) + XY`(Z`+Z) + YZ`(X+X`) = F X`Y` + X`Y + XY` + YZ` = F X`(Y`+Y) + XY` + YZ` = F X` + XY` + YZ` ..
게임을 만들다 보면 이벤트 순서를 고려해야 하는 때가 있습니다. 게임메이커: 스튜디오(GameMaker: Studio)에서의 일반적인 이벤트는 이벤트 순서가 정해져 있으며, 이 강좌에서는 그 순서를 살펴볼 것입니다. * 이벤트 순서는 언제든지 바뀔 수가 있습니다. 게임메이커: 스튜디오의 도움말 파일에서, 'Using GameMaker: Studio' -> 'Events' 항목에 최신 이벤트 순서가 작성되어 있습니다. ㅁ 룸이 시작되었을 때 1. Create Event (각 인스턴스의) 2. Creation Code (룸에서 작성된 인스턴스의) 3. Game Start Event (이 이벤트는 게임의 가장 첫 번째 룸에서만 발생합니다.) 4. Room Creation Code 5. Room Start Ev..
○ 개념 보수는 뺄셈을 덧셈으로 계산할 때 사용합니다. 예를 들어보자면, 80 - 48이라는 식이 있다고 했을 때, 48의 10의 보수는 52. 80 + 52 = 132이고요, 여기서 삐져나온 자릿수 100을 빼면 32가 됩니다. 어떤가요? 뺄셈을 덧셈해도 뺄셈 계산이 되지요? 컴퓨터 CPU에서는 이러한 방식으로 뺄셈을 2의 보수를 취해서 덧셈으로 계산합니다. ○ 공식 진법은 2진법, 8진법, 10진법, 16진법 등이 있지요? 모든 진법에는 2가지의 보수가 존재하는데, 만약 R진법이라면 R의 보수와 R-1의 보수가 존재합니다. 즉 10진법에는 10의 보수와 9의 보수가 존재하고, 2진법에는 2의 보수와 1의 보수가 존재하겠지요. 이러한 보수를 구하는 공식은 다음과 같습니다. R진법 N자릿수 X의 R의 보..