2008 학년도 1 학기 상지대학교컴퓨터정보공학부 고광만
강의내용 연산자 (operator) 연산자종류연산자우선순위자료형변환 문장 (statement) 배정문 혼합문 제어문조건문, 반복문, 분기문 표준입출력 2
연산자 식 (expression) 의의미를결정 식은연산자 (operator) 와피연자 (operand) 로구성식의값에따라산술식, 관계식, 논리식으로구분 표준 C 언어와유사 연산자의의미와사용법습득 수학적인의미와구별 3
연산자종류 산술연산자 : + - * / % 단항 + 단항 - 관계연산자 : > >= < <= ==!= 자바언어의연산자 논리연산자 : &&! 증감연산자 : ++ -- 비트연산자 : & ^ ~ << >> >>> 조건연산자 :? : 배정연산자 : = += -= *= /= %= &= ^= = >>= <<= >>>= 배열연산자 : [] 메소드연산자 : (). 캐스트연산자 : ( 자료형 ) instanceof 연산자 : instanceof 4
산술연산자 수치연산을나타내는연산자 단항산술연산자 : +, - 이항산술연산자 : +, -, *, /, % 실수형연산 부동소수점표현방법과연산방법 : IEEE 754 표준 underflow, overflow 무한연산 (infinite arithmetic) java.lang.float, java.lang.double 클래스에서기호상수제공 POSITIVE_INFINITY (+ ) NEGATIVE_INFINITY(- ) NaN(Not a Number) 5
관계연산자 두개의값을비교하는연산자 연산결과 : true or false 관계연산자가포함된식 : 관계식 for, while, do-while 의조건식 <, <=, >, >=, ==,!= 6
논리연산자 두피연산자의논리관계를나타내는연산자연산자의종류!, &&, 7
증가및감소연산자 연산자기호 ++, -- 변수가아닌식에는사용못함 실수형적용안됨 : (a+b)++ // error n = 1; x = ++n; // x=2, n=2 전위연산자 (prefix operator) 후위연산자 (postfix operator) n = 1; x = n++; // x=1, n=2 8
조건연산자 조건연산자 형태 : 식 1? 식 2: 식 3 (3 항연산자 ) max = x > y? x : y ; 참 x > y if (x > y) max = x; else max = y; 거짓 max = x; max = y; 9
배정연산자의형태 배정연산자 식 1 = 식 1 op 식 2 식 1 op= 식 2 결합연산자 산술연산자 : + - * / % 비트연산자 : & ^ << >> >>> 의미 : sum += i ; sum = sum + i ; x *= y + 1 ; x = x * y + 1 ; x = x * (y+1) 10
캐스트연산자 --- 자료형변환연산자 형태 : ( 자료형 ) 식 캐스트연산자 캐스트연산자사용예 : (int) 3.75 ===> 3 (float) 3 ===> 3.0 (float) (1 / 2) ===> 0.0 (float) 1 / 2 ===> 0.5 정수사이의연산결과는정수 11
연산자우선순위 연산자결합법칙우선순위 () []. 좌측결합! ~ ++ -- 단항 + 단항 -( 자료형 ) 우측결합 ( 높음 ) * / % 좌측결합 + - 좌측결합 << >> >>> 좌측결합 < <= > >= instanceof 좌측결합 ==!= 좌측결합 & 좌측결합 ^ 좌측결합 좌측결합 && 좌측결합 좌측결합? : 우측결합 = += -= *= /= %= &= ^= = <<= >>= >>>= 우측결합 ( 낮음 ) 12
자료형의크기방향 자료형변환 광역화형변환작은자료형의값을큰자료형의값으로변환협소화형변환큰자료형의값을작은자료형의값으로변환 형변환의주체 묵시적형변환컴파일러에의해자동수행명시적형변환캐스팅을이용하여프로그래머가형변환을명시 13
광역화형변환 자료형크기변환 컴파일러에의해자동으로수행되는묵시적변환 예 : byte short, int, long, float, double short int, long, float, double char int, long, float, double int long, float, double long float, double float double 정밀도상실 int float long float long double 14
협소화형변환 프로그래머가반드시캐스트연산자를사용하여변환될자료형 을표시하여변환 예 : byte char short byte, char char byte, short int byte, short, char long byte, short, char, int float byte, short, char, int, long double byte, short, char, int, long, float 15
묵시적형변환 자료형변환주체 컴파일러에의해자동적으로수행 char c = A ; short s=1; int i=2; long l=3; float f=2.1f; double d=3.2; 1 i = ( c + s ); // i = 66 (int) (int) (short) (short) (int) 16
2 l = s + i ; // l = 3 (long) (short) (int) (long) (int) 3 d = f + d; // d = 5.3 (double) (float) (double) (double) (double) 17
명시적형변환 프로그래머가캐스트연산자를사용하여변환 char c = A ; short s=1; int i=2; long l=3; float f=2.1f; double d=3.2; 1 s = (short) ( c + i ); // s = 67 (short) (char) (int) (short) (int) 18
2 f = (float) ( f + d ); // f = 5.3 (float) (float) (double) (float) (double) 19
박싱 박싱 (boxing)/ 언박싱 (unboxing) 기본형의데이터를참조형으로변환 언박싱 참조형의데이터를기본형으로변환 자동박싱 / 자동언박싱 (auto boxing/auto unboxing) 자바컴파일러가프로그램문맥에따라자동으로박싱 / 언박싱 20
박싱 (boxing) 스택에저장된기본형데이터를힙영역의참조형으로변환 21
기본형과참조형간에지원 boolean byte char short int long float double Boolean Byte Char Short Integer Long Float Double 22
참조형과기본형간에지원 Boolean boolean Byte byte Char char Short short Integer int Long long Float float Double double 언박싱 (unboxing) 잘못된형식의형변환시 Exception 발생 23
문장의종류 24
값을변수에저장하는데사용 형태 : < 변수 > = < 식 > ; 배정문 remainder = dividend % divisor; i = j = k = 0; x *= y; 형변환 광역화 (widening) 형변환 : 컴파일러에의해자동적으로변환 협소화 (narrowing) 형변환 : 캐스트 (cast) 연산자 25
여러문장을한데묶어하나의문장으로나타냄 주로문장의범위를표시 혼합문 형태 { < 선언 > 혹은 < 문장 > } if (a > b) a--; b++; if (a > b) {a--; b++;} 지역변수 (Local Variable) 블록의내부에서선언된변수 선언된블록안에서만참조가능 26
제어문 프로그램의실행순서를바꾸는데사용 실행순서를제어하는방법에따라 조건문 : if 문, switch 문반복문 : for 문, while 문, do-while 문분기문 : break 문, continue 문, return 문 27
조건문 : if 문장 조건에따라실행되는부분이다를때사용. if 문의형태 if ( < 조건식 > ) < 문장 > if ( < 조건식 > ) < 문장 1> else < 문장 2> 예 : 조건식의연산결과 : 논리형 (true or false) if (a < 0) a = -a; // 절대값 if (a > b) m = a; else m = b; // 큰값 28
내포된 if 문 참부분에서 if 문이반복 if (< 조건식 >) if (< 조건식 >) //... < 문장 > else 부분에서 if 문이반복 if (< 조건식 1>) < 문장 1> else if (< 조건식 2>) < 문장 2>... else if (< 조건식 n>) < 문장 n> else < 문장 > 29
조건문 : switch 문장 조건에따라여러경우로처리해야되는경우형태 switch (< 식 >) { case < 상수식1> : < 문장1> case < 상수식2> : < 문장2>.. case < 상수식n> : < 문장n> default : < 문장 > } default break 문을사용하여탈출 30
정해진횟수만큼일련의문장을반복 형태 반복문 : for 문장 for ( < 식 1> ; < 식 2> ; < 식 3> ) < 문장 > < 식 1> : 제어변수초기화 < 식 2> : 제어변수를검사하는조건식 < 식 3> : 제어변수의값을수정 s = 0; for (i = 1; i <= N; ++i) // 1 부터 N 까지의합 : i 증가 s += i; 31
32
무한루프를나타내는 for 문 for ( ; ;) < 문장 > 루프종료 : break 문, return 문 내포된 for 문 for 문안에 for 문이있을때. 다차원배열을다룰때. for (i = 0; i < N; ++i) for (j=0; j<m; ++j) matrix[i][j] = 0; 33
반복문 : while 문장 조건식이참인경우, 일정한부분을반복해서실행 형태 while ( 조건식 ) < 문장 > 예 i = 1; s = 0; while (i <= N) { // 1 부터 N 까지의합 s += i; ++i; } 34
35
for 문과 while 문의비교 for (i = 0; i < N; ++i) s += i; i= 0; while (i < N) { s += i; ++i; } for while : 주어진횟수 : 주어진조건 36
반복문 : do-while 문장 반복되는문장을먼저실행한후에조건식을검사 do-while 문의형태 do < 문장 > while ( < 조건식 > ); precondition check --- postcondition check --- for, while do-while 37
블록밖으로제어를옮기는역할 break 문의형태 break [ 레이블 ]; 레이블이없는경우 C/C++ 와동일 분기문 : break 문장 int i = 1; while (true) { if (i == 3) break; System.out.println( This is a + i + iteration ); ++i; } 38
레이블 break 문 goto 문대용으로사용가능 사용형태 lablename : 반복문 1 { 반복문 2 { //... break; //... break labelname; } //... } 39
다음반복이시작되는곳으로제어를옮기는기능 continue 문의형태 continue [ 레이블 ]; 분기문 : continue 문장 for 문안에서사용될때 for(i = 0; i <= 5; ++i) { if (i % 2 == 0) continue; System.out.println("This is a " + i + " iteration"); } 40
while 문안에서사용될때 조건검사부분으로이동 i = 0; while (i <= 5) { ++i; if ((i % 2) == 0) continue; System.out.println("This is a odd iteration " + i); } 41
레이블 continue 문 레이블 break 와유사 lablename : 반복문 1 { 반복문 2 { //... continue; //... continue labelname; } //... } 42
메소드의실행종료 분기문 : return 문장 호출한메소드에게제어를반환 return 문의형태 return; return < 식 >; 43
시스템에서지정한표준파일에입출력하는방법 표준입출력 표준입출력문장 표준입력파일 : in 표준출력파일 : out 표준에러파일 : err 키보드 화면 (screen) System 클래스의정적변수 44
자바언어의기본패키지인 java.io 로부터제공 표준입력메소드 : System.in.read() 키보드로부터한개의문자를읽어그문자의코드값을정수형으로복귀하는기능 표준출력메소드 System.out.print(), System.out.println() System.out.printf(), System.out.write() 45
표준입력에서한라인을스트링형태로읽음 : import java.io.*; BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); n = Integer.parseInt(input.readLine()); 표준입력으로부터한라인을읽어스트링형태로복귀 스트링형태를정수형태로변환 46
형식화된입출력문장 형식화된입출력문장 출력하려는값에포맷 (format) 을명시하여원하는형태로출력 %[argument_index$] [flags] [width] [.precision] conversion System.out.printf() 메소드에서출력포맷지정출력포맷 System.out.printf(format-string, arg1, arg2, arg3,..., argn); 형식지정스트링 (format string) 매개변수의개수와일치하는출력포맷으로이루어진스트링상수형식화하려는값의형태 47