C# 문법
Console.WriteLine 과 Console.Write 의 차이점
Console.WriteLine 은 실행후 줄바꿈을 하지만
//Console.WriteLine("나는");
//Console.WriteLine("무엇인가");
//출력:나는
// 무엇인가
Console.Write 는 줄바꿈을 하지 않는다
//Console.Write("나는");
//Console.Write("무엇인가");
//출력 나는무엇인가
이스케이프 시퀸스
문자열 내에 특수문자를 표기하고 싶을 때:
커서의 위치를 바꾸는 것:
주석
주석은 코드의 설명이나 개발자간의 의사소통을 위해 사용됨
//
그 줄에 한해 주석처리가 된다. 단축키는 [Ctrl]+k c (주석처리) [Ctrl]+k u (주석해제)
/* */
/*로 시작하여 */ 까지 주석처리로 한다.
주석을 사용할 때 주의할 점
1.주석은 코드를 대체하지 않는다.
-주석의 용도는 코드의 로직을 설명하는 것이지 로직을 구현하지 않는다.
2.주석의 내용은 정확하고 명확하게 적어야한다.
-코드의 작동 방식이나 의도를 명확하게 설명할 수 잇어야 하므로 혼란스럽거나 모호한 내용으로 코드 이해를 방해시키면 안된다.
3.주석은 항상 최신화해야한다.
-주석이 오래된 버전의 코드를 설명한다면 설명이 코드와 맞지 않는 정보를 제공할 수 있기에 항상 최신화 시켜야한다.
4.필요한 경우에만 주석을 사용한다.
-주석의 불필요한 남용은 오히려 코드를 복잡하게 하므로 코드를 이해할 때 도움이 되는 경우에만 작성한다.
자동완성
코드를 작성하며 [tab]을 눌러 필요한 기능을 자동완성을 시킬 수 있고
이미 종료된 자동완성을 사용하려면 [ctrl] + [space bar]를 하여 다시 자동완성을 불러올 수 있다.
자료형
자료형 .Net 데이터 타입 크기(Byte)
int System.Int32 4
long System.Int64 8
float System.Single 4
double System.Double 8
char System.Char 2
string System.String
bool System.Boolean 1
자주 쓰는 자료형만 나열..
자료형을 세부적으로 구분하는 이유는
1. 효율적인 메모리 사용
필요한 크기만큼의 메모리를 할당하여 자료형을 선택하면 불필요한 용량을 최적화할 수 있다
2.정확한 데이터 표현
실수를 자료형으로 사용할 때 float와 double은 소수점 이하 자릿수가 다르며 세부적인 값을 다룬다면
값에서 차이가 발생할 수 있기에 자료형을 선택하고 사용할 때 신중을 기하여야 합니다.
3.타입 안정성
세분화된 자료형을 사용하여 코드의 타입 안정성을 유지할 수있습니다. 정수형 자료형으로 byte를 사용할 경우 자료형이
가질 수 있는 값의 범위를 벗어나면 오류가 발생합니다.
리터럴
리터럴은 프로그램에서 직접 사용되는 상수 값으로
C#에서 리터럴은 컴파일러로 인해 상수값으로 처리되며 변수나 상수값으로 사용되거나 연산에 이용된다.
리터럴은 변수를 사용할 때의 규칙 같은 역할이다.
예를 들어 float 자료형을 사용하여 변수를 선언할 때 값 뒤에 f를 붙이는 것 같은 개념이다.
변수
변수를 선언하는 방법은
자료형 변수이름;
과 같습니다.
예를 들어 int 자료형의 변수를 선언하는 경우
int num;
과 같이 사용하고
한번에 변수 여러개를 선언할 수도 있습니다.
int num1, num2 , num3;
변수를 초기화를 하는 방법은 = (대입) 을 사용합니다.
= (대입)은 오른쪽의 값을 왼쪽으로 복사를 합니다.
변수이름 = 값;
int num;
num = 10;
과 같이 정수형 변수 num을 선언하고 num의 값을 10으로 초기화 시킵니다.
int num = 10;
처럼 동시에 선언도 가능하며
한번에 여러개의 변수 또한 초기화가 가능하지만
int num1, num2, num3 =10;
처럼 사용하면 num3만 10으로 초기화되며
num1 = num2 =num3 =10;
처럼 num3을 10으로 초기화하고 num2를 num3의 값으로 초기화하고 num1을 num2의 값으로 초기화 하는 것 처럼
순차적으로 초기화가 가능합니다.
변수명
변수의 이름을 만들 때는 규칙이 있는 데
이미 사용되거나 예약된 단어는 사용이 불가능하다.
abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual void volatile while
처럼 이미 이름들이 존재하는 변수, 메소드, 클래스 의 이름을 똑같이 쓰면 오류가 발생하며 이러한 단어들을
키워드 라고 부른다.
변수,메서드,클래스,인터페이스를 만들어 사용되는 이름을 식별자 라고 부르며
식별자의 규칙은
키워드와 동일한 이름으로 사용할 수 없다.
첫 문자는 알파벳,언더스코어(_)를 사용할 수 있다.
두번째 문자부터는 알파벳, 언더스코어,숫자를 사용할 수 있다.
대소문자를 구분한다.
와 같다.
그리고 식별자는 사용하는 의미의 파악이 쉬운 이름으로 하는 것이 좋다.
// 좋은 예시
int playerScore;
string playerName;
float itemPrice;
// 나쁜 예시 (중요 의미 있는 변수명 짓기)
int x1; // 변수명이 의미를 알기 어려움
string a; // 변수명이 명확하지 않음
// 오류 예시
int 1stNumber; // 변수명은 숫자로 시작할 수 없음
string my-name; // 변수명에 하이픈(-)을 사용할 수 없음
float total$; // 변수명에 특수문자($)를 사용할 수 없음
코드 컨벤션
코드 컨벤션은 개발자들 사이에서 약속된 코드 작성 규칙으로 가독성을 높이고 코드의 유지보수를 쉽게 하기 위해 약속한 규칙입니다.
1. 식별자 표기법
PascalCase: 클래스, 메서드, 프로퍼티 이름 등에 사용됩니다. 단어의 첫 글자는 대문자로 시작하며, 이후 단어의 첫 글자도 대문자로 표기합니다. 예를 들어, ClassName, MethodName, **PropertyName**과 같은 형태입니다
camelCase: 변수, 매개변수, 로컬 변수 이름 등에 사용됩니다. 단어의 첫 글자는 소문자로 시작하며, 이후 단어의 첫 글자는 대문자로 표기합니다. 예를 들어, variableName, parameterName, **localVariableName**과 같은 형태입니다.
대문자 약어: 예외적으로 전체 글자가 모두 대문자인 식별자도 있습니다. 대표적으로 ID, HTTP, FTP 등이 있습니다.
2. 들여쓰기
[Tap]키 또는 [Space bar] 4칸을 사용하여 코드블록을 들여씁니다.
3. 중괄호 위치
중괄호 ({}) 는 항상 새로운 줄에서 시작합니다.
4. 빈 줄 사용
관련 없는 코드 사이에는 빈 줄을 사용하여 구분합니다.
메서드,클래스 등의 블록 사이에는 두 줄을 띄어씁니다.
5.주석 사용
한줄 주석이나 여러줄 주석을 사용하여 다른 개발자들이 보고 이해할 수 있도록 합니다.
아래 링크는 마이크로소프트 C# 코딩 규칙 내용입니다.
https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/coding-style/coding-conventions
형변환
자료형이 다른 변수 간에 값을 할당하거나 연산을 수행하는 것을 말합니다. 이를 수행하려면 명시적 형변환이나
암시적 형변환을 사용하여야 합니다.
명시적 형변환
개발자가 직접 형변환코드를 적어 자료형을 바꾸는 것을 의미합니다.
명시적 형변환은 변수 앞에 (자료형)을 써주면서 사용합니다. // (자료형)(변수이름)
int num1 = 10;
long num2 = (long)num1; // int를 long으로 명시적 형변환
이때 처음 선언되 num1이 long으로 자료형이 바뀌는 게 아니라 선언이 수행된 후 변수가 호출되었을 때
num1의 값인 10을 long 형태로 선언된 num2에 값만 대입시킨거라고 보면 됩니다.
암시적 형변환
암시적 형변환은 직접 형변환 코드를 작성하지 않아도 되므로 코드를 간결하게 작성할 수 있습니다.
하지만, 암시적 형변환이 발생하는 경우 데이터 타입을 신중하게 고려하여 코드를 작성해야 합니다.
1.작은 데이터 타입에서 더 큰 데이터 타입으로 대입하는 경우
byte, short, char 등 작은 데이터 타입에서 int, long, float 등 더 큰 데이터 타입으로 대입할 경우 암시적 형변환이 발생합니다.
byte num1 = 10;
int num2 = num1; // byte형에서 int형으로 암시적 형변환
2.리터럴 값이 대입되는 경우
리터럴 값의 데이터 타입을 판별하여 변수에 암시적으로 형변환시킵니다.
float result = 1; // 1은 int형 리터럴 값이지만 float형으로 암시적 형변환
3. 정수형과 부동소수점형 간의 연산을 수행하는 경우
정수형과 부동소수점형의 연산 결과는 부동소수점형으로 변환 됩니다.
int num1 = 10;
float num2 = 3.14f;
float result = num1 + num2; // int형과 float형의 덧셈에서 float형으로 암시적 형변환
Console.ReadLine
Console.ReadLine 은 c#에서 사용하는 입력 메소드로 c++의 input 과 비슷한 역할입니다.
string input = Console.ReadLine();
Console.ReadLine을 사용하면 선언되고 대입되는 문자열 변수에 사용자가 입력한 값을 변수에 저장합니다.
다음같이 사용하며 입력받은 변수를 WriteLine으로 순서대로 불러옵니다.
Console.Write("Enter your name: ");
string name = Console.ReadLine();
Console.WriteLine("Hello, {0}!", name);
//{}중괄호 안의 숫자는 변수를 불러올 때의 순서입니다. 만약 name 외에 다른 변수가 있었다면 0번째 1번째 순으로 중괄호를 두번 썻어야 할것입니다.
[출력]
Enter your name: Kero
Hello, Kero!
Console.ReadLine 메소드는 사용자가 입력한 값을 문자열로 반환하는 것이기에 숫자나 논리값을 입력받을 때는
적절한 형변환이 필요합니다.
또한 한줄에 여러 개의 값을 입력받고 싶다면 Split() 메소드를 사용합니다.
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);
[출력]
Enter two numbers: 10 20
The sum of 10 and 20 is 30.
입력받은 문자열을 공백으로 나누어 배열로 만들기에 나누어진 값을 불러올 땐 배열을 불러내듯 [0],[1] 처럼 뒤에 순서를 붙여야합니다.
Parse (형변환 메소드)
string[] numbers = input.Split(' ');
int num1 = int.Parse(numbers[0]);
int num2 = int.Parse(numbers[1]);
string 값을 int로 바꿨다. (자료형).Parse(값); 의 형태로 사용한다.
var 키워드
var 키워드는 c# 3.0 부터 사용할 수 있으며
var 키워드를 사용하여 변수를 선언하면 자료형이 컴파일러에 의해 자동으로 결정됩니다.
var num = 10; // int 자료형으로 결정됨
var name = "kero"; // string 자료형으로 결정됨
var pi = 3.141592; // double 자료형으로 결정됨
다른 사람이 쓴 코드의 자료형이 불확실할 때 유용하다.
산술 연산자
+ //더하기
- //빼기
/ //나누기
* //곱
% //나머지
관계 연산자
== //같다
!= //다르다
> //(오른쪽)보다 (왼쪽이) 크다
< //(오른쪽)보다 (왼쪽이) 작다
>= //(오른쪽)보다 (왼쪽이) 크거나 같다
<= //(오른쪽)보다 (왼쪽이) 작거나 같다
논리 연산자
&& //논리곱(and)
|| //논리합(or)
! //논리부정(not)
비트 연산자
데이터를 비트 단위로 연산을 수행한다 (2진수)
& //and 두 비트 값이 모두 1일 때 1을 반환
| //or 두 비트 값이 하나라도 1일 때 1을 반환
^ //xor 두 비트값이 서로 다를 때 1을 반환
~ //not 비트 값의 보수를 반환
<< //왼쪽 쉬프트 값만큼 비트를 왼쪽으로 이동
>> //오른쪽 쉬프트 값만큼 비트를 오른쪽으로 이동
복합 대입 연산자
오른쪽의 결과를 왼쪽에 대입 한다는 것을 알고있다. 복합 대입 연산자는 일종의 약식으로 설명의 식을 축약하여 예시처럼 사용한다.
예시 설명
+= x+=y x=x+y
-= x-=y x=x-y
*= x*=y x=x*y
/= x/=y x=x/y
%= x%=y x=x%y
증감 연산자
변수의 값을 1증가시키거나 감소시킨다.
전위: 처리하려는 변수의 앞에 쓰
후위: 처리하려는 변수의 뒤에 쓰임
++ 1증가
-- 1감소
연산자 우선순위
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;
str1 과 str2를 공백으로 구분한 새로운 문자열 str3으로 연결시킵니다.
3.분할
string str = "Hello, World!";
string[] words = str.Split(',');
문자열 str을 쉼표를 기준으로 나누어 Hello와 World! 로 각각 배열 string[] words 에 집어넣습니다.
4.검색
string str = "Hello, World!";
int index = str.IndexOf("World");
str 문자열에서 World 문자열의 첫번째 인덱스의 값을 index 변수에 저장합니다.
5.대체
string str = "Hello, World!";
string newStr = str.Replace("World", "Universe");
str 문자열에서 World 문자열을 Universe 문자열로 바꿉니다.
6.변환
문자열을 숫자로 변환할 때
string str = "123";
int num = int.Parse(str);
문자열"123"을 정수형 숫자 123으로 변환합니다.
숫자를 문자열로 변환할 때
int num = 123;
string str = num.ToString();
정수형 숫자 123을 문자열 "123"으로 변환합니다.
7.문자열 비교
문자열 값 비교
string str1 = "Hello";
string str2 = "World";
bool isEqual = str1 == str2;
문자열 길이를 비교한 후 같을 때 bool 값을 true로 isEqual 변수에 저장합니다.
문자열 대소 비교
string str1 = "Apple";
string str2 = "Banana";
int compare = string.Compare(str1, str2);
int compare = string.Compare(str1,str2) 는 두 문자열의 대소를 비교한 후 그 값을 변수에 저장합니다.
(알파벳은 소문자가 대문자보다 큰 값을 가짐)
str1이 str2보다 작으면 정수형 변수 compare가 0보다 작아지고
str1이 str2보다 크면 정수형 변수 compare가 0보다 커집니다.
둘의 값이 같으면 0이됩니다.
8.문자열 포맷팅
문자열 형식화
string name = "John";
int age = 30;
string message = string.Format("My name is {0} and I'm {1} years old.", name, age);
format 을 사용하여 문자열인 name 변수와 정수형인 age 변수 message에 삽입합니다.
문자열 보간
string name = "John";
int age = 30;
string message = $"My name is {name} and I'm {age} years old.";
문자열 보간 기능을 사용하여 name 변수와 age 변수의 값을 문자열 message에 삽입합니다.
'TIL' 카테고리의 다른 글
2024 09 23 TIL (메서드) (0) | 2024.09.23 |
---|---|
2024 09 20 TIL (조건문과 반복문) (2) | 2024.09.20 |
2024 09 13 TIL (PlayerPrefs) (0) | 2024.09.13 |
2024 09 12 TIL (코루틴) (0) | 2024.09.12 |
2024 09 11 TIL (1) | 2024.09.11 |