반응형

Escape Sequence란 이야기 들어본적 있겠지? 우선 보자..

Escape sequence

의미

표현

\'

홑따옴표(single quote)

'

\"

쌍따옴표(double quote)

"

\\

역슬래쉬(back slash)

\

\0

(null)

공백 문자

\a

경고(alert)

비프(beep)음을

\f

피드(form feed)

서식이송(프린트시 넘김)

\r

캐리지 리턴(carriage return)

커서의 위치를 앞으로 옮김

\n

개행(new line)

다음 줄로 커서를 이동

\b

백스페이스(backspace)

커서 바로 앞의 문자를 삭제

\t

수평탭(horizontal tab)

커서를 우측으로 이동

\v

수직탭 (vertical tab)

커서를 아래쪽으로 이동


위와 같은 녀석들인데 \n이 아마 최고로 많이 쓰일꺼다.. 그 다음이 \t, \", \'정도..

저중 많은것들이 콘솔어플을 위한 것이라 봐도 무방하다.


어떻게 쓰는거냐요? 

인심한번 쓴다.. 만인의 예제 HelloWorld로 해보자..


다시 이야기 하지만, 난 c/c++에서 출발한 녀석이라서 c/c++/VC와 비교해 가면서 샘플을 작성하는 경우가 많을꺼다.. 자바도 해달라고? 미안하다 자바는 그냥 훑어보기만 해서.. 귀찮다..


#include <stdio.h>                                                      using System;


void main()                                                                public class HelloWorld

{                                                                               {

    printf("Hello,\b World!\n");                                           public static void Main()

}                                                                                     {

                                                                                         Console.WriteLine("Hello,\b World!"};

                                                                                       }

                                                                                 }


어느게 C#소스인지는 구별할 수 있겠지...? 제발 모른다고 하지마라.. 화난다 그러면..


C소스가 짧다 ㅡㅡv


뭐 간단하다 Hello, World!찍으면서 중간에 삑소리 한번 경쾌하게 울려주는 소스다.. 소리가 안난다고? 스피커 확인해봐라..


나중에 다시 나올지 모르겠지만, 간단히 분석해 보자..

#include <stdio.h>  / using System;

C는 나 이런 api 사용하겠소라고 선언해 놓은 헤더를 C#은 나 이런 클래스 라이브러리 사용하겠소라고 선언한거다. 여기에 선언 안되어 있는 녀석을 뜬금없이 사용하면 바로 컴파일러가 "뭥미?"하며 에러 날린다. C/C++에서는 printf()를 사용하기 위해, C#에서는 Console.WriteLine을 사용하기 위해 선언한 거다. 


눈치 있는 사람이라면 두 소스에서 약간의 차이를 발견했을꺼다.. Hello,\b World!의 맨 마지막 \n의 유무다. printf의 경우 자동으로 줄을 넘겨주지 않기 때문에 \n을 붙혔다. 하지만, WrineLine은 그 이름에서 풍기는 것과 같이 한줄씩 써주는 녀석이라 자동으로 끝에 \n을 처리해 준다.


void main() -> 이거 int main(int argc, char* argv...) 뭐 이런식의 몇가지 형식이 있지만, 이름이 제일 중요하다.. 대소문자 구분하며, 어플을 시작할때 무조껀 이거 찾는다..(콘솔일때 말이다.. 윈도우일땐 좀 다른걸 찾지만, 그것도 아마 찾아보면 내부적으론 이거 찾을꺼다.) 크게 보면, C/C++어플은 이 main블럭 하나가 다란 소리다.. main이 끝나면 어플도 끝난다..

C#이라고 별수 없다.. 모양새가 이상한녀석 안쪽에 public static어쩌구하면서 숨어 있어서 그렇지, C#도 이 Main이 끝나면 끝난다.. 대/소문자 구분한다. C/C++에 비해 복잡해 보이는 이유는 C#은 객체 지향언어이기 때문이다. 많은 사람들이 C++이 객체지향이라고 생각하는데, C++은 객체지향을 구현할 수 있는 언어이지 객체지향언어는 아니다. 아무튼 여기선 static이란 녀석이 중요하다. Main의 형식은 고정적이다. 그냥 외워서 써도 되지만, 이번기회에 static의 특성중 하나를 알고 가자..


저번에 값타입이니, 참조 타입이니 그런 이야기를 한적이 있었다. 그 이야기 맨 마지막에 클래스는 참조 타입이라는 소리를 한적이 있다. 이게 뭔소리냐고? 인스턴스 생성없이 냅다 "길동아~'라고 부르면 바로 '뭥미?'라고 상큼하게 에러 날려준단 이야기다.

위 소스를 잘 봐라. 분명히 class 어쩌고 하는 블럭 내부에 Main이 떡하니 자리잡고 있다..


그런데, 왜 '뭥미?'의 상큼함이 안날라오는 걸까..? 그렇다 static때문이다.

이 static이란 녀석을 써주면 인스턴스 생성이전에 이미 메모리에 떡하니 자리잡고 있게된다. 깡패가 따로없는 것이다. 뭐 어렵게 생각하지 말자. static으로 해주면, new 그런 짓거리 필요없이 바로 사용가능하다고 보면 된다.

반응형

+ Recent posts