개발 노트

C# 프로그래밍 언어는 본문

프로그래밍/C#

C# 프로그래밍 언어는

알 수 없는 사용자 2022. 1. 14. 14:35

C#

마이크로소프트에서 개발한 객체지향 프로그래밍 언어이다.

그리고 Java와 C++와 비슷한 면들을 많이 가지고 있다.

C#을 이야기 하면 자연스럽게 .NET Framework을 함께 이야기 해야할 정도로

C#은 .NET Framework을 이용하여 프로그래밍하는 대표적인 언어이다.

또 C#은 윈도우 프로그래밍, 웹 프로그래밍, 게임 및 모바일 프로그래밍 등 모든 영역에서 사용되는 범용 프로그래밍 언어이다.

 

 

C# 프로그램 소스코드

C# 프로그램은 .cs 라는 확장자를 사용합니다.

예를들어 test.cs, test.aspx.cs, test.xaml.cs

C++와 다르게 C#은  *,h과 같은 별도의 헤더 파일이 없습니다.

 

C# 프로그램으로부터 실행 파일을 만들기 위해서는 비주얼 스튜디오를 사용하는 경우 C#프로젝트를 빌드하여 실행파일을 생성하며 visual studio 없이 .net Framework에서 제공되는 C# 컴파일러 csc.exe를 이용하여 실행파일을 생성할 수 있습니다.

 

C# 개발도구 Visual Studio는

C3 프로그래밍을 위한 개발도구로 일반적으로 Visual Studio를 사용합니다. VS는 IDE로서 소스 편집기 빌드 디버깅 인텔리센스 등 편리한 개발기능을 제공하는 통합 개발도구입니다. C# 이외의 다양한 프로그래밍 언어들을 지원합니다.

 

 

hello world

// 모든 C# 프로그램은 Main()이라는 시작함수(메소드)를 가져야 한다. Main() 메소드는 임의의 클래스 안에서 존재하며, 프로그램 상에 단 1개만 있어야 한다.

Main()는 static으로 선언되며 메소드 인자는 string[] 문자열이다

System.Console은 .Net Framwork 클래스이며, WriteLine은 화면에 데이터를 Console클래스의 출력하는 메소드이다.

 

C# 코멘트

C#에서 코멘트를 사용하기 위해서는 (1) 한 라인에 대해 코멘트할 경우 //을 사용하고 (2)복수 라인에 대해 코멘트를 할 경우 /* */를 사용한다

 

C# 데이터 타입

C#을 포함한 모든 .NEt 프로그래밍 언어는 .NET의 Commen Type System에 정의된 .NET 데이터 타입을 사용한다.

C#은 int, double, string 과 같은 C# 키워드로 데이터 타입을 표현할 수 있으며, 또한 System.Int32, Sytem.double, System.String과 같은 .NET 데이터 클래스로 데이터 타입을 표현할 수도 있다.

내부적으로 C# 컴파일러는 C# 키워드로 된 데이터 타입을 컴파일 후. NET 데이터 타입으로 변경하게 된다.

 

C# 리터럴 데이터

C# 코드에서 123, true, "ABC"와 같이 값을 직접 써줄 수 있는데 이를 리터널이라 한다.

C#에서 리터널 데이터를 사용할 때 별도의 접미어 표시가 없는 경우 C# 컴파일러 int, double, char, string, bool  데이터 타입에 기본적으로 그 값을 할당한다. 따라서 특정 데이터 타입을 지정하고 싶으면, 리터럴 데이터 뒤에 1~2자의 타입 지정 접미어를 추가해야한다. Suffix는 대소문자 구분이 없다. 즉 decimal을 나타내는 접미어 M은 1024M이나 1024m처럼 사용가능하다. 아래는 디폴트 리터럴 타입과 각 데이터 타입별 Suffix 에 대한 예제이다.

디폴트 리터럴 타입

 

