C# 종합 문법 1

김정환·2024년 9월 18일
0

C# 언어, .NET 프레임워크

C# 특징

  • OOP 언어, 안전하고 형식이 분명
  • 강력한 형식 시스템
    변수나 객체의 자료형이 미리 정의되어 있어 안정성과 정확성을 보장한다.
    자료형들을 컴파일러 관리해서 안전하게 코드 작성을 할 수 있게해준다.
  • 가비지 컬렉션 기능
    동적 할당된 메모리를 자동으로 회수해주는 기능.
    C#은 메모리를 직접 할당하고 해제하는 대신, .NET 프레임워크에서 가비지 컬렉터가 자동으로 메모리를 해제한다.
  • 다양한 플랫폼에서 사용 가능, .NET 프레임워크에서 실행된다.
  • C, C++, Java 등 다른 언어들과 문법 및 구조적으로 유사하다.

.NET 프레임워크

  • MS에서 개발한 프로그래밍 프레임워크
  • 다양한 언어 지원하고, 개발자가 쉽게 애플레케이션을 개발할 수 있게 돕는다.

Visual Studio 설치

  1. OS에 맞는 버전 설치. (64 비트 or 32 비트 등등)
  2. 설치 시, .NET 데스크톱 개발 설치 선택
  3. 로그인 필수.

프로젝트 만들기

  1. 새 프로젝트 만들기
  2. 언어 C# 선택
  3. 콘솔 앱 템플릿 선택
  4. 경로 및 프로젝트 이름 설정
  5. (선택) 솔루션 및 프로젝트를 같은 경로에 저장 체크 해제
  6. (선택) 최상위 문 사용 안 함 체크 해제~~

빌드 및 실행

빌드

  • 빌드 탭 > 솔루션 빌드

실행

  • 디버깅 시작
  • 디버그 하지 않고 시작 : (바로 실행하고싶은 경우.)

자동완성

  • 클래스, 메서드, 변수 등의 일부만 입력하고 tab 키를 누르면 자동 완성됨.
  • 입력하다가 놓친 경우 ctrl + space
  • 익숙해지면 빠르게 작업할 수 있음.

프로그래밍 구조

코드 구조

using System;

namespace HelloWorld
{
  class program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("Hello World!");    
    }
  }
}
  1. using ~~;
    • 네임스페이스를 사용하기 위한 키워드 using
  2. namespace ~~
    • 코드를 구성하는데 사용. 클새스 및 기타 네임스페이스의 컨테이너.
  3. Class ~~
    • C# 클래스를 정의하는 키워드.
  4. static void Main()
    • C#의 진입점. entry point.
    • Main 메서드는 프로그램이 시작할 떄 자동으로 호출되는 메서드.
    • Main 메서드는 프로그램 실행에 필수 요소.

전역 using

  • 자주 사용되는 네임스페이스에서는 자동으로 추가해 놓은 것.
  • 이렇게 추가된 것들은 생략되어 있으나, 실제로는 이미 추가했기에 표시하지 않은 것.

출력

Console.WriteLine(value);
  • value 값을 출력.
  • 출력하고 문자열을 다음줄로 바꿔줌.
Console.Write(value);
  • value 값을 출력.
  • 출력하고 문자열을 다음줄로 바꿔주지 않음.

이스케이프 시퀀스

  • 문자열 내에 특수 문자를 표현하기 위해 덧붙이는 과정
  • 특수 문자를 넣기 위해 사용하는 과정
  • 특수 문자들은 그냥 쓰면 본래 역할을 수행하기 때문에 문자열로 취급되지 않음
  • 이때 (역슬래시)를 덧붙여서 넣어주면 특수 문자를 문자열로 취급할 수 있음.
\"	: 큰 따옴표 삽입
\'	: 작은 따옴표 삽입
\t	: 탭 추가
\b	: 백스페이스 삽입
\r 	: 현재 줄 맨 앞으로 커서 이동
\n	: 개행, 줄바꿈

주석

  • 코드에 메모를 넣는 것
  1. 한 줄 주석 : 선호
    // 주석 1
  2. 여러줄 주석
    /*
        주석 1
        주석 2
    */

주의할 점

  1. 주석은 코드를 대체하지 않는다.
  2. 주석의 내용은 정확하고 명확해야한다.
  3. 주석은 업데이트 되어야한다.
  4. 주석은 필요한 경우에만 사용해야한다.

