34

C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

  • Upload
    vuphuc

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라
Page 2: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

식(expression)문장에서 값을 계산하는데 사용식은 연산자(operator)와 피연자(operand)로 구성식의 값에 따라

산술식, 관계식, 논리식으로 구분

연산자(operator)식의 의미를 결정피연산자가 어떻게 계산될지를 나타내는 기호C#언어 스펙 48개의 연산자 정의

Page 3: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

연산자 종류산술 연산자 : + - * / % 단항+ 단항-

관계 연산자 : > >= < <= == !=

논리 연산자 : && || !

증감 연산자 : 전위++ 전위– 후위++ 후위--

비트 연산자 : & | ^ ~ << >>

조건 연산자 : ? :

배정 연산자 : = += -= *= /= %= &= |= ^= <<= >>=

캐스트 연산자 : (자료형)

형 검사 연산자 : is as

배열 연산자 : []

메소드 연산자 : ()

멤버 접근 연산자 : .

지정어 연산자 : new typeof checked unchecked

C# 언어의 연산자

Page 4: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

의미수치 연산을 나타내는 연산자

연산자 종류단항 산술 연산자: +, -이항 산술 연산자: +, -, *, /, %

% : 나머지 연산자(remainder operator)x % y = x - (x / y) * y

x = -5 ; // 음수 5x = -(-5) ; // 양수 5x = -(3-5) ; // 양수 2

Page 5: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

의미두 개의 값을 비교하는 이항 연산자연산결과 : true or false관계 연산자가 포함된 식 : 관계식

for, while, do-while의 조건식

연산자 우선순위관계 연산자는 산술 연산자보다 우선순위가 낮다.

b == x < y ===> b == (x < y)a > b + c ===> a > (b + c)

관계연산자우선순위

연산자 우선 순위

비교 연산자 > >= < <= (높음)(낮음)항등 연산자 == !=

Page 6: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

의미두 피연산자의 논리 관계를 나타내는 연산자

연산자 종류논리곱(&&), 논리합(||), 논리부정(!)

연산자 우선순위논리연산자는 산술 연산자나 관계연산자보다 연산 순위가 낮다.

논리연산자

연산 의미 연산자 우선 순위 형태

논리부정 ! (높음)

(낮음)

!x

논리곱 && x && y

논리합 || x || y

3

x == y || x > y && y > z

1 2

4

5

Page 7: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

[예제 2.18 LogicalOperatorApp.cs]

using System;class LogicalOperatorApp {

public static void Main() {int x=3, y=5, z=7;bool b;b = x < y && y < z;Console.WriteLine("Result = " + b);b = x == y || x < y && y > z;Console.WriteLine("Result = " + b);

}}

실행 결과 :Result = TrueResult = False

Page 8: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

의미정수형 변수의 값을 하나 증가시키거나 감소시키는 연산자

연산자 기호++, --변수가 아닌 식에는 사용 못함: (a+b)++ // error실수형 적용 안됨 : f++ // error: f is float

연산자 종류전위 연산자(prefix operator)

후위 연산자(postfix operator)

n = 1;x = ++n; // x=2, n=2

n = 1;x = n++; // x=1, n=2

Page 9: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

의미비트 단위로 연산을 수행하는 연산자피연산자는 반드시 정수형

연산자 종류비트 논리곱(&), 비트 논리합(|), 비트 배타적 논리합(^), 왼쪽 이동(<<), 오른쪽 이동(>>), 1의 보수(~)

연산자 우선순위논리연산자

연산 의미 연산자 우선 순위 사용 예

비트 논리곱 & (높음)

(낮음)

