Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Luna

[TIL Day 7] C# 기초 문법 강의 1주차 완! 본문

🎮 Unity_7 TIL WIL

[TIL Day 7] C# 기초 문법 강의 1주차 완!

fociend 2025. 1. 27. 12:39

검은색 이미지가 너무 칙칙해보여서 파란체크무늬로 변경해보았다.. 챕터마다 바꾸어볼까 생각중

오늘의 학습 키워드

- C# 1주차 강의 수강

- 1주차 과제까지 마무리해보기

- 생각보다 시간이 남아서 복습 후 2강 수강


공부한 내용 본인의 언어로 정리하기

C#이란?

- 마이크로소프트에서 만든 객체 지향 프로그래밍 언어, 안전하고 형식이 분명

- 강력한 형식 시스템가비지 컬렉션 기능을 제공

- 다양한 플랫폼에서 사용 가능, .NET 프레임워크에서 실행됨

- C, C++, Java 등 다른 언어들과 문법, 구조적으로 유사

 

강력한 형식 시스템 : 변수나 객체의 자료형이 미리 정의되어 있어 데이터 타입에 대한 안전성과 정확성을 보장하는 시스템

가비지 컬렉션 기능 : 동적 할당된 메모리를 자동으로 회수해주는 기능. C#에서는 개발자가 메모리를 직접 할당하고 해제하는 대신, .NET 프레임워크에서 가비지 수집기가 자동으로 메모리를 해제해줌.

 

여느때나 다름없이 Visual Studio 2022 설치부터 한 후 프로젝트를 만들어줌.

 

프로젝트만 만들어도 기본 Hello World 가 작성 되어있음.

 

F6키 [빌드]

 

Ctrl + F5 [실행]

 

저장 생활화 하기! Ctrl + s

 

Hello World 구조 파악하기

using System;

namespace HelloWorld
{
  class program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("Hello World!");    
    }
  }
}

 

- using System은 C#에서 기본적으로 제공하는 네임스페이스를 사용하기 위한 코드.

  Console 클래스를 사용하기 위해 필요

- namespace는 코드를 구성하는데 사용되며 클래스 및 기타 네임스페이스의 컨테이너.

- class Program은 C# 클래스를 정의하는 키워드. 클래스 이름은 Program으로 지정.

- static void Main()은 C#의 진입점. Main 메서드는 프로그램이 시작할 때 자동으로 호출되는 메서드. Main은 프로그램 실행에 필수적.

- Console.WriteLine("Hello World!"); 은 콘솔에 출력할 내용을 지정하는 코드.

  WriteLine 메서드는 새 줄을 시작하고 출력할 문자열을 인자로 받음.

- {}은 코드 블록의 시작과 끝을 나타내는 중괄호

- 모든 C#문은 세미콜론으로 끝남 ;

 

Console.WriteLine과 Console.Write의 차이

줄바꿈이 있냐 없냐의 차이 입니다. (커서위치)

 

이스케이프 시퀸스(Escape Sequence)

일부 출력에 특수문자가 필요하면 사용합니다.

(따옴표는 잘못하면 오류로 인식 될 수 있기 때문에 앞에 \를 붙여줍니다.)

 

주석의 사용

주석은 // 과 /* */ 가 있으며

//는 해당 줄 끝까지 주석처리이고 /* */는 */를 이용해 마칠때 까지 시작부터 모든 줄이 주석입니다.

 

ctrl + K , C 누르면 주석처리 ctrl + K, U누르면 주석 해제 단축키

 

주석 사용시 주의 할 점

  1. 주석은 코드를 대체하지 않는다 주석은 코드를 대신하는 것이 아니라, 코드를 설명하거나 보충하는 역할을 합니다. 주석으로 코드의 복잡한 부분이나 로직을 대체하지 않아야 합니다.
  2. 주석의 내용은 정확하고 명확해야 한다 주석의 내용은 코드의 작동 방식이나 의도를 명확하게 설명해야 합니다. 주석이 혼란스러우거나 모호하다면 오히려 코드를 이해하기 어려워질 수 있습니다. 주석에 틀린 정보가 포함되지 않도록 주의해야 합니다.
  3. 주석은 업데이트 되어야 한다 코드가 변경되면 주석도 변경되어야 합니다. 주석이 오래된 버전의 코드를 설명하는 것일 경우, 코드와 맞지 않는 정보를 제공할 수 있습니다. 주석은 코드 변경 사항에 맞춰서 업데이트되어야 합니다.
  4. 주석은 필요한 경우에만 사용해야 한다 코드가 명확하고 의도가 분명하다면 주석은 필요하지 않을 수도 있습니다. 불필요한 주석은 코드를 복잡하게 만들 수 있습니다. 주석은 코드를 이해하는 데 도움이 되는 경우에만 사용하는 것이 좋습니다.

변수명 지을 때

1. 예약어로 X → 이미 많은 예약어가 사용되고 있기 때문에 피해서 변수명을 지어야함.

2. 식별자를 이용할 때 규칙 

- 첫 문자는 알파벳, 언더스코어(_)가 올 수 있음