자동완성 및 보조기능

IntelliSense

  1. 자동완성
    • 일부만 작성하고 tab
    • 놓치면 Ctrl + space
  2. 코드 템플릿
    • for 문 같은 경우, 변수만 바꿀 수 있도록 짜여진 코드를 제공

변수와 자료형

기본 자료형

자료형

자료형.NET 데이타 타입크기 (바이트)범위
sbyteSystem.SByte1-128 ~ 127
byteSystem.Byte10 ~ 255
shortSystem.Int162-32,768 ~ 32,767
ushortSystem.UInt1620 ~ 65,535
intSystem.Int324-2,147,483,648 ~ 2,147,483,647
uintSystem.UInt3240 ~ 4,294,967,295
longSystem.Int648-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
ulongSystem.UInt6480 ~ 18,446,744,073,709,551,615
floatSystem.Single4±1.5 × 10^-45 ~ ±3.4 × 10^38
doubleSystem.Double8±5.0 × 10^-324 ~ ±1.7 × 10^308
decimalSystem.Decimal16±1.0 × 10^-28 ~ ±7.9 × 10^28
charSystem.Char2유니코드 문자
stringSystem.String유니코드 문자열
boolSystem.Boolean1true 또는 false

...

float 정밀도 문제

  • 0.1f + 0.1f == 0.2f가 다를 수 있다. (정밀도 문제)
    실수형의 경우 소수점을 표현하는 과정에서 위와 같은 동치 연산 시에 미세하게 값이 달라지는 오차가 발생할 수 있다.
  • 상등 비교는 하지 말기
  • 사용할 일이 있다면 Mathf.Approximately 사용.

리터럴

  • 간단하게, 직접 코드에 쓴 값
int n = 10;
char a = 'A';
string str = "This is code."

변수명

키워드

  • C#에서 미리 정해둔, 선점한 단어들로 변수 선언에 사용할 수 없다.
    ex) as, abstract, using, class...

규칙

  1. 첫 글자는 언더스코어(_)나 알파벳
  2. 두번째 글자부터 알파벳, 언더스코어, 숫자가 가능
  3. 대소문자 구분
  4. 키워드와 같은 이름으로 사용할 수 없다.

코드 컨벤션 = 명명 규칙

사람마다 다른 스타일의 변수 선언이 가능하기 때문에 좀 더 통일된 규칙을 설정.
코드의 가독성과 유지보수성을 높인다.
  1. 식별자 표기법
    • PascalCase :
      • 클래스, 메서드, 프로퍼티 이름 등에 사용.
      • 단어의 첫 글자는 대문자로 시작, 이후 단어의 첫 글자도 대문자로 표기
        ex) ClassName
    • camelCase
      • 변수, 매개변수, 로컬 변수 이름 등에 사용.
      • 단어 첫 글자는 소문자로 시작, 이후 단어의 첫 글자는 대문자로 표기
        ex) variableName
    • 대문자 약어
      • 예외적으로 전체 글자가 모두 대문자인 식별자도 있음.
      • 대표적으로 ID, HTTP, FTP 등
  2. 들여쓰기
    • 탭(tab) 또는 스페이스(space) 4칸을 사용하여 코드 블록 들여씀.
  3. 중괄호 위치
    • 중괄호({})는 항상 새로운 줄에 시작.
  4. 빈 줄 사용
    • 관련 없는 코드 사이에는 빈 줄을 사용하여 구분
    • 메서드, 클래스 등의 블록 사이에는 두 줄을 띄운다.
  5. 주석
    • 한줄 //
    • 여러줄 /**/
  • MS에서 권장하는 컨벤션이 있으니 읽어보면 좋음

형변환

  • C#에서 자료형을 다른 변수로 할당하거나 연산을 수행하여 변환하는 것을 의미.
  • 자료형이 다른 변수 간에 값을 할당하거나 연산하려면 명시적 형변환이나 암시적 형변환을 해주어야함.

명시적 형변환 (explicit casting)

  • 변환하려는 자료형 앞에 (자료형) 을 붙여줌.
int num1 = 10;
long num2 = (long)num; // int를 long으로 명시적 형변환
  • 이때 num1이 long으로 아예 바뀌는 것이 아니라, num1의 값을 long으로 일시적으로 변경하여 num2에 넣어주는 것.

