C# 언어 특징

  • 객체 지향 언어
  • C언어의 기본적인 기능 , C++로부터의 객체지향 특성을 상속받음
  • 사용자 인터페이스를 쉽게 만들 수 있음.

대충 특징만 보아도 java와 매우 흡사한 부분이 있다는 것을 알수 있습니다. 그럴수밖에 없는 것이 MS에서 자바를 잡기 위해 만든 언어가 바로 C#이기 때문입니다. 비슷하긴 하지만 똑같지는 않습니다. 가장 큰 차이점은 C#은 닷넷 프레임워크 환경에서 돌아가죠 (java는 JVM)

 

 

위에서는 C#의 전체적인 특징을 짚어보았는데요 java와 매우 흡사한 만큼 작은 문법적인 부분외에는 거의 비슷하다 보면 되겠습니다. 하지만 위에 말했듯이 C#은 자바보다 뒤에 나와서 java보다 더 많은 기능들을 제공한다고 합니다. 대신 java는 먼저 나온만큼 제공되는 라이브러리나 오픈 소스 자료의 수가 자바 쪽이 좀 더 많은 것 같습니다.

 

프로그래밍 언어가 뭐 거기서 거기겠지유 ㅠ

 

 

 

 

 

 

개미수열을 C#으로 구현한 소스입니다.

 

 

20번만 돌린다는 가정 하에 배열의 크기를 500으로 선언하였습니다.

  1. 베짱이 2017.09.23 21:57

    좋은정보 감사합니다~!

자바를 하다 C#으로 넘어왔는데 제일 먼저 겪은 경험이였다.

 

자바에서는 메인 함수를 선언할 때 public static void main(String[] args)라고 선언하지만

 

C#에서는 static void Main(String[] args) 이라 선언해야한다

 

 

(main -> Main)

학교 기말 과제로 팀 프로젝트를 하게되었다.


c/c++ 로 간단한 게임을 구현하는 프로젝트였는데 c/c++ 로 게임을 만들 때 자주 사용할 만한 


헤더 중에서도 <conio.h>, <windows.h>, goto함수 까지 한번 알아 보았다.



<conio.h>


conioconsole and port I/O 약자이며 이 헤더파일은 윈도우즈에서만 쓸 수 있는 비표준함수들이 들어있다.


대표적인 함수 중에


int kbhit() 

버퍼에 값이 있으면 1을 없으면 0을 리턴한다.


*한 마디로 정리하면 입력이 있었는지 없었는 지 판단하는 함수이다.

 

int getch()


버퍼에 있는 값을 꺼내오는 역할을 한다. 


kbhit ==1  -> getch()  이런 식으로 사용하면 될 것 같다.





<windows.h>


콘솔창을 이용하여 무엇인가를 하고 싶을 때 사용하는 함수이다.


대표적인 함수로 system("cls")와 sleep() 함수가 있다.


비주얼 스튜디오에서 System()함수는 운영체제(도스창) 명령어를 실행시키는 함수.




gotoxy() - 커서 옮기기

 

gotoxy 함수는 비주얼 스튜디오에서 직접적으로 사용 못하기 때문에 도스창에서 커서 이동을 수행하는 함수를 구현해 놓은 것으로 그 옛날 MS-DOS 시절 turbo C에서 제공했던 gotoxy를 그대로 구현한 것.


코드는 다음과 같습니다


void gotoxy(int x,int y){

COORD pos;    

pos.x = x;

pos.y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

}


좀 더 깊게 알고 싶으신 분들은 COORD 구조체, SetConsoleCursorPosition(), GetStdHandle()에 대하여 좀 더 알아보면 좋을 것 같습니다.




-끗-

포인터의 배열배열의 포인터??


int (*a)[3]과 int *a[3] 이 두개의 차이점은 괄호가 있는지와 없는지이다. 


하지만 이 괄호의 유무가 바로 포인터의 배열과 배열의 포인터를 가르는 기준이다.


C언어에서는 "[ ]"의 우선순위는 " * "의 우선순위보다 높다


때문에 *a[3]이라고 선언할 경우 배열은 배열이지만 값이 포인터 즉, 포인터의 배열 나타내는 것이고,


 (*a)[3] 포인터는 포인터이지만 열의 크기가 3인 2차원 배열을 가리키는 포인터(배열 포인터)이다.






위의 소스를 실행해보면 다음과 같은 결과를 얻을 수 있다.




[그림 1 - 1]


[그림1-1]과 같은 코드에서 testchar(1)+double(8)+int(4) 13으로 알고 있을 것이다.

하지만 실제 코드를 쳐 보면 예상하던 사이즈와 다른 것을 알수 있다.

 

이것은 내가 현재 쓰고 있는 64비트 컴퓨터에서 64비트 컴파일러를 사용하여 8바이트 데이터를 처리하는 것에 가장 최적화되어 있고 이러한 이유로 데이터를 저장하기 위한 공간을 8바이트씩 할당 받기 때문이다.

 

위에 코드를 예를 들면

 

char형을 저장하기 위해 8바이트를 할당받고 char형을 저장한다. 그러면 7바이트가 남는데 그 남은 공간에 double(8)를 저장할 수 없어 7바이트를 빈공간으로 남겨두고 바로 8바이트를 다시 할당하는 것이다.


char 

2

 double

 

 

 

 

 

 

 




이러한 공간낭비를 줄이기 위해서는 1) 8바이트로 저장될 것을 고려하여 저장하는 방법2) 특별한 전처리어를 사용하면 된다.

 

1) 먼저 8바이트가 저장될 것을 고려하여 저장하여 보자.

 

8바이트가 저장될 것을 고려하여 저장할 경우 구조체의 멤버 변수 선언의 순서가 중요하다

 

순서는 다음과 같이 바꿀수 있다.

double         double

int     or     char

char           int



double 

 

 

 

 

 

 

 

 int

 

 

 

 char

 

 

 




[그림 1 - 2]


2) #pragma pack() 전처리어 사용


[그림 1 - 3]


pragma pack(1)에서 1 1바이트 단위로 저장하겠다는 것이다.

 

, CPU64비트이기 때문에 가장 빠르게 읽을 수 있는 데이터의 단위는 8바이트이다.

그렇기 때문에 저장할 때 1이라고 선언하고 나중에 원래대로 8바이트 단위로 바꾸지 않는 다면 속도저하의 문제가 발생할 수 있다.




출처:http://javawoo.tistory.com/30

+ Recent posts