x & y 비트 논리합 | x | y 비트 배타적 논리합(exclusive OR) ^ x ^ y 왼쪽이동(left shift) << x << y 오른쪽이동(right shift) >> x >> y 1의보수(one's complement) ~ ~x

Page 10: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

[예제 2.20 BitOperatorApp.cs]

using System;class BitOperatorApp {

public static void Main() {int x=9, y=3;Console.WriteLine(x + " & " + y + " = " + (x&y));Console.WriteLine(x + " | " + y + " = " + (x|y));Console.WriteLine(x + " ^ " + y + " = " + (x^y));Console.WriteLine("~10 = " + (~10));

}}

실행 결과 :9 & 3 = 19 | 3 = 11 9 ^ 3 = 10~10 = -11

Page 11: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

의미의미가 if문장과 같은 삼항 연산자

형태식1 ? 식2 : 식3 if (x > y) max = x;

else max = y;max = x > y ? x : y ;

Page 12: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

[예제 2.22 ConditionalOperatorApp.cs]

using System;class ConditionalOperatorApp {

public static void Main() {int a, b, c;int m;Console.Write("Enter three numbers : ");a = Console.Read() - '0';b = Console.Read() - '0';c = Console.Read() - '0';m = (a > b) ? a : b;m = (m > c) ? m : c;Console.WriteLine("The largest number = " + m);

}}

입력 데이터 :Enter three numbers : 526

실행 결과 :The largest number = 6

Page 13: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

의미이항 연산자와 배정연산자가 결합하여 이루어진 연산자

복합 배정 연산자 사용 예

식1 = 식1 op 식2 식1 op= 식2

x = x * (y+1)

sum += i ; sum = sum + i ;

x *= y + 1 ; x = x * y + 1 ;

op: - 산술연산자: + - * / % - 비트연산자: & | ^ << >>

Page 14: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

의미자료형 변환 연산자

형태

캐스트 연산자 사용 예

(자료형) 식

(int) 3.75 ===> 3(float) 3 ===> 3.0(float) (1 / 2) ===> 0.0(float) 1 / 2 ===> 0.5

Page 15: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

연산자 종류데이터 타입이 지정한 타입과 호환 가능한지 검사: is

주어진 값을 지정한 타입으로 변환: as

obj is <type>

obj as <type>

Page 16: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

의미연산의 의미를 C# 지정어로 나타낸 연산자

연산자 종류객체 생성 연산자: new객체 형 반환 연산자: typeof오버플로 검사 연산: checked오버플로 무시 연산: unchecked

Page 17: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

[예제 2.26 IsAsOperatorApp.cs]

using System;public class IsAsOperatorApp {

static void IsOperator(object obj) {Console.WriteLine(obj + " is int : " + (obj is int));Console.WriteLine(obj + " is string : "+(obj is string));

}static void AsOperator(object obj) {

Console.WriteLine(obj + " as string == null : " + (obj as string == null));}public static void Main() {

IsOperator(10);IsOperator("ABC");AsOperator(10);AsOperator("ABC");

}}

실행 결과 :10 is int : True10 is string : FalseABC is int : FalseABC is string ... True10 as string == null : TrueABC as string == null : False

Page 18: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

연산자 결합법칙 우선순위

() [] . 후위++ 후위-- new typeof checked unchecked 좌측결합 (높음)

(낮음)

단항+ 단항- ! ~ 전위++ 전위-- (자료형) 우측결합

* / % 좌측결합

+ - 좌측결합

<< >> 좌측결합

< > <= >= is as 좌측결합

== != 좌측결합

& 좌측결합

^ 좌측결합

| 좌측결합

&& 좌측결합

|| 좌측결합

? : 우측결합

= += -= *= /= %= &= ^= |= <<= >>= 우측결합

Page 19: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

묵시적 형 변환(implicit type conversion)컴파일러에 의해 자동적으로 수행되는 형 변환작은 크기 자료형 큰 크기 자료형

명시적 형 변환(explicit type conversion)프로그래머가 캐스트 연산자를 사용하여 수행하는 형 변환형태

(자료형) 식

큰 크기 자료형에서 작은 크기 자료형으로 변환 시 정밀도 상실

형 변환 금지bool

같은 자료형 이외에 다른 자료형으로의 변환 금지

Page 20: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

[예제 2.28 LosePrecisionApp.cs]

using System;class LosePrecisionApp {

public static void Main() {int big = 1234567890;float approx;approx = (float)big;Console.WriteLine("difference = " + (big - (int)approx));

}}

실행 결과 :difference = -46

Page 21: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

박싱(boxing)값형의 데이터를 참조형으로 변환하는 것컴파일러에 의해 묵시적으로 행해짐박싱 과정

언박싱(unboxing)참조형의 데이터를 값형으로 변환하는 것반드시 캐스팅을 통하여 명시적으로 행해짐반드시 박싱될 때 형으로 언박싱을 해주어야 함

Page 22: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

[예제 2.30 BoxingUnboxingApp.cs]

using System;class BoxingUnboxingApp {

public static void Main() {int foo = 526;object bar = foo; // foo is boxed to bar.Console.WriteLine(bar);try {

double d = (short)bar;Console.WriteLine(d);

} catch (InvalidCastException e) {Console.WriteLine(e + "Error");

}}

}

