§ 기초 §
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace C#_Basic
{
class Program
// class : main함수를 감싸고 있는 공간 // C의 구조체 개념
{
static void Main(string[] args)
// string : 문자열 | [] : 배열 | args : 매개변수
{
System.Console.WriteLine("Hello World");
// Console.WriteLine = printf와 같은 개념
Console.Write("Hello World");
// System.Console. ~ : 기본 형태. but, System을 using으로 불러왔기 때문에, 사용할때는 생략해도 된다.
// Write : 쭈욱 연결해서 작성
// WriteLine : 줄바꿔서 작성
}
}
}
using : 기존에 만들어져 있거나, 사용자가 임의로 만든 Library 내부에 있는 내용을 사용하겠다라는 의미. | 일종의 namespace
namespace : class, structure(구조체) 등을 관리하는 일종의 모음집. | 각기 다른 스크립트라도, namespace가 동일하다면, 같은 공간내에 있는 것으로, 각기 참조가 가능하다.
프로젝트명으로 관리.
class, struct : field, method 등을 모아놓은 장소.
// : 한 줄 주석
/* */ : 여러 줄 주석
주석 단축키 : ctrl k c ( 주석 생성 ) / ctrl k u ( 주석 제거 ) -> block 단위도 가능
주석 단축키 : ctrl e c ( 주석 생성 ) / ctrl e u ( 주석 제거 ) -> block 단위도 가능
§ 리터럴 ( 접미사 ) § 보수법 §
리터럴 : 변수를 더 잘 구분하기 위해서, 숫자의 끝부분에 붙이는 접미사
보수법 : < 참조URL : https://zapiro.tistory.com/entry/컴퓨터의-음수-표현법보수법 >
using System; // 회색 글자 : 선언은 되었으나, 아직 사용되지 않고 있다는 의미
// 흰색 글자 : 선언 되고, 사용되고 있다는 의미
namespace Basic
{
class ClassBasic
{
static void Main(string[] args) // sv + tab + tab
{
// Console.WriteLine( args[1] ); // cw + tab +tab
// 리터럴 ( 접미사 )
// int, double, string, bool, unsigned int, unsigned long, 8진수, 10진수 : 접미사 없이 디폴트값 사용
// 부동소수점 사용하는 실수형은 접미사 필요
// 2진수 : 0b
// 16진수 : 0x
// 진수 출력
byte A = 120;
byte B = 240; // 10진수
Console.WriteLine("A : {0} \nB : {1}", A, B);
// string format() 배열의 순서에 맞게 추출하겠다는 의미.
byte C = 0b000_00111; // 2진수
Console.WriteLine($"C : {C}");
// $ 을 사용하여 포맷팅
// _ : 사용하더라도, 인식되지 않으므로, 자리수를 계산할때 사용하면 좋다
byte D = 0xFF; // 16진수
Console.WriteLine($"D : {D}");
// 진법 변환
int E = 15;
Console.WriteLine(Convert.ToString(E, 2)); // 10진수 -> 2진수 변환
Console.WriteLine(Convert.ToString(E, 8)); // 10진수 -> 8진수 변환
Console.WriteLine(Convert.ToString(E, 16)); // 10진수 -> 16진수 변환
// 보수법
// -5 -> 2진수 변환
// 0000 0101 : 1의 보수 : 5
// 1111 1010 : 2의 보수 : -6
// 1111 1011 : : -5
// 컴퓨터의 계산법 : + 만 가능하다
// 5 - 3 구하기 -> 5 + (-3)
// 0000 0101 : 5
// +
// 1111 1101 : -3
// =
// 1111 1011 : -5
// 연산자
bool b = true; // false // 참과 거짓 판별
// 정수형
// 부호가 있는 정수형
short sh = 100; // 16bit 정수형 ( + - )
int i = 100; // 32bit 정수형 ( + - )
long l = 1000000; // 64bit 정수형 ( + - )
sbyte sb = 125; // -128 ~ 127 // 범위 이탈시, 빨간 줄과 함께 에러 발생
// 부호가 없는 정수형 // unsigned를 u로 줄여서 사용
ushort us = 100; // 16bit 정수형 ( + )
uint ui = 100; // 32bit 정수형 ( + )
ulong ul = 1000000; // 64bit 정수형 ( + )
byte by = 0x0E; // 8bit // 0 ~ 255 // 0x0E : 16진수 사용값
// 실수형 // float도 있으나, 대체로 double을 사용한다
// 고정 소수점
// 부동 소수점
float f = 3.01f; // 32bit 실수형 // 초기화 다음에 f를 붙여줘야 인식된다.
double d = 3.14259d; // 64bit 실수형 // 접미사 d 필요하지만, 생략 가능 -> default 부여
decimal dc = 3.14957242m; // 128bit 실수형 // 접미사 m 필요
}
}
}
§ Variable §
◈ value type : 숫자, 문자, bool
- Stack Memory 저장
◈ ref type : string, object
- Heap Memory 값 저장, Stack memory에는 해당 변수와 주소 저장.
- 지정 변수를 통해서 Stack의 주소로 접근, Heap 내부의 값 출력
using System;
namespace Basic
{
class ClassBasic
{
static void Main(string[] args)
{
// 문자형
string s = "JO"; // 문자형 // 유니코드 문자열
char c = '까'; // 16 bit 유니코드 -> 2byte
object ob = ""; // 어떤 타입이라도 모두 사용가능함. 값 입력시, 타입 결정
var v = 32; // 값 입력시, 타입 변환, 결정. 지역변수형
// NULL 과 0 의 차이
// null : 값과 형태가 완전히 존재하지 않음
// 0 : 형태는 있으나, 값만 없음
// int aa = null; // int는 null을 허용하지 않는 타입으로 null을 변환할 수 없음
int? a_ = null; // 다만, int + ? 을 사용하면, 값 null을 사용할 수 있다.
// double cc = null; // double도 null을 허용하지 않음
double? c_ = null; // double + ? 도 null 사용이 가능해진다.
string bb = null;
// Type의 Max, Min
int ii = int.MaxValue;
Console.WriteLine(ii);
int ii_ = int.MinValue;
Console.WriteLine(ii_);
byte i_i = byte.MaxValue;
Console.WriteLine(i_i);
byte a1 = 255;
sbyte b1 = (sbyte)a1; // cast 연산 - 형 변환
// 보수법 표현
// 1111 1111 : -1
// 0000 0000 : 1의 보수
// 0000 0001 : 2의 보수
Console.WriteLine(a1);
Console.WriteLine(b1);
// Overflow
uint c1 = uint.MaxValue;
Console.WriteLine(c1);
c1 = c1 + 1;
Console.WriteLine("결과 : {0}",c1);
// Underflow
uint c2 = uint.MinValue;
Console.WriteLine(c2);
c2 = c2 - 152;
Console.WriteLine("결과 : {0}",c2);
byte c3 = 0;
Console.WriteLine(c3);
c3--;
Console.WriteLine("결과 : {0}", c3);
string s1= "졸려......";
Console.WriteLine(s1);
float fa = 69.6875f;
Console.WriteLine("fa : {0}", fa);
double da = (double)fa;
Console.WriteLine("da : {0}",da);
Console.WriteLine("69.6875 == b : {0}", 69.6875 == da);
float x = 0.1f;
Console.WriteLine("x : {0}", x);
double y = (double)x;
Console.WriteLine("y : {0}", y);
Console.WriteLine("0.1f == y : {0}", 0.1f == y);
// 부동 소수점 10진수 -> 2진수 변환
// 69.6875
// 0100 0101.1011 -> 2진수 변환
// 1.0001011011 x 2^6 -> 정규화
// 0001011011 -> 가수부에 입력 : 소수점이하 부분 전체
// 6 + (bias)127 = 133
// 1000 0101
// 실제 메모리에 저장되는 형태
// 상수
// 변수의 value가 변경되지 않는 것
const int a6 = 3;
// a6 = 5;
Console.WriteLine(a6);
// var
// 의도치 않은 형식의 데이터를 읽거나, 할당하는 일 차단
// 선언과 동시에 초기화 필수
// 지역변수로만 사용된다
var a7 = 50;
Console.WriteLine("{0}\n{1}", a7.GetType(), a7);
var b6 = "양아지";
Console.WriteLine("{0}\n{1}", b6.GetType(), b6);
// 결론 : C에서 하던대로 하라...
}
}
}
§ 변수 형변환 2가지 방법 §
◈ 변수.ToString();
◈ Convert.To전환타입(변수);
using System;
namespace Basic
{
class ClassBasic
{
static void Main(string[] args)
{
// 형변환 - Data Type 변환
int a2 = 123;
string b2 = a2.ToString();
// 정수형 a2의 값 123을 ToString()을 사용하여 문자형 b2에 삽입
Console.WriteLine(b2);
float a3 = 5.15f;
string b3 = a3.ToString();
// 실수형 a3를 문자형 b3로 변환
Console.WriteLine(b3);
string a4 = "19970302";
int b4 = Convert.ToInt32(a4);
// 문자형 a4를 컨버터를 통하여 정수형 b4로 변환
Console.WriteLine(b4);
string a5 = "0.900123";
double b5 = double.Parse(a5);
Console.WriteLine(b5);
Console.WriteLine(a2.GetType()); // 변수 a2의 타입확인
Console.WriteLine(a4.GetType());
}
}
}