- 두 번째 부터는 알파벳, 언더스코어, 숫자가 올 수 있음

- 대, 소문자를 구분함. Com , com은 다른 변수명. 헷갈리지 않게 주의!!

- 키워드와 같은 이름으로 사용 X

3. 아무 의미없는 변수명보다 알아보기 쉬운 변수명이 훨씬 좋음.

ex) int a (X), int score (O) a가 뭘뜻하는건지 알 수없지만 score는 점수라는 것을 바로 알 수 있음.

 

코드 컨벤션

개발자들 사이에서 약속된 코드 작성 규칙으로, 코드의 가독성을 높이고 유지 보수를 쉽게 하기 위해 사용

 

식별자 표기법

1. PascalCase: 클래스, 메서드, 프로퍼티 이름 등에 사용됩니다. 단어의 첫 글자는 대문자로 시작하며, 이후 단어의 첫 글자도 대문자로 표기합니다. ex) ClassName

2. camelCase: 변수, 매개변수, 로컬 변수 이름 등에 사용됩니다. 단어의 첫 글자는 소문자로 시작하며, 이후 단어의 첫 글자는 대문자로 표기합니다. ex) isHard

3. 대문자 약어: 예외적으로 전체 글자가 모두 대문자인 식별자도 있습니다. ex) ID, HTTP 등

 

코드 컨벤션을 지키면 코드의 가독성이 좋아지고 유지보수가 용이해집니다.

따라서 C# 개발을 할 때는 코드 컨벤션을 준수하는 것이 좋습니다.

 

형변환

명시적 형변환, 암시적 형변환

자료형이 같지 않은 상태에서 연산을 하려면 형변환을 해줘야함.

int num1 = 10;
long num2 = (long)num1;   // int를 long으로 명시적 형변환

작은 데이터 타입에서 더 큰 데이터 타입으로 대입하는 경우 암시적으로 형변환이 일어남 

눈에 안 보이는 것 뿐이지 형변환이 일어납니다.

 

Console.ReadLine()

사용자가 입력한 값을 문자열로 반환하는 메소드.

string input = Console.ReadLine();

Console.ReadLine 메소드는 사용자가 입력한 값을 문자열로 반환하므로, 숫자나 논리값을 입력받을 때에는 적절한 형변환을 해주어야 합니다. 안 하면 문자열로 인식합니다.

 

한 줄에 여러가지 값을 입력받고 싶다면 Spilt을 사용합니다. (문자형을 나누어서 처리함)

Console.Write("Enter two numbers: ");
string input = Console.ReadLine();    // "10 20"과 같은 문자열을 입력받음

string[] numbers = input.Split(' ');  // 문자열을 공백으로 구분하여 배열로 만듦
int num1 = int.Parse(numbers[0]);     // 첫 번째 값을 정수로 변환하여 저장
int num2 = int.Parse(numbers[1]);     // 두 번째 값을 정수로 변환하여 저장

int sum = num1 + num2;                // 두 수를 더하여 결과를 계산

Console.WriteLine("The sum of {0} and {1} is {2}.", num1, num2, sum);

- Parse는 string을 int로 변환할때 씁니다. string 변수값에 10 20과같은 숫자값이 아닌 ABC같은 문자값이 들어간다면 Parse는 error가 나게 됩니다.

10 20으로 넣었을 때
a, b로 넣었을 때

 

Var 마법의 단어

var 키워드를 사용하여 변수를 선언할 때에는 초기화하는 값의 자료형에 따라 변수의 자료형이 결정되므로, 변수를 선언하는 시점에서 변수의 자료형을 정확히 알 수 없는 경우에 유용하게 사용할 수 있습니다. 

받는 자료형이 정확하지 않을 때만 쓰는 것을 추천

var num = 10;         // int 자료형으로 결정됨
var name = "kero";   // string 자료형으로 결정됨
var pi = 3.141592;    // double 자료형으로 결정됨

 

비트 연산자

비트 연산자는 데이터의 비트(bit) 단위로 연산을 수행하는 연산자입니다.

int a = 0b1100; // 12 (2진수)
int b = 0b1010; // 10 (2진수)

int and = a & b; // 0b1000 (8)
int or = a | b; // 0b1110 (14)
int xor = a ^ b; // 0b0110 (6)

int c = 0b1011; // 11 (2진수)
int leftShift = c << 2; // 0b101100 (44)
int rightShift = c >> 1; // 0b0101 (5)

 

a = 1100

b = 1010

 

a & b → & : 두 비트 값이 모두 1일때 1 반환 

 

1100

1010                a & b = 1000(8)

-------               모두1인 경우는 제일 처음밖에 없기때문에 처음만 1 나머지는 0으로 반환

1000

 