실행 결과 :526System.InvalidCastException:at BoxingUnboxingApp.Main() Error

Page 23: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

마우스윈도우 사용자에게 가장 편리하고 친숙한 입력장치윈폼 애플리케이션의 사용자 상호작용은 대부분 마우스를 통해 이루어짐사용자가 마우스를 이동하거나 클릭하면 이벤트가 발생

마우스 이벤트이동 이벤트

사용자가 마우스의 위치를 이동시킬 경우 발생

선택 이벤트사용자가 마우스의 버튼을 클릭할 경우 발생

Page 24: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

MouseEnter마우스 포인터가 컨트롤이나 폼 영역에 들어올 때 발생

MouseHover마우스 포인터가 컨트롤이나 폼에서 이동하는 것을 멈출 때 발생매번 발생하지 않으며 처음 멈출 때만 발생

MouseLeave마우스 포인터가 컨트롤이나 폼 영역을 벗어날 때 발생

MouseMove마우스 포인터가 새로운 영역으로 이동할 때 발생

MouseWheel입력포커스를 가지고 있는 컨트롤이나 폼 위에서 마우스 휠 버튼을 회전시킬 때 발생

Page 25: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

EventHandler 델리게이트형의 처리기를 사용하는 이벤트MouseEnter, MouseHover, MouseLeave

MouseEventHandler 델리케이트형의 처리기를 사용하는 이벤트MouseMove, MouseWheelMouseEventArgs 클래스가 제공하는 프로퍼티를 이용하여 마우스의 위치와 상태에 대한 추가적인 정보 사용 가능

public delegate void EventHander(object sender, EventArgs e);public delegate void MouseEventHander(object sender, MouseEventArgs e);

Page 26: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

Button마우스의 상태를 나타내는 MouseButtons 열거형 값MouseButtons 열거형

Left : 마우스 왼쪽 버튼을 클릭한 상태Middle : 마우스 중앙 버튼을 클릭한 상태None : 마우스를 누르지 않은 상태Right : 마우스 오른쪽 버튼을 클릭한 상태XButton1 : 첫 번째 X버튼을 클릭한 상태XButton2 : 두 번째 X버튼을 클릭한 상태

Clicks마우스 버튼을 클릭한 횟수

IntelliMouse에서제공하는 버튼

Page 27: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

Delta마우스 휠의 회전수(휠을 1회 돌리는 것)를 나타내는 값

X클라이언트 좌표 내에서, 마우스 위치의 X좌표

Y클라이언트 좌표 내에서, 마우스 위치의 Y좌표

Page 28: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

[예제 10.3 – MousePositionApp.cs]

1) 폼 설계

2) 프로퍼티

3) 이벤트 처리기

