Unity 내일배움캠프 TIL 0814 (1) | C# 기초 | 변수와 자료형 | 연산자와 문자열

cheeseonrose·2023년 8월 14일
1

Unity 내일배움캠프

목록 보기
6/89
post-thumbnail

2주차에는 C# 기초 프로그래밍 주차이다!

새로운 팀과 함께 으쌰으쌰 공부 시작 ~.~

C# 소개

C# 특징

  • 객체지향 프로그래밍 언어
  • 강력한 형식 시스템
    • 변수나 객체의 자료형이 미리 정의되어 있어, 데이터 타입에 대한 안정성과 정확성을 보장하는 시스템
    • 안전한 코드 작성 가능
  • 가비지 컬렉션 기능
    • 동적 할당된 메모리를 자동으로 회수해주는 기능
    • .NET 프레임워크에서 가비지 수집기가 자동으로 메모리를 해제
  • 다양한 플랫폼에서 사용 가능
  • .NET 프레임워크에서 실행됨

.NET 프레임워크

  • Microsoft에서 개발한 프로그래밍 플랫폼
  • 다양한 프로그래밍 언어를 제공
  • 프로그래머가 개발 -> 중간 언어 생성 -> 각각의 플랫폼에서 변환하여 사용

자동 완성

  1. 클래스, 메서드, 변수 이름을 입력할 때 Tab 키
  2. Console.WriteLine -> Console. 까지 입력하고 Tab
  3. 메서드나 변수 입력 도중 Ctrl + Space 로 IntelliSense 호출 -> 해당 메서드나 변수에 대한 정보와 예제 볼 수 있음
  4. 코드나 코드 템플릿 사용
    ex) for 입력하고 Tab 키 두번 누르면 for문의 기본적인 코드 템플릿 자동 생성

프로그래밍 기본 요소

using

  • 네임스페이스를 호출
  • using System; : Console 클래스를 사용하기 위해 필요

namespace

  • 코드를 구성하는 데 사용됨, 클래스 및 기타 네임스페이스의 컨테이너

Console.Write

  • WriteLine과 비슷하지만 끝에 줄바꿈 문자열을 추가하지 않음

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

  • 문자열 내에 특수한 문자를 포함시키기 위해 사용

    이스케이프 시퀀스설명
    \'작은 따옴표(') 삽입
    \"큰 따옴표(") 삽입
    \역슬래시() 삽입
    \n줄바꿈 삽입
    \r현재 줄 맨 앞으로 이동
    \tTab 삽입
    \b백스페이스 삽입
  • 예시

    • "Hello" 까지 입력하고 맨 앞으로 이동해서 다시 World를 입력하므로 World만 출력

주석(Comments)

  • 코드의 설명이나 개발자 간의 의사소통을 위해 사용
  • // : 한 줄 주석. 해당 줄 끝까지 주석 처리
  • /* */ : 여러 줄 주석. 시작과 끝을 명시하여 주석 처리
  • 주석의 내용은 정확하고 명확하게
  • 주석은 업데이트 되어야 하며, 필요한 경우에만 사용

변수와 자료형

기본 자료형 (중요한 것만)

자료형.NET 데이터 타입크기(바이트)범위
intSystem.Int324-2,147,483,648 ~ 2,147,483,647
longSystem.Int648-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
floatSystem.Single4±1.5 × 10^-45 ~ ±3.4 × 10^38
doubleSystem.Double8±5.0 × 10^-324 ~ ±1.7 × 10^308
charSystem.Char2유니코드 문자
stringSystem.String유니코드 문자열
boolSystem.Boolean1true / false
  • 변수를 세분화하여 사용하는 이유
    • 메모리의 효율적 사용
    • 정확한 데이터 표현
    • 타입 안정성

