시작하기앞서
프로그래밍이란 컴퓨터에게 어떠한 할일을 명령하여 컴퓨터에게 일을 효과적으로 시키는 것 이라고 볼수도 있다.
문제는 컴퓨터는 0과 1로 모든것을 이해하고 표현한다. 이것을 이진법이라고도하는데 우리가 사용하는 10진법과는 사뭇 다르며 일을 시킬 명령을 할때 모든걸 2진법으로 해야한다면 정말 귀찮아질 것이다..
그래서 왜 갑자기 이런말을 했냐면
사실 이러한 귀찮음과 비효율성때문에 컴퓨터와 소통하기위해 프로그래밍 언어들이 많이 나왔고 지금당장은 전부 이해가 안가더라도 사람이 편하기위해 이런 "약속", "규칙" 들을 이용해서 프로그래밍을 하니 지금부터 알려주는 건 그냥 아 그렇구나 하고 넘어갔으면 좋겠어서 이런 장황한 글로 시작을 하였다.
영어에서 A 가 왜 A 인가요! 하면 언어적으로 어떻게 파생되었고... 부터 시작해야하니 너무 귀찮은일일 것이고
처음 배우는 사람에게 그건 별로 중요한게 아닐것이다. 이제배울 데이터 타입들도 마찬가지이다..
변수란?
수학에서의 변수와 거의 같은 의미를 지닌 변수라는 것이 프로그래밍에선 매우 기본적이고 중요하게 쓰인다.
프로그래밍에서 변수의 뜻은
프로그래밍에서의 변수는 값을 나타내는 문자나 문자들의 집합이며 실행 중인 컴퓨터 프로그램에서, 임의의 값을 저장한 메모리 주소에 대응한다. - 위키백과
아주 정확한 뜻이지만 간단하게 생각해서 값을 나타내는 이름을 가진 데이터 라고 생각하자
혹은 데이터를 저장하기위해 프로그램에의해 이름을 할당받은 메모리 공간이라고 생각해도 좋다.
앞서 말했듯이 컴퓨터는 0,1 이진법으로 소통하기때문에 컴퓨터는 모든 변수들을 2진법으로 이해하겠지만 우리가 이해하기 힘들기 때문에 프로그래밍언어에서는 여러가지 변수 타입들을 이미 지정해두었다.
이러한 규칙및 약속으로 이미 예약되어있는 키워드들을 예약어 라고하며 뒤에도 다시 말하겠지만 이러한 예약어들로는 변수이름을 짓거나 함수이름을 지을수 없다.
이런 키워드들을 통해 변수타입을 지정하여 변수를 선언,정의 할수 있으며 값을 변경 시킬 수도 있다.
string 의 값은 변경이아니라 새로만드는 것에 가까운데.. 너무 복잡한 내용일 수 있으니 자세한건 나중에 알아보자..
혹시나 궁금하다면 string 의 불변성이라고 검색해보자.
일단 말이 더 길어지기전에 간단하게 표로 변수에는 무슨 타입이 있는지 확인해보자.
변수 종류 및 타입
자료형 | 설명 | 범위 및 표현 |
bool | 논리 값을 나타내는 true/false 값 | True 또는 False |
byte | 8 비트 부호 없는 정수 값을 나타냄 | 0 ~ 255 |
sbyte | 8 비트 부호 있는 정수 값을 나타냄 | -128 ~ 127 |
char | 유니코드 문자를 나타냄 | 0부터 65,535까지 |
decimal | 정밀한 128 비트 부동 소수점 값을 나타냄 | ±1.0 x 10^-28에서 ±7.9 x 10^28까지 |
double | 64 비트 부동 소수점 값을 나타냄 | ±5.0 x 10^-324에서 ±1.7 x 10^308까지 |
float | 32 비트 부동 소수점 값을 나타냄 | ±1.5 x 10^-45에서 ±3.4 x 10^38까지 |
int | 32 비트 부호 있는 정수 값을 나타냄 | -2,147,483,648에서 2,147,483,647까지 |
uint | 32 비트 부호 없는 정수 값을 나타냄 | 0에서 4,294,967,295까지 |
long | 64 비트 부호 있는 정수 값을 나타냄 | -9,223,372,036,854,775,808에서 9,223,372,036,854,775,807까지 |
ulong | 64 비트 부호 없는 정수 값을 나타냄 | 0에서 18,446,744,073,709,551,615까지 |
short | 16 비트 부호 있는 정수 값을 나타냄 | -32,768에서 32,767까지 |
ushort | 16 비트 부호 없는 정수 값을 나타냄 | 0에서 65,535까지 |
string | 문자열을 나타냄 | 문자열 |
갑자기 엄청난 표를 봐서 놀랐을지 모르지만 간단하게 잘 사용되는거 위주로 한번 사용해보자.
비주얼 스튜디오를 키고 기본 콘솔용 C# 파일을 하나 만들어서
static void Main(string[] args)
{
//.... 여기다가 적자
}
표시해둔 저부분에 따라 치면 될 것이다.
//[자료형] [변수명] = [변수값]
bool flag = false; // bool 자료형으로 만든 flag 라는 이름의 변수에 false 값을 넣어줘!
먼저 flag 라는 이름의 변수를 만들어보았다 이번에는 "선언" 후 바로 값을 "할당" 해주었다.
여기서 선언이란
어떠한 변수나 나중에 배울 함수, 클래스 등에 데이터의 이름을 선언 해주는 것이라고 생각하면된다.
코드에서는 bool flag; 까지 입력하면 선언 만 하는 게 되는 것이다.
값을 넣어주지않으면 자료형의 기본값이 들어가게되는데 이것은 자료형마다 다르다.
아무튼 현재는 bool flag 하고 "=" 연산자 를 사용하여 false 라는 값을 "할당" 해주 었다.
= 은 수학에서 쓰이는 연산자 지만 수학의 연산자와 다르게 같다 라는 의미가 아니라
오른쪽에 있는 값을 왼쪽에 있는 곳으로 넣어주세요! 할당해주세요! 라는 뜻이다. 주의하자.
또 주의해야할 점이있는데
변수는 같은이름으로 같은 영역에 있으면 선언이 안된다.
같은이름으로 여러개를 만들면 컴퓨터가 무엇을 사용해야하는 지 알 수없으니 당연하다
그런데 같은영역이라는것도 중요한대 이부분은 코드블록 내에 {} 같이 있는 변수로 생각하면 편하다.
또 여러가지 지켜야할 규칙이있는데 아래에 적어두었으니 살짝만 알아보고 지나가자.
굵은 표시로 나온건 꼭지켜야 할 부분이니 이 부분은 꼭 짚고 넘어가야한다.
변수 명명법
- 같은 영역에 같은 이름의 변수이름을 사용할수없다.
- 숫자나 특수문자로 시작하면안된다.
- 변수이름에 예약어를 사용하면안된다.
- 약어를 쓰지말고 최대한 풀어쓰나 너무길어지는건 추천하지않는다.
- 헝가리안표기법은 지양하자 (MS 에서 지양하라고한다.)
- 변수이름은 소문자로 시작하여 카멜식 표기법을 따르는 것을 추천한다.
헝가리안 표기법은 멤버변수일때 m_value 이런식으로 _ 를 이용하여 해당변수의 의미를 더해주는건데 MS 에서 C#은 그런식으로 쓰지말자고하니 지켜주자..
또한 MS 에서는 변수이름조차 파스칼 표기법을 사용하자고하는데 변수이름은 그냥 소문자로 시작하여 카멜 표기법을 이용하는 것을 추천한다.
파스칼 표기법이란 모든 단어의 첫번째 문자를 대문자로 표현하는 표기법이다.
카멜 표기법이란 낙타 처럼 새로운 단어가 생길때 대문자로 만들어주는 형식이다.
int physicalAddress;
위에 처럼 쓰면된다.
또한 C# 은 한글도 잘지원하지만 왠만하면 영어로 사용해주자 모든 프로그래밍 할때에는 왠만하면 값이 아니면 다 영어로 해주는것이 맘이 편하다.
실제로 다국어를 지원하지않는 언어에서는 문제가 발생할 수 있다...
이번에는 여러개 를 만들어 보자.
string myName = "Dsminsz"; // string 자료형의 myName 변수에 "Dsminsz" 를 넣어줘
int age = 150; // int 자료형의 age 변수에 150 을 넣어줘
이렇게 세개의 변수를 만들고 값도 넣어 봤으니 한번 프로그램을 실행 시켜보면!
(F5 를 누르거나 상단에 재생버튼을 누르면된다.)
아무런 변화가 일어나지않고 프로그램이 종료될것이다.
아직! 콘솔에 무언가를 보여달라는 명령을 주지않았기때문에 그런것이니 우리가 만든 변수를 콘솔화면에 뛰우기 위해 몇까지 를 더 알아보자.
Console 출력과 입력
//출력
Console.WriteLine("줄바뀐다!"); //한줄 출력 하고 줄바꿈 까지
Console.Write("줄"); //줄바꿈없이 출력
Console.Write("안바뀌어"); //줄바꿈없이 출력
//입력
Console.ReadLine(); //한줄 입력 // 엔터 키(줄바꿈) 까지 입력을 받는다.
Console.Read(); // 한글자입력
위에 명령어들을 보면 (정확히는 console 클래스에 메서드들이다.)
뽑아낼수 있다.
Console.WriteLine("{0} 는 내이름이야.",myName);// {} 를통해서 문자열 포맷설정
Console.WriteLine("내 나이는 :{0} 이야", age);// {} 를통해서 문자열 포맷설정
위에 쓴 변수를 이렇게 사용하면된다.
조금 당황스러울 순 있지만 {0} , {1} ,{2} ~~~ 를 " " 쌍따옴표 사이에 넣고 문자열이 끝나는 곳에 , 를 사용하여 원하는 변수명을 순서 대로 넣어주면 원하는 위치에 필요한 변수를 위치 시켜 콘솔에 찍어 낼수 있다.
조금 어려우면
Console.WriteLine(myName + "는 내이름이야.");// + 를 통해서 변수와 문자열 합치기
방식을 사용 할 수도 있으나 처음 알려드린 방법이 더 효율적인 방법이니 처음 방법을 추천한다.
그이유는 나중에 자세히 나올 예정이다.
Console.WriteLine() 과 변수 두개를 이용하면 여러가지 연습을 할수 있을 것이다.
상수 (Constant)
변수를 알아보았으니 상수도 알아보려고한다.
변수는 수학에서는 변화하는수 혹은 임의의 수 의 의미를 갖는다. 상수란 이와 반대로
값이 변화하지 않는 수를 의미하며 프로그래밍에서도 같은 의미를 같으며 따로 타입을 지정하진 않고 예약어 키워드를 이용하여 표현 할 수 있다.
상수란 변하지 않고, 항상 일정한 값을 갖는 수를 말한다. 예를 들어 어떤
함수 f(x)=x+1이 있을 때 x의 값은 특정한 숫자로 정해진 것이 아니라, 정의역의 어떤 숫자도 대입할 수 있는 변수이므로 x는 상수가 아니다. 그러나 이 함수
에서 숫자 1은 x의 값이 어떠하든 간에 변하지 않고 항상 1인데, 이러한 수를 상수라 하고 이 경우 숫자 1을
상수항이라 한다. - 위키백과
사용법은 매우 간단하다.
// <상수 선언 및 초기화>
// 변수 선언 앞에 const 키워드를 추가하여 상수 선언
const int AGE = 100; // MAX 상수 변수를 선언하고 초기화
Console.WriteLine("현재 나이의 최대값은 : {0}", AGE);
// const int MAX; // 에러 : 상수는 초기화 없이 사용불가
// MAX = 300; // 에러: 상수의 데이터는 변경 불가
초기화 라는 말이 나왔는데 변수에 처음 값을 넣어주는 걸 초기화 라고한다.
마지막으로 배열이라는 것을 알아보자.
배열(Array)
위에 데이터 타입들을 가지고 놀아보았으면 느겼을 점이 있을텐대 바로 여러가지 같은 데이터 타입을 계속 선언 및 정의하기 귀찮다는 점이다.
예를들어 나이라는 정보를 여러개 저장하려면
int age1 = 10;
int age2 = 20;
int age3 = 21;
int age4 = 22;
//...
이렇게 만들어야 할 것이다.. 매우 귀찮다..
이러한 귀찮음이 생기면 대부분 무언가 해결법이 있다고 생각하자. 그 해결법이 바로 배열이라는 것이다.
int[] ageArray = new int[10]; // [] 를 사용하여 배열로 선언 , 크기는 10으로!
코드로 다시 설명하는게 제일 편하기때문에 코드로 추가 설명을 하자면
// "동일한" 자료형의 요소"들"로 구성된 데이터
// 한마디로 같은 자료형의 데이터들을 한대 묶어서 보관하고 싶을때 사용한다.
// 하나하나 의 요소에는 "인덱스" 로 접근하며 인덱스의 시작은 "0" 으로 시작된다.
//1차원 배열
// [] 중괄호를 이용하여 배열의 요소에 접근할 수 있다.
int[] iArray; // 선언
iArray = new int[5]; // 인트형으로 다섯개 짜리 배열만들어줘!
iArray[0] = 10; // 0 번째 자리에 (첫번째자리에) 10을 넣어줘!
float[] fArray = { 1.1f, 2.3f, 3.1f, 4.5f }; // 1차원 배열의 선언과 초기화, 배열의 크기는 초기화한 갯수만큼 자동으로 생성
// 이렇게 한번에 정의까지 할 수 있다.
중요한 점은 배열의 요소에 접근할때 "인덱스" 로 접근한다는 점이며 시작점은 0 부터 시작한다는 점이다.
그이유는 0과 1로 컴퓨터는 구분을해서 컴퓨터는 숫자를 셀때 0으로 시작한다 라고 말하고싶으나 사실인지는 모르겠고
약속을 그렇게 했기 때문이다..
추가로 다차원배열도 만들 수 있다.
//다차원 배열
//[] 괄호 안에 , 를 사용하여 더 많은 차원으로 배열 만들기가능
int[,] iMatrix = new int[5, 5]; // 이차원으로 배열을 만듬
int[,,] iCube = new int[3, 3, 3]; // 삼차원 배열
iMatrix[2, 2] = 10; // 이차원 배열의 접근
추가적인 사용법으로 유용하게 쓰일만한것은 나중에 배울 반복문을 이용한 방법인데
일단 설명을 해두자면
//배열 접근 예시
for (int i = 0; i < iArray.Length; i++) // for 반복문에 [배열이름].Length 를 통해서 배열의 크기를 구하여 반복시킬수 있다.
{
Console.WriteLine(iArray[i]); // 모든 요소에 접근
}
//2차원 배열 접근예시
for (int i = 0; i < iMatrix.GetLength(0); i++) // .GetLength() 를 이용하면 소괄호안에 첫번째 차원, 두번째 차원 등을 입력하여
// 각 해당하는 차원의 배열의 크기를 구할수있다.
{
for (int j = 0; j < iMatrix.GetLength(1); j++)
{
Console.WriteLine(iMatrix[i,j]); // 모든 요소에 접근
}
}
자세한건 반복문을 할때 다시한번 알아보자.
아직은 그냥 시뮬레이션이나 다름없지만 다음에 알려드릴 타입캐스팅과 입력 함수에대해 알아보면 조금은 상호작용하는 프로그램도 짤수 있게 될 것이다.
참고 코드
https://github.com/dMinsz/Csharp_Basic/blob/master/1.DataAndValueType/Comments.cs
'프로그래밍언어 > 누구나 배워보는 C#' 카테고리의 다른 글
[C#] 4. 연산자 (Operator) (1) | 2023.04.16 |
---|---|
[C#] 3. 형 변환 (TypeCast) (0) | 2023.04.16 |
[C#] 1. C#의 주석과 몇 까지 알아두어야 할 것들 (0) | 2023.04.07 |
0. 준비하기 / 비주얼 스튜디오 2022 설치법 (0) | 2023.04.06 |