[C#] 이란?
C#
마이크로소프트에서 개발한 객체 지향의 프로그래밍 언어로 C++, JAVA VB의 장점을 합쳐서 개발하였다.
C#은 .Net을 위한 많은 언어 중 하나로, 마이크로소프트의 닷넷 플랫폼을 기반으로 한다.
절차적 언어와 객체지향적 언어의 특징, 그리고 함수형 프로그래밍 스타일을 제공하는 다중 패러다임 프로그래밍 언어이다.
C# 컴파일러로 C#을 컴파일하면 CPU와 OS에 독립적인 기계어 코드가 생성된다 이를 IL(Intermediate Language)이라고 하고 CIL(Common Intermediate Language)로 불린다.
Visual studio(VS)로 소스코드를 컴파일 하게 되면 VS는 CIL이라는 바이트코드를 생성하고 사용자가 프로그램 컴파일 후 실행을 시키게 되면 VS는 이 바이트코드를 Native Code로 컴파일한 후 실행을 시킨다.
이때 CLR이 CIL코드를 읽어들여 OS가 이해할 수 있는 Native Code로 변환하는 역할을 하게된다.
C#의 특징
1. C, C++, JAVA와 기초문법이 비슷하다
2. Garbage collection 기능을 제공하여 사용한 객체는 자동으로 제거되기 때문에 메모리 누수 걱정이 덜하다.
3. 강력한 형식의 언어로 문법의 형식을 지켜야한다
4. Generic, LINQ등 편리한 기능을 제공한다.
5. 메모리에 접근할때 runtime error detection을 체크함으로 overflow 나 dangling pointer 같은 버그나 취약점으로 부터 메모리를 보호함으로 Memory Safety한 특징을 가지고있다.
6. 완전한 객체 지향 언어로 변수나 함수가 클래스 안에 속해야한다.
C#의 기본 코드 구조
Class와 Main() method 가 반드시 존재해야하고 하나이상의 문이 존재해야한다.
c#의 기본 코드는 위쪽에 네임스페이스 선언부와 Main() 매서드가 오고 중괄호 시작과 끝을 사용하여 프로그램 범위를 구분한다.
Main() method : 프로그램의 시작 지점, 반드시 있어야함
Method : 클래스에서 제공하는 멤버함수
Main앞에 static 키워드가 있어서 개체를 생성하지 않고 바로 실행 가능하다.
문자열 보간법(String Interpolation) or 문자형 템플릿(String template)
C# 에서는 문자열을 묶어서 처리하기 위해서 문자열 보간법을 사용한다.
C# 6.0 이전부터 $"{}" 형태로 간결하게 제공하고 있다.
int a = 1;
int b = 2;
Console.WriteLine($"{a},{b}");
Console.WriteLine("{0},{1}",a,b);
숫자 구분자(Digit Separator)
C# 7.0 버전부터는 언더스코어(_) 문자를 사용하는 숫자 구분자(Digit separator)를 제공한다.
숫자 형식을 표현할 떄 언더스코어 문자는 무시한다. -> 가독성을 높일 수 있다.
int bignumber = 110_000;
Null 가능 형식 (Nullable 형식)
숫자 형식의 변수를 선언할 때 int?, float?와 같이 물음표(?) 기호를 붙이면 null 가능 형식으로 변경된다.
이러한 null 가능 형식에는 아무런 값도 없음을 의미하는 null을 대입할 수 있다.
int nullNumber = null;
자동 타입 추론(Automatic type deduction)
변수에 대입하는 값의 데이터 타입이 명시적이거나 명확할 때, 데이터 타입을 명시하지 않고 생략가능하다.
자동 타입 추론이란 컴파일러가 대입하는 값 또는 변수의 데이터 타입으로 다른 한 쪽의 데이터 타입을 추론하는 기능을 의미한다.
var autovaribleInt = 10;
var autovaribleFloat = 3.14f;
이는 C++의 auto의 기능과 같다.
Default 값
C# 6.0 버전부터는 자동타입추론으로 기본 형식에 default 값을 대입할 수 있다.
기본 형식마다 정해진 default 값이 존재한다.
int number = default
열거형 형식
C#에서 열거형 형식은 기억하기 어려운 상수들을 기억하기 쉬운 이름 하나로 묶어 관리하는 표현 방식이다. 일반적으로 열거형으로 줄여 말한다.
열거형은 enum 키워드를 사용하고 이늄 또는 이넘으로 읽는다.
열거형은 클래스 범위 내에 정의해야하며, method 범위 안에는 정의할 수 없다.
using System;
namespace first
{
internal class Program
{
static void Main(string[] args)
{
Align align = Align.TOP;
align= Align.LEFT;
Console.WriteLine("enum값은 어케 보이나 -> {0}", align);
} // Main()
enum Align { TOP, BOTTOM, LEFT, RIGHT, RANDOM, VALUE };
} // class program
} // namespace first
입출력에 대해서
프로그램을 실행할 때마다 서로 다른 값을 입력받으려면 콘솔에서 입력한 값을 변수에 저장할 수 있어야 한다.
키보드로 입력받고 모니터로 출력하는 일반적인 내용을 표준 입출력(Standard input/output)이라고 한다.
System.Console.ReadLine(); // 콘솔에서 한 줄을 입력 받는다.
System.Console.Read(); // 콘솔에서 한 문자를 정수로 입력받는다.
System.Console.ReadKey(); // 콘솔에서 다음 문자나 사용자가 누른 기능 키를 가져온다.
형식변환
Console.ReadLine() 매서드를 사용하여 콘솔에서 입력받은 데이터는 문자열이다.
문자열 대신 정수나 실수 데이터를 입력받고 싶다면 문자열을 원하는 데이터 형식으로 변환할 수 있어야 한다.
키워드 : 캐스팅 연산자, 암시적 형변환, 명시적 형변환
string stringNumber = Console.ReadLine();
int intNumber = Convert.ToInt32(stringNumber);
Console.WriteLine("입력한 숫자 + 10은 {0}입니다.", intNumber + 10);
string stringNumber = Console.ReadLine();
int intNumber2 = int.Parse(stringNumber);
Console.WriteLine("입력한 숫자 + 10은 {0}입니다.", intNumber + 10);
string stringNumber = Console.ReadLine();
int intNumber3 = default;
int.TryParse(stringNumber, out intNumber3);// 가장좋은방법
Console.WriteLine("입력한 숫자 + 10은 {0}입니다.", intNumber + 10);
C#은 C나 C++과 다르게 입력을 string으로 받아야한다.
또한 여러진수의 형태로 값을 나타낼 수 도 있다.
string stringBinary = Convert.ToString(10,2); // 10을 이진수 형태로 string으로 저장
Console.WriteLine(stringBinary);
int intBinary = Convert.ToInt32("0111",2); // 0111를 이진수형태로 int형으로 저장
Console.WriteLine(intBinary);