C# 데이터 타입예제

  • float 데이터 타입은 숫자 뒤에 123.45F와 같이 F를 붙여 double이 아닌 float 타입 임을 나타낸다.
  • double 데이터 타입은 숫자 뒤에 123.45D과 같이 D를 붙이거나 혹은 아무것도 붙이지 않음으로 해서 double 타입임을 나타낸다.
  • decimal 데이터 타입은 숫자 뒤에 123.55M과 같이 M을  붙여 decimal 타입임을 나타낸다.
  • char 데이터 타입은 작은 따옴표 '을 사용하여 한 문자를 할당한다
  • string 데이터 타입은 큰 따옴 표"을 사용하여 문자열을 할당한다.

 

 

최대값, 최소값

숫자형 데이터 타입의 최대값 혹은 최소값을 알아내기 위해서는 .NET 데이터 타입 클래스들의 MaxValue, MinValue 프로퍼티를 사용한다. C# 데이터 타입 키워드 뒤에서도 이러한 프로퍼티를 직접 호출 할 수 있다. 즉 int.MaxValue 혹은 int32.MaxValue 처럼 사용할 수 있다.

int i = int.MaxValue;
float f = float.MinValue;

 

 

NULL

어떤 변수가 메모리 상에 어떤 데이터도 가지고 있지 않다는 의미로서 NULL을 사용하는데 NULL을 표현하기 위하여 c#에서는 소문자 null이라는 키워드를 사용한다.

모든 데이터 타입이 NULL을 가질 수 있는 것은 아니며 사실 데이터 타입은 NULL을 가질 수 잇는 타입(Refference타입)과 가질 수 없는 타입(Value 타입)으로 구분 될 수 있다.

아래는 NULL을 가질 수 있는 문자열 타입의 변수 s 에 null을 할당하는 예이다.

string s;

s = null;

 

 

 

Nullable Type

정수(int)나 날짜(DateTime)와 같은 Value Type은 일반적으로 NIULL을 가질 수 없다. C# 2.0에서부터 이러한 타입들에 NULL을 가질 수 있게 하였는데, 이를 Nullabel Type 이라 부른다.

C#에서 물음표(?)를 int나 DateTime 타입명 뒤에 붙이며 즉, int? 혹은 DateTime? 같이 하면 Nullabel Type이 된다. 이는 컴파일하며 .Net의 Nullable<T> 타입으로 변환된다. Nullable Type (예 : int?) 을 일반 Value Type (예: int)으로 변경하기 위해서는 Nullable의 .Value 속성을 사용한다.

 

C# 변수

 

C# 변수는 메서드 안에서 해당 메서드의 로컬변수로 선언되거나, 혹은 클래스 안에서 클래스 내의 멤버들이 사용하는 전연적 변수(이를 필드라고 부릅니다)로 선언될 수 있습니다.

로컬변수는 해당 메서드 내에서만 사용되며 메서드 호출이 끝나면 소멸된다. 반면 필드는 클래스의 객체가 살아있는 한 계속 존속하며 또한 다른 메서드들에서 필드를 참조할 수 있습니다. (주: 만약 필드가 정적 필드이면 클래스 Type이 처음으로 런타임에 의해 로드될 때 해당 Type 객체(타입 메타정보를 갖는 객체)에 생성되어 프로그램이 종료될 때까지 유지된다.).

로컬변수는 기본값을 할당받지 못하기 때문에 반드시 사용전에 값을 할당해야 하는 반면 필드는 값을 할당하지 않으면 해당타입의 기본값이 자동으로 할당됩니다.. 예를들어 int 타입의 필드의 경우 기본값 0이 할당됩니다.

모든 C# 변수의 이름은 대소문자를 구별할수 있습니다. 예를들어 var1과 Var1은 서로 다른 변수입니다.

C# 변수 예제

필드 globalVar는 값을 명시적으로 할당하지 않은 경우 기본값 0이 할당됩니다.

여기서 전역(Global)의 의미는 객체 (혹은 클래스)내에서의 전역을 의미합니다.

지역변수 localVar는 값을 할당하지 않고 사용하게 되면 컴파일러 에러가 발생합니다.

 

C# 상수