연산자 우선순위

  1. 괄호 (): 괄호로 감싸진 부분은 가장 높은 우선순위로 먼저 계산됩니다.
  2. 단항 연산자: 단항 연산자들(++, --, +, -, ! 등)은 괄호 다음으로 높은 우선순위를 가집니다.
  3. 산술 연산자: 산술 연산자들(*, /, %, +, -)은 단항 연산자보다 우선순위가 낮습니다.
  4. 시프트 연산자: 시프트 연산자(<<, >>)는 산술 연산자보다 우선순위가 낮습니다.
  5. 관계 연산자: 관계 연산자들(<, >, <=, >=, ==, !=)는 시프트 연산자보다 우선순위가 낮습니다.
  6. 논리 연산자: 논리 연산자들(&&, ||)는 관계 연산자보다 우선순위가 낮습니다.
  7. 할당 연산자: 할당 연산자들(=, +=, -=, *=, /= 등)는 논리 연산자보다 우선순위가 낮습니다.

문자열 처리 기능 및 메서드

1. 문자열 생성

string str1 = "Hello, World!"; // 리터럴 문자열 사용
string str2 = new string('H', 5); // 문자 'H'를 5개로 구성된 문자열 생성

 

2. 연결

string str1 = "Hello";
string str2 = "World";
string str3 = str1 + " " + str2;

이 방법은 무겁기 때문에 별로 추천하지 않음

 

3. 분할

string str = "Hello, World!";
string[] words = str.Split(',');

 

4. 검색

string str = "Hello, World!";
int index = str.IndexOf("World");

 

5. 대체

string str = "Hello, World!";
string newStr = str.Replace("World", "Universe");

 

6. 변환

string str = "123";
int num = int.Parse(str);

int num = 123;
string str = num.ToString();

 

7. 비교

string str1 = "Hello";
string str2 = "World";
bool isEqual = str1 == str2; //값 비교

string str1 = "Apple";
string str2 = "Banana";
int compare = string.Compare(str1, str2); // 대소 비교

compare 변수는 0보다 작으면 str1이 str2보다 작고, 0이면 str1과 str2가 같으며, 0보다 크면 str1이 str2보다 크다는 의미

 

8. 포멧팅

문자열 형식화

string name = "John";
int age = 30;
string message = string.Format("My name is {0} and I'm {1} years old.", name, age);

 

문자열 보간

string name = "John";
int age = 30;
string message = $"My name is {name} and I'm {age} years old.";

 

둘 중에 편한 방법으로 쓰면 됨.

포멧팅은 많이 쓰는 방식이기 때문에 기억해두면 좋다!

 

3항 연산자

(조건식) ? 참일 경우 값 : 거짓일 경우 값;

- 간단하게 쓰기 좋음. 함축된 것이라고 생각하면 됨. 잘 쓰지는 않음

int currentExp = 1200;
int requiredExp = 2000;

string result = (currentExp >= requiredExp) ? "레벨업 가능" : "레벨업 불가능";
Console.WriteLine(result);

 

에러사항

에러사항이 없을 줄 알았지만 과제를 직접 해보면서 또 여러가지 에러사항을 겪었다.

1. ReadLine 메소드

string num1 = Console.ReadLine();
string num2 = Console.ReadLine();

Console.WriteLine("{num1 + num2}");

처음엔 생각을 제대로 하지 않고 저렇게 적었는데 코드에 빨간 줄이 쳐졌다.

커서를 대보니 string은 계산을 할 수가 없다고한다. 그래서 변환을 시켜줘야 하구나를 생각하고 코드를 바꿔 주었다.

자료 앞에 변환하고 싶은 자료형을 붙여주니 해결되었다.

 

또한 ReadLine은 변환이 없는 한 무조건 string 자료형이다. 기억해두자! 

 

2. 제곱표현

과제를 하던 도중 제곱을 해야하는 상황이 있었다. 변수^2라고 그대로 코드에 치니 빨간 줄이 또 쳐졌다.

그래서 인터넷 검색을 해본 결과 제곱은 변수 * 변수 를 하거나 아니면 Math.pow라는 함수를 이용해야했다.

만약 제곱을 하고싶다면 Math.Pow(num, 횟수);로 이용하면 된다.

 


오늘의 회고

간단한 문법 공부를 요 며칠 내내 공부하는 것 같다. 익숙하고 너무나 당연한 것들이라서 훑고 넘어가긴 했는데 중간에 새로운 부분도 알 수 있어서 좋았다. 나는 C#말고 C와 C++을 공부했었기 때문에 비슷하면서도 다른 부분이 좀 있어서 그래도 꼼꼼히 보려고 한다. 

 

오늘 생각보다 공부한 내용이 좀 많은 것 같다 복습을 해놓는게 좋을 것 같다. 이제 점점 코딩에 좀 익숙해지고 있는 것 같다. 오랜만에 비주얼 스튜디오를 만지니까 처음엔 어색했는데 이젠 좀 적응됐다. 기분은 좋음 ㅎㅎ

 

팀원들이 모르는게 있어서 가르쳐주려고 했는데 생각보다 머리로는 "이렇게 해 저렇게 해"가 됐는데 말로 설명하려하니 쉽지가 않았다. 왜 이걸 써야하는지 부터 설명을 하려니 좀 당황했다. 좀 더 많이 생각해보고 알려드릴 때 잘 알려드리고싶다.

 


내일 공부할 것

내일은 설날이라 쉽니다.

근데 강의 한 두개는 들을 거 같긴합니다. ^^&