윈도우즈프로그래밍#4

LeeMir, 18 March 2021

언어 구조(이어서)


연산자
    • 문장에서 값을 계산하는데 사용
    • 식은 연산자(operator)와 피연산자(operand)로 구성
    • 식의 값에 따라
      • 산술식, 관계식, 논리식으로 구분
  • 연산자
    • 식의 의미를 결정
    • 피연산자가 어떻게 계산될지를 나타내는 기호
    • C#언어 스펙으로 48개의 연산자가 정의되어 있음
    • 산술 연산자
      • 수치 연산을 나타내는 연산자
      • 연산자 종류
        • 단항 산술 연산자: +, -
        • 이항 산술 연산자: +, -, *, /, %
      • % : 나머지 연산자
        • x % y = x - (x/y) *y
      • +와 -, *는 계산 속도가 빠르나 /와 %는 계산 속도가 비교적 느린 편
    • 관계 연산자
      • 두개의 값을 비교하는 이항 연산자
      • 연산 결과 : true or false
      • 관계 연산자가 포함된 식 : 관계식
        • for, while, do-while의 조건식
      • 연산자 우선순위
        • 관계 연산자는 산술 연산자보다 우선순위가 낮음
        • 비교 연산자(> >= < <=) > 항등 연산자(== !=)
    • 논리 연산자
      • 두 피연산자의 논리 관계를 나타내는 연산자
      • 연산자 종류
        • 논리곱(&&), 논리합(   ), 논리부정(!)
      • 연산자 우선순위
        • 논리 연산자는 산술 연산자나 관계연산자보다 우선순위가 낮음
        • 논리부정 > 논리곱 > 논리합
    • 증가 및 감소 연산자
      • 정수형 변수의 값을 하나 증가시키거나 감소시키는 연산자
      • 연산자 기호
        • ++, –
        • 변수가 아닌 식에는 사용 못함: (a+b)++
        • 실수형 적용 안됨 : f++
      • 연산자 종류
        • 전위 연산자(prefix oprator)
          • x = ++n
        • 후위 연산자(postfix operator)
          • x = n++
    • 비트 연산자
      • 비트 단위로 연산을 수행하는 연산자
      • 피연산자는 반드시 정수형
      • 연산자 종류
        • 비트 논리곱(&), 비트 논리합( ), 비트 배타적 논리합(^), 왼쪽 이동(«), 오른쪽 이동(»), 1의 보수(~)
      • 연산자 우선순위
        • 1의 보수 > 비트 이동 > 논리곱 > 배타적논리합 > 논리합
      • 0xFFFFFFFF보다 ~0을 사용하면 32비트 64비트에서 모두 돌아가게 할 수 있음
        • 0xFFFFFFF0~0xF로 쓰면 됨
    • 조건 연산자
      • 의미가 if문장과 같은 삼항 연산자
      • 형태
        • 식1 ? 식2 : 식3
          • max = x > y ? x : y;
    • 복합 배정 연산자
      • 이항 연산자와 배정 연산자가 결합하여 이루어진 연산자
      • 예시
        • sum += i;
    • 캐스트(형변환) 연산자
      • 자료형 변환 연산자
      • 형태
        • (자료형) 식
      • 예시
        • (float) (1/2) = 0
        • (float) 1/2 = 0.5
      • 특징
        • 자료형의 크기가 큰쪽으로는 묵시적 형변환을 해줘야하나 자료형의 크기가 작은 쪽으로는 형변환 연산자를 사용해야함
    • 형 검사 연산자
      • 연산자 종류
        • 데이터 타입이 지정한 타입과 호환 가능한지 검사 : is
          • obj is <type>
        • 주어진 값을 지정한 타입으로 변환 : as
          • obj as <type>
    • 지정어 연산자
      • 연산의 의미를 C# 지정어로 나타낸 연산자
      • 연선자 종류
        • 객체 생성 연산자 : new
        • 객체 형 반환 연산자 : typeof
        • 오버플로 검사 연산 : checked
        • 오버플로 무시 연산 : unchecked
형 변환
  • 묵시적 형 변환
    • 컴파일러에 의해 자동적으로 수행되는 형 변환
    • 작은 크기 자료형 => 큰 크기 자료형
  • 명시적 형 변환
    • 프로그래머가 캐스트 연산자를 사용하여 수행하는 형 변환
    • 형태
      • (자료형) 식
    • 큰 크기 자료형에서 작은 크기 자료형으로 변환 시 정밀도 상실
      • int와 float 사이 변환의 경우 둘 다 4바이트의 크기를 갖지만, float는 값을 나타내는 부분이 3바이트이기 때문에 int에서 float로 변환하면 정밀도가 떨어진다
  • 형 변환 금지
    • bool
      • 같은 자료형 이외에 다른 자료형으로의 변환 금지(묵시적, 명시적 모두 안됨
박싱과 언박싱
  • 박싱
    • 값형의 데이터를 참조형으로 변환하는 것
    • 컴파일러에 의해 묵시적으로 행해짐
  • 언박싱
    • 참조형의 데이터를 값형으로 변환하는 것
    • 반드시 캐스팅을 통하여 명시적으로 행해짐
    • 반드시 박싱될 때의 형으로 언박싱을 해주어야 함
널이 가능한 형(Nullable Property)
  • 초기값
    • 값형 : 0으로 설정
    • 참조형 : 참조할 객체가 없을 때 null로 설정
  • 널이 가능한 형
    • 값형에서도 참조형과 같이 값이 없는 것을 나타낼 필요가 있음
    • 값형에서 참조형과 같이 값이 없는 경우를 나타낼 때 사용하는 자료형
      • <type>?
    • HasValue, Value 프로퍼티