C#상수는 C# 키워드 const를 사용하여 정의한다. C# 변수와 비슷하게 선언하는데, 다만 앞에 const를 붙여 상수임을 나타냅니다. 상수와 변수의 차이점은 변수는 프로그램 중간에 값을 변경할 수 있지만 상수는 초기에 정한 값을 중간에 변경할 수 없습니다. const는 필드 선언부에서 사용되거나 메서드 내에서 사용될 수 있으며 컴파일시 상수값이 결정됩니다. C# const 대신 readonly 키워드를 사용하여 일기전용 (개념적으로 상수와 비슷한) 필드를 만들 수 있다. readonly는 필드 선언부나 클래스 생성자에서 그 값을 지정할 수 있고 런타임시 값이 결정된다.)

 

C# 배열

배열은 일련의 동일한 데이터 타입 요소들로 타입 요소들로 구성된 데이터 집합으로서

인덱스를 통하여 개개의 배열요소(Element)를 엑세스 할 수 있다. C#에서 배열은 Zero-based Array 즉 첫번째 요소가 인덱스 0을 갖는다. 두번째 요소는 인덱스 1, 그 다음 요소들은 인덱스 2, 3, ... 등을 갖는다.

배열의 요소는 Squar Bracket( [ ] )안에 인덱스를 넣어 표시한다. 즉 배열 A의 첫번째 요소는 A[0] 으로 표시한다.

C# 배열은 1차배열, 2차배열, 3차배열,,,,, 32차 배열 등 최고 32차 배열을 가질 수 있다. 2차 이상의 다차원 배열은 (1)각 차원 별 요소 크기가 고정된 Rectangular 배열과 (2) 각 차원 별 크기가 서로 다른 가변 배열로 나뉠 수 있다.

다음은 1차 배열과 2차, 3차 배열 (C-Style의 Rectangular 배열)을 선언하는 예이다. 아래 예제에서 배열 players는 10개의 string 요소를 갖도록 선언되었고, Regions/Depts는 각각 1차, 2차 배열이며 초기화 값들을 할당하고 있다. 마지막의 Cubes는 3차배열을 선언한 예이다.

 

가변 배열

다차원 배열에서 각 차원별 배열 요소 크기가 동일한 Rectangular 배열은 C#에서 [,] 와 같이 괄호안에 콤마로 분리하여 (C 언어 스타일) 다차원을 표현한다. 하지만 각 차원별 배열 요소 크기가 가변적인 가변배열의 경우 [ ] [ ] 와 같이 각 차원마다 괄호를 별도로 사용한다.

 

가변배열은 배열의 배열이라 불리우는데 첫번째 차원의 크기는 컴파일 타임에 확장되어야 하고 그 이상 차원은 런타임시 동적으로 서로 다른 크기의 배열로 지정할 수 있다. 이러한 가변 배열은 각 차원별 배열 요소가 불규칙하여 Rectangular 배열처럼 고정된 크기를 사용하면 메모리의 낭비가 심한 경우에 사용하면 유용한다.

 

C# 배열의 사용

 

C# 배열은 각 요소를 인덱스를 사용하여 엑세스합니다. 예를 들어 Regions 배열의 첫번째 요소는 Regions[0]으로 두번째 요소는 Region[1]로 표시됩니다.

 

모든 C# 배열은 내부적으로 .NET Framework의 System.Array에서 파생된 것입니다. 따라서 System.Array의 메서드, 프로퍼티를 사용할수 있습니다. 

 

다음 예제는 점수 배열을 하나 하나 엑세스하면서 총합을 구하는 예이다. 아래 예제에서 배열 scores의 사이즈를 구하기 위하여 scores.Length 처럼 .Length 속성을 사용하였는데, 이는 System.Array 클래스에 정의된 속성이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'프로그래밍 > C#' 카테고리의 다른 글

프로그레스바 연습하기  (0) 2022.01.17
[에러정리] System.NullReferenceException  (0) 2022.01.17
c# ftp 데이터 업데이트 해보기1  (0) 2022.01.14
C# 업데이트 참고자료  (0) 2022.01.13
파일 저장하기  (0) 2022.01.13