리터럴(literal)

  • 프로그램에서 직접 사용되는 상수 값. 소스 코드에 직접 기록되어 있는 값

  • C#에서 리터럴은 컴파일러에 의한 상수 값으로 처리되며, 변수나 상수에 할당되거나 연산에 사용

    종류예시
    정수형10(int)
    0x10 (16진수 int)
    0b10 (2진수 int)
    10L (long)
    10UL (Unsigned long)
    부동소수점형3.14 (double)
    3.14f (float)
    3.14m (decimal)
    문자형'A' (char)
    '\n' (개행 문자)
    '\u0022' (유니코드 문자)
    문자열"Hello, World!" (string)
    "문자열 내 "따옴표" 사용"
    "문자열 내 개행문자\n 사용"
    int num = 10;
     float f = 3.14f;
     char c = 'A';
     string str = "Hello, World!";
     
     int num1 = 0x10;
     int num2 = 0b1010;

변수 선언과 초기화 방법

  • 변수 : 데이터(숫자, 문자) 등을 저장하고 사용하기 위해 할당받은 공간
자료형 변수이름;
int num;
num = 10;

int num2 = 100;

변수명

  • 키워드(Keywords) : C#에서 이미 예약된 단어들 -> 변수, 메소드, 클래스 이름으로 사용할 수 없음
  • 식별자(Identifiers) : 변수, 메서드, 클래스, 인터페이스 등에 사용되는 이름
    1. 첫 문자는 알파벳, 언더스코어(_)가 올 수 있음
    2. 두 번째 문자부터 알파벳, 언더스코어, 숫자가 올 수 있음
    3. 대소문자를 구분
    4. 키워드와 같은 이름 사용 불가능
  • 변수 이름은 변수가 어떤 값을 저장하는지 명확하게 드러나도록 정해야 함

코드 컨벤션(Code convention)

  • 개발자들 사이에서 약속된 코드 작성 규칙
  • 가독성을 높이고 유지보수를 용이하게 함
  • 식별자 표기법
    • PascalCase : 클래스, 메서드, 프로퍼티 이름의 첫 문자는 대문자로 시작, 이후 단어의 첫 문자도 대문자로 표기 (ClassName, MethodName)
    • calmelCase : 변수, 매개변수, 로컬 변수의 첫 문자는 소문자로, 이후 단어의 첫 글자는 대문자로 표기 (variableName, parameterName)
    • 대문자 약어 : 전체 글자가 모두 대문자 (HTTP, ID)
  • 들여쓰기
    • 탭(tab) 또는 스페이스(space) 4칸을 사용하여 코드 블록을 들여씀
  • 중괄호 위치
    • 항상 새로운 줄에서 시작
  • 빈 줄 사용
    • 관련 없는 코드 사이 빈 줄을 사용해 구분
    • 메서드, 클래스 등 블록 사이에는 두 줄을 띄어씀
  • 주석
    • 한 줄 주석을 사용

형변환

  • 자료형이 다른 변수 간에 값을 할당하거나 연산을 수행할 때 사용
  • 명시적 형변환(explicit casting) : (자료형) 형식
    int num1 = 10;
     long num2 = (long) num1;
  • 암시적 형변환(implicit casting)
    • 작은 데이터 타입 -> 큰 데이터 타입 대입
    byte num1 = 10;
     int num1 = num2;
    • 리터럴 값 대입
    float result = 1;
    • 정수형과 부동소수점형 간의 연산 수행
    int num1 = 10;
     float num2 = 3.14f;
     float result = num1 + num2;

Console.ReadLine

  • 콘솔 입력을 받을 때 사용
  • 사용자가 입력한 값을 문자열로 반환
  • 숫자나 논리값을 입력 받을 때는 형변환 필요
  • split
    • 사용자로부터 여러 개의 값을 입력받고 싶을 때, Console.ReadLine으로 입력받은 뒤 string.split으로 문자열을 나누어 처리

var

  • 변수의 자료형이 컴파일러에 의해 자동으로 결정됨
var num = 10;			// int
var name = "potato";	// string
var pi = 3.141592;		//double

연산자와 문자열 처리

산술연산자

연산자설명
+덧셈
-뺄셈
*곱셈
/나눗셈
%나머지

관계연산자

연산자설명
==같음
!=다름
>
<작음
>=크거나 같음
<=작거나 같음

논리연산자

연산자설명
&&논리곱(AND)
||논리합(OR)
!논리부정(NOT)

비트연산자

