[깅깅의 C# 독학] 2.C# 기본 - 대입, 형, 변수, 연산자
[값을 대입(assignment)한다.]
코딩에서는 = 기호를 통해 값을 설정하는데, 이를 값을 대입(assignment)한다고 한다. 코딩에서는 = 기호가 두 개의 값이 같다라는 의미가 아니라 좌 변에 우 변의 값을 넣는 의미를 지닌다.
-프로퍼티 값 대입
또한 프로퍼티 값을 그대로 대입할 수도 있다. pb.Top 은 이미지의 위쪽 여백을 다룬다. 이에 이미지의 세로 길이(pb.Height)를 넣었으니 이미지는 세로 길이만큼 아래로 이동한다.
[형(Type)과 변수(variable)]
대입을 할 때는 대입할 대상의 형(Type)이 맞아야 한다. 위에서 프로퍼티 값을 대입할 때 pb.Top = pb.Height; 라는 코드가 정상적으로 작동하는 것은, pb.Top은 정수형인 int가 들어가야하는데 pb.Height 또한 정수형 int이기 때문이다. 같은 형의 값을 대입하는 것이 중요하다. 저 다섯개의 형 외에도 많은 형이 있으니, 추가 정보는 아래를 참고하길 바란다.
https://ksyjkh24.tistory.com/104
C# :: 데이터 형식 - 값 형식 - 정수형, 실수형, 문자형, 논리형(bool)
1. 정수형 C# 형 .NET 형 Byte 값 제곱 sbyte SByte 1 -128 ~ 127 (부호있음) 2^8 -1 byte Byte 1 0 ~ 255 (부호없음) short Int16 2 -32,768 ~ 32,767 (부호있음) / 2^16 - 1 2^16 - 1 ushort UInt16 2 0 ~ 65,535 (부호없음) int Int32 4 -2,147,48
ksyjkh24.tistory.com
형에 붙여지는 이름, 위 코드 중 int i; 에서 i와 같은 이름을 변수(variable)라고 하며, 이름을 설정하는 것을 '변수를 선언한다' 라고 한다. 이렇게 변수를 선언하는 형식은 오브젝트명을 선언할 때도 보이는데, 오브젝트명 또한 클래스의 변수이다. 변수에 값을 대입한 다음, 이 변수를 맞는 형의 값에 대입할 수 있다.
int i = 0; //변수의 초기화
변수는 선언 동시에 값을 대입할 수 있다. 이를 변수를 초기화(initialization)한다 라고 한다.
이전 글에서 오브젝트명 선언 동시 오브젝트를 생성하는 식을 한 줄로 만들 수 있다고 했는데, 이 또한 클래스'형'인 Form 의 변수 'fm' 을 초기화하는 것이다.
[연산자(operator)]
값을 계산해서 대입할 수도 있는데 계산할 때 사용하는 기호를 연산자(operator), 계산하는 대상을 오퍼랜드(operand)라고 한다.
그런데 pb.Top = pb.Top + 10 을 보면 수학적으론 안맞는 계산이기 때문에 이상해보일 수도 있다. 위에도 설명했듯이 여기서 = 기호는 대입하는 것이지 두 값이 같다는 의미가 아니기 때문에 아무 문제 없다.
-이미지 중앙 배치 (Feat.ClientSize)
덧셈 뿐 아니라 당연 사칙 연산도 가능하다. 이를 활용해 이미지를 중앙에 배치할 수 있다. 폼의 세로, 가로 길이에서 이미지의 세로, 가로 길이를 뺀 다음 둘로 나누면 중앙을 맞출 수 있다! 그런데 실행해보면...
누가봐도 중앙에 배치되지 않는다. fm.Width, fm.Height 는 폼의 테두리 같은 요소까지 포함하기 때문이란다. (테두리 말고 뭐가 있는지도 모르겠고 테두리 포함해도 중앙이 아닌데 어떻게 계산되는 건지 모르겠음.) 정확히 폼의 중앙에 배치하려면 ClientSize 를 써야한다.
pb.Top = (fm.ClientSize.Height - pb.Height) / 2;
pb.Left = (fm.ClientSize.Width - pb.Width) / 2;
-연산자의 종류
사칙연산 외에도 여러 연산자가 있다. 이건 직접 표로 정리해봤다.
+ | 덧셈 | | | 비트 논리합 | <= | 이하 | () | 함수 호출 |
- | 뺄셈 | ^ | 비트 배타적 논리합 | == | 같다 | sizeof | 크기 |
* | 곱셈 | = | 대입 | != | 같지 않다 | [] | 배열 첨자 |
/ | 나눗셈 | << | 왼쪽 시프트 | ! | 논리 부정 | , | 멤버 참조 |
% | 나머지 | >> | 오른쪽 시프트 |
&& | 논리곱 | -> | 멤버 참조 |
+ | 단항 + | ++ | 인크리먼트 | || | 논리합 | => | 람다식 |
- | 단항 - | -- | 디크리먼트 | is | 호환성 검사(값형) | ?: | 조건 |
~ | 보수 | > | 보다 크다 | as | 호환 | new | 오브젝트 작성 |
& | 비트 논리곱 | >= | 이상 | () | 캐스트 | typeof | 형 얻기 |
& | 주소 참조 | < | 미만 | , | 순차 | delegate | 익명 메서드 |
책에 있는대로 정리했는데 몇가지는 뭔지 잘 모르겠다. 차차 하면서 익혀지겠지..?
다른 언어를 공부하면서 자주 사용한 건 사칙연산과 나머지 값을 구하는 %와 >, >=, <, <=, ==, != 와 같이 두 값을 비교하는 연산자(결과 값의 형은 bool이다.), ++, -- 이 정도였다.
여기서 ++, -- 인 인크리먼트와 디크리먼트는 값을 1 증감시키는 것이다. 예를들어 i++; 라고 하면 i = i + 1 로 보면 된다.
-대입연산자
또한 좌변에 우변을 더한 값을 대입하는 연산자가 있다.
+= | 덧셈 대입 |
-= | 뺄셈 대입 |
*= | 곱셈 대입 |
/= | 나눗셈 대입 |
%= | 나머지 대입 |
&= | 논리곱 대입 |
^= | 배타적 논리합 대입 |
|= | 논리합 대입 |
<<= | 왼쪽 시프트 대입 |
>>= | 오른쪽 시프트 대입 |
예를 들어 a += b; 라고 하면 이를 a = a + b; 로도 표현할 수 있다.
-문자열 연결
연산자는 오퍼랜드의 형에 따라서 처리 방식이 달라진다. 위와 같이 문자열에 +를 쓰면 다음과 같은 결과가 나온다.
요약
1. = 는 좌변에 값을 대입하는 것이다.
2. 정수형, 실수형, 문자형 등의 형(type)이 있고 형에 맞는 값을 대입해야한다.
3. 어떠한 형에 대해 붙인 이름을 변수(variable)라 한다.
4. 클래스도 형이고 오브젝트명은 클래스의 변수인 것이다.
5. 연산자(operator)를 통해 계산한 값을 대입할 수 있다.
6. 문자열에 + 를 쓰면 문자가 연결된다.