암시적 형변환 (implicit casting)

  1. 작은 자료형에서 더 큰 자료형으로 대입하는 경우

    • byte, short, char 등 작은 데이터 타입에서 int, long, float 등 더 큰 데이터 타입으로 대입할 때 암시적 형변환이 발생
    	byte num1 = 10;
    	int num2 = num1; // byte형에서 int형으로 암시적 형변환
  2. 리터럴 값이 대입되는 경우

    • C# 컴파일러는 리터럴 값의 자료형을 판별하여 변수에 암시적으로 형변환한다.
    	float result = 1; // 1은 int형 리터럴이지만 float 형으로 암시적 형변환
  3. 정수형과 부동소서점형 간의 연산을 수행하는 경우

    • 정수형과 부동소수점형의 연산 결과는 부동소수점형으로 변환된다.
    	int num1 = 10;
        float num2 = 3.14f;
        float result = num1 + num2; // int형과 float형 덧셈에서 float형으로 암시적 형변환
    • 암시적 형변환은 프로그래머가 직접 형변환 코드를 작성하지 않아도 되므로 코드를 간결하게 작성할 수 있다.
    • 하지만, 암시적 형변환이 발생하는 경우 자료형을 신중하게 고려하여 코드를 작성해야 한다.

입력

1. Console.ReadLine

string str = Console.ReadLine();
  • 사용자로부터 값을 입력받을 때 사용.
  • return : string

2. Split

  • 한 줄에 여러 값을 입력받아야할 경우가 있음.
string input = Console.ReadLine(); // 10 20

string[] arr = input.split(' ');

int n1 = int.parse(arr[0]);	// 이 경우는 형변환이 아님
int n2 = int.parse(arr[1]);	// parse는 해당 자료형에게 문자열을 자신에 맞는 값으로 전환하는 메소드임.

int sum = n1 + n2; // 30

var 키워드

  • C# 3.0부터 제공하는 var 키워드
  • var 키워드로 변수를 선언하면 변수의 자료형이 컴파일러에 의해 자동으로 결정됨.
  • 초기화하는 값의 자료형에 따라서 변수의 자료형이 결정됨.
    ex) c++ : auto
    javascript : let, var
var num = 10;		// int
var name = "kero";	// string
var pi = 3.141592;	// double
  • 자료형을 모를 때 선언해서 사용하면 유용한 기능이지만
    코딩이 익숙하지 않을때는 권장하지 않음.
  • 자신이 어떤 자료형으로 작업하는지, 자료형에 따라서 어떤 방식으로 작업하거나 형변환이 되는지 익숙해져야하기 때문.

변수명

  • 명확하게 지어주는 것이 가독성을 높이는데 도움이 된다.
  • 지나친 약어로 되어 있으면 읽는 사람이 파악하는데 어려움이 생긴다.

연산자

  • 변수의 산술, 논리, 관계, 비트 연산 등을 수행하는 명령어들

우선순위

  • 사칙연산처럼 연산의 우선순위가 있다.
  1. 기본 전제로 괄호()에 묶인 연산을 우선 처리한다.
  2. 단항 연산자
  3. 산술 연산자
  4. 시프트 연산자
  5. 관계 연산자
  6. 논리 연산자
  7. 할당 연산자

문자열 처리 기능 및 메서드

  1. 문자열 생성

    string str1 = "Hello, World";
    string str2 = new string('h', 5);
  2. 연결

    string str3 = str1 + " " + str2;
    // 연산하는 비용이 늘어나서 비추천.
  3. 분할

    string[] arr = str1.Split(',');
  4. 검색

    int index = str1.IndexOf("World");
  5. 대체

    string newStr = str1.Replace("World", "Universe");
  6. 변환

    string str5 = "123";
    int num = int.parse(str5); // 123
    
    num += 10; // 133
  7. 비교

    • 비교는 기본적으로 사전 순으로
    string.Compare(str1, str2); // str1 - str2 
  8. 포맷팅

    string name = "John";
    int age = 30;
    string message = string.Format("My name is {0} and {1} years old", name, age);
    
    message = $"My name is {name} and {age} years old";
profile
만성피로 개발자

0개의 댓글