연산자설명
& (AND)두 비트 값이 모두 1일 때 1 반환
| (OR)두 비트 값 중 하나라도 1이면 1 반환
^ (XOR)두 비트 값이 서로 다르면 1 반환
~ (NOT)비트 값의 보수(complement)를 반환
<< (왼쪽 시프트)비트를 왼쪽으로 이동
>> (오른쪽 시프트)비트를 오른쪽으로 이동
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)

int d = 0b1100;				// 12 (2진수)
int bit3 = (d >> 2) & 0b1; 	//	0 (3번째 비트)
d |= 0b1000; 				// 0b1100 | 0b1000 = 0b1100 (12)

복합 대입 연산자

연산자예시설명
+=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. 괄호()
  2. 단항 연산자 (++, --, !)
  3. 산술 연산자 (*, /, %, +, -)
  4. 시프트 연산자 (<<, >>)
  5. 관계 연산자 (<, >, <=, >=, ==, !=)
  6. 논리 연산자 (&&, ||)
  7. 할당 연산자 (=, +=, -=, *=, /=)

문자열 처리

  • 문자열 생성

    string str1 = "Hello, World!";
     string str2 = new string('H', 5); // 문자 H 5개로 구성된 문자열 생성
  • 연결

    string str1 = "Hello";
     string str2 = "World";
     string str3 = str1 + str2;
  • 분할

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

    • "World" 문자열의 첫 번째 인덱스를 찾아서 index에 저장
    string str = "Hello, World!";
     int index = str.IndexOf("World");
  • 대체

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

    // 문자열 -> 숫자
    string str = "123";
     int num = int.Parse(str);
    // 숫자 -> 문자열
    int num = 123;
    string str = num.ToString();
  • 비교

    string str1 = "Hello";
     string str2 = "World";
     bool isEqual = str1 == str2;
    // 사전상 뒤에 나올수록 큰 것
     // str1 < str2 -> compare < 0
     // str1 == str2 -> compare == 0
     // str1 > str2 -> compare > 0
    string str1 = "Apple";
    string str2 = "Banana";
    int compare = string.Compare(str1, str2);
  • 포멧팅

    string name = "potato";
     int age = 100;
     string message = string.Format("My name is {0} and I'm {1} years old.", name, age);
     string message2 = $"My name is {name} and I'm {age} years old.";
  • 실행 결과


1주차 과제

사용자로부터 이름과 나이 입력 받아서 출력하기

static void Main(string[] args)
{
  Console.Write("Enter your name and age: ");
  string[] answer = Console.ReadLine().Split(' ');
  string name = answer[0];
  int age = int.Parse(answer[1]);
  Console.WriteLine($"name: {name}, age: {age}");
}

간단한 사칙연산 계산기 만들기

static void Main(string[] args)
{
  Console.Write("Enter your two numbers: ");
  string[] answer = Console.ReadLine().Split(' ');
  int num1 = int.Parse(answer[0]);
  int num2 = int.Parse(answer[1]);

  Console.WriteLine("{0} + {1} = {2}", num1, num2, num1 + num2);
  Console.WriteLine("{0} - {1} = {2}", num1, num2, num1 - num2);
  Console.WriteLine("{0} * {1} = {2}", num1, num2, num1 * num2);
  Console.WriteLine("{0} / {1} = {2}", num1, num2, num1 / num2);
  Console.WriteLine("{0} % {1} = {2}", num1, num2, num1 % num2);
}

섭씨 -> 화씨 온도 변환기 만들기

static void Main(string[] args)
{
  Console.Write("Enter Celsius degree: ");
  int celcius = int.Parse(Console.ReadLine());
  Console.WriteLine("Fahrenheit Degree is {0}", (celcius * 1.8) + 32);
}

BMI 계산기 만들기

static void Main(string[] args)
{
  Console.Write("Enter your weight and height: ");
  string[] answer = Console.ReadLine().Split(' ');
  int weight = int.Parse(answer[0]); 
  int height = int.Parse(answer[1]);
  Console.WriteLine("Your BMI is " + (weight / (height * height * 0.0001)).ToString("N2"));
}

0개의 댓글