컨트롤 : (Name) 프로퍼티 값

Form : Form1 Text MousePositionApp

컨트롤 : (Name) 이벤트 메소드명

Form : Form1 MouseEnter Form1_MouseEnter()

Page 29: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

MousePosition 프로퍼티마우스의 좌표를 전체화면에 대한 상대좌표로 Point 구조체 형으로 반환

PointToClient메소드전체화면에 대한 상대좌표를 클라이언트 좌표로 변환

private void Form1_MouseEnter(object sender, EventArgs e) { Point mousePoint = PointToClient(MousePosition); string msg = “Mouse Position : ” + mousePoint.X + “, ”

+ mousePoint.Y; MessageBox.Show(msg);

}

실행 방법 : 폼 위로 마우스를 이동하여 MouseEnter 이벤트를 발생시킨다. 실행 결과 :

Page 30: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

MouseDown폼이나 컨트롤에서 마우스 버튼을 누를 때 발생

MouseUp폼이나 컨트롤에서 마우스 버튼을 누른 후 해제할 때 발생

Click폼이나 컨트롤을 클릭할 때 발생

DoubleClick폼이나 컨트롤을 더블 클릭할 때 발생

Page 31: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

EventHandler 델리게이트형의 처리기를 사용하는 이벤트Click, DoubleClick

MouseEventHandler 델리케이트형의 처리기를 사용하는 이벤트MouseDown, MouseUp

Page 32: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

마우스의 이벤트가 비동기적으로 불특정 시간에 발생하더라도 상대적인 순서는 보장됨

MouseEnter와 MouseLeave사이에 발생하는 이벤트MouseHoverMouseMove

Click 이벤트MouseDown과 MouseUp 이벤트 다음에 발생

DoubleClick 이벤트Click 이벤트 다음에 발생

Page 33: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

[예제 10.5 – MouseEventApp.cs]

1) 폼 설계 2) 프로퍼티

3) 멤버private void UpdateEventLabels(string msg, int x, int y, MouseEventArgs e) {

string message = string.Format("{0} X:{1}, Y:{2}", msg, x, y); string eventMsg = DateTime.Now.ToShortTimeString(); eventMsg += " " + message; listBox1.Items.Insert(0, eventMsg); listBox1.TopIndex = 0; string mouseInfo; if (e != null) {

mouseInfo = string.Format("Clicks: {0}, Delta: {1}, " + "Buttons: {2}",e.Clicks, e.Delta, e.Button.ToString());

} else { mouseInfo = string.Format("Clicks: {0}", msg); } label1.Text = mouseInfo;

}

컨트롤 : (Name) 프로퍼티 값

Form : Form1 Text MouseEventApp

ListBox : listBox1 Items

Button : button1 Text Close

Label : label1 Text MouseEventArgsLabelForm : Form1

Button : button1

Label : label1

ListBox : listbox1

Page 34: C# 입문 : 이론과 실습2015821105151... · 2015-08-21 · 식(expression) 문장에서값을계산하는데사용 식은연산자(operator)와피연자(operand)로구성 식의값에따라

4) 이벤트 처리기

private void listBox1_MouseDown(object sender, MouseEventArgs e) { UpdateEventLabels("(ListBox)MouseDown", e.X, e.Y, e);

} private void listBox1_DoubleClick(object sender, EventArgs e) {

Point mousePoint = PointToClient(MousePosition); UpdateEventLabels("(ListBox)DoubleClick", mousePoint.X, mousePoint.Y, null);

} private void button1_Click(object sender, EventArgs e) {

Application.Exit(); }

실행 방법 : ListBox 상에서 MouseDown, DoubleClick 이벤트를 발생시킨다. 실행 결과 :

컨트롤 : (Name) 이벤트 메소드명

ListBox : listBox1MouseDown listBox1_MouseDown()

DoubleClick listBox1_DoubleClick()

Button : button1 Click Button1_Click()