Download presentation
Presentation is loading. Please wait.
Published byΔελφινιος Γιαννόπουλος Modified 6년 전
1
Chap03 자바 기본 구조 3.1 자바 응용 프로그램 분석 3.2 프로그래밍 오류(Error)
3.3 식별자(Identifier)와 예약어 3.4 변수와 자료형 3.5 형 변환(Casting) 3.6 연산자와 수식 3.7 문자열(String) 3.8 선택문 3.9 반복문 3.10 제어의 이동 3.11 배열
2
3.1 자바 응용 프로그램 분석 자바의 주석 /*주석*/ //주석 /**주석*/ /*에서 */ 까지의 모든 것을 무시한다
//에서부터 그 줄의 끝까지를 무시한다 /**주석*/ /**에서 */까지의 모든 것을 무시한다. 이 주석은 javadoc에 의해 생성되는 HTML 파일에서 사용된다
3
3.1 자바 응용 프로그램 분석 클래스의 정의 /** 다음 프로그램(ExamTest.java)은 두개의 클래스로 구성된다 */
class Exam { // 클래스 Exam의 정의 int c; public int add(int a, int b) { c = a + b; return c; } } class ExamTest { /* Exam 클래스의 객체를 생성하여 사용한다 객체로부터 반환된 결과를 인쇄한다 */ public static void main(String args[]) { int sum; int x, y; x = Integer.parseInt(args[0]); y = Integer.parseInt(args[1]); // 명령행 인자로부터 데이터를 받아 정수로 변환하여 저장 Exam examobject = new Exam(); sum = examobject.add(x,y); System.out.println("입력한 값의 합은 " + sum + "입니다"); 클래스의정의
4
3.1 자바 응용 프로그램 분석 main() 메소드 public static void main(String args[]) {
…… } main() 메소드는 자바 응용 프로그램에 반드시 있어야 하는 특수한 메소드 프로그램의 실행 시 자동으로 실행되는 메소드 C나 C++ 언어의 main() 함수와 같은 역할 일반적으로 자바 응용 프로그램은 main() 메소드 내에서 다른 클래스의 객체를 생성한 다음 그 객체에 메시지를 보내어 원하는 결과를 얻는다.
5
3.1 자바 응용 프로그램 분석 main() 메소드의 매개변수 args[]
main() 메소드는 문자열의 배열을 매개변수(argument)로 받는다 프로그램 실행시 필요한 정보를 전달. 이러한 매개변수를 명령행 매개변수(command-line argument)라 한다. 명령행 매개변수들은 입력된 순서에 따라 배열에 저장된다 예제에서는 args[]에 저장된 데이터를 숫자로 사용하기 위해 Integer 클래스의 parseInt() 메소드를 사용하여 변환 x = Integer.parseInt(args[0]); y = Integer.parseInt(args[1]); 예제 프로그램을 다음과 같이 실행 >java ExamTest 20 40 입력한 값의 합은 60입니다 args[0] args[1]
6
3.1 자바 응용 프로그램 분석 객체의 생성과 메시지 전달
예제 프로그램에서 main() 메소드는 Exam 클래스로부터 객체 examobject를 생성 명령행 인자로 입력된 x, y 값을 매개변수로 하여 examobject 객체의 add() 메소드를 수행하라는 메시지를 보낸다 Exam 클래스의 add() 메소드는 매개변수로 받은 두 개의 수를 더하여 결과를 반환하고, 반환된 값은 sum 변수에 저장된다. Exam examobject = new Exam(); sum = examobject.add(x,y);
7
3.1 자바 응용 프로그램 분석 System.out.println("입력한 값의 합은 " + sum + " 입니다");
표준 출력의 사용 자바의 입출력은 다양한 종류의 하드웨어 장치들과 무관하게 설계(14장) 표준 출력을 위해 System 클래스와 out 객체, println() 메소드를 이용 println() 메소드는 문자열을 매개변수로 받아 화면에 출력하는 역할을 한다. 예제의 매개변수에 사용된 정수형 변수 sum의 값은 문자열로 자동 변환되어 출력된다 System.out.println("입력한 값의 합은 " + sum + " 입니다"); 클래스 이름 객체의 이름 메소드 이름 메소드의 매개변수
8
3.2 프로그래밍 오류(Error) 구문 오류(컴파일 오류) 1 public class Test {
2 public static void main(String args[]) { 3 i = 30 ; 4 System.out.println( i ) 5 } 6 }
9
3.2 프로그래밍 오류(Error) 실행시간 오류(Runtime Error) 1 public class TestError {
2 public static void main(String args[]) { 3 int i = 3 / 0 ; 4 int j = 5 / 0 ; 5 } 6 }
10
3.2 프로그래밍 오류(Error) 논리 오류(Logic Error) 이 프로그램은 컴파일과 실행 시 오류가 발생되지 않는다.
public class TestLogicError { public static void main(String args[]) { int i = 300 ; int j = 500 ; j += i + j ; System.out.println("합계는 = " + j) ; } } 이 프로그램은 컴파일과 실행 시 오류가 발생되지 않는다. 이 프로그램을 작성한 작성자의 의도는 두수를 더하여 결과 800을 얻고자 시도 하였지만 결과는 1300이 출력된다. 이와 같은 논리 오류는 프로그램 작성자에 의해 발견되어야 한다
11
3.3 식별자(Identifier)와 예약어 식별자 : 변수, 상수, 메소드, 배열, 문자열, 사용자가 정의하는 클래 스나 메소드 등을 구분할 수 있는 이름 식별자 사용 원칙 식별자는 문자, 숫자, 특수문자(_, $)로 구성될 수 있다 식별자의 첫 문자는 문자나 특수문자로 시작할 수 있다. 숫자는 사용할 수 없다 예약어를 식별자로 사용할 수 없다 true, false, null은 식별자로 사용할 수 없다 식별자는 길이에 제한을 두지 않는다 같은 문자의 대소문자(Sum과 sum)는 서로 다른 식별자로 취급한다 식별자의 사용 관례 클래스 이름은 대문자로 시작 메소드, 변수, 배열, 문자열 등의 이름은 소문자로 시작 자바의 예약어 : 50개 (표3-1 참조)
12
3.4 변수와 자료형 변수(variable) 자료형(Data Type) 값(value)이 저장된 메모리의 위치에 주어진 이름
자바는 변수를 사용하기 전에 반드시 선언하여야 한다 자료형(Data Type) 기본 자료형(primitive type) 정수, 실수, 문자, 논리값 등과 같은 8가지의 기본 자료형 기본 자료형 변수는 값을 가진다 매개변수 전달 : call by value 참조 자료형(reference type) 배열, 문자열, 클래스, 인터페이스 등과 같은 자료형 객체에 대한 참조 즉 주소를 가지고 있다 매개변수 전달 : call by value
13
16비트 유니코드(Unicode) 문자 데이터
3.4 변수와 자료형 자바의 기본 자료형 기본 자료형의 크기와 범위 : 표 3-3 참조 타입 설명 키워드 character 16비트 유니코드(Unicode) 문자 데이터 char boolean 참/거짓 값 byte 부호를 가진 8비트 정수 short 부호를 가진 16비트 정수 integer 부호를 가진 32비트 정수 int long 부호를 가진 64비트 정수 float 부호를 가진 32비트 부동소수점 double 부호를 가진 64비트 부동소수점
14
3.4 변수와 자료형 3.4.1 숫자 자료형(Numeric Data Type) 기본 자료형 중에 6종의 숫자 자료형 제공
byte, short, int, long, float, double
15
3.4 변수와 자료형 3.4.2 문자 자료형(Character Data Type) 자바의 문자 코드 유니코드
16비트 유니코드(Unicode) 사용 유니코드 세계의 다양한 언어들을 지원하기 위해 설계된 문자코드 체계 현재 34168개의 글자들을 코드화 하고 있으며 최대 65536개의 글자들을 코드화 할 수 있다 유니코드는 기존의 ASCII 코드 문자 집합을 포함 사이트 참조 문자 자료형의 사용 char grade1 = ‘A’; char grade2 = ‘\u0041’; // ‘A’와 같은 의미의 유니코드 char years = ‘2’;
16
3.4 변수와 자료형 자바의 특수 문자와 유니코드 3.4.3 이진 자료형(Boolean Data Type)
참 또는 거짓을 가지는 자료형 특수문자 표기방법 유니코드 Backspace \b \u0008 Tab \t \u0009 Linefeed \n \u000A Formfeed \f \u000C Carriage Return \r Backslash \\ \u005C Single Quote \’ \u0027 Double Quote \” \u0022
17
3.4 변수와 자료형 예제 : IntLiteral.java 예제 : DatatypeTest.java
예제 : DoubleFloat.java 예제 : CharacterBoolean.java
18
3.5 형변환(Casting) 형 변환은 치역(traget type)에 정의역(source type)의 값을 배정할 때 발생
확대(widening)변환 치역(traget type)이 정의역(source type)보다 더 넓어 값의 손실이 발생 되지 않고 저장. 예 : 8비트의 바이트 값을 32비트의 정수형으로 변환하는 경우 축소(narrowing)변환 명시적은 형변환 구문을 사용해야 한다 치역(traget type)이 정의역(source type)보다 좁아 값을 저장할 수 없는 경우. 예 : 32비트의 정수형 값을 8비트의 바이트 형으로 변환하면 정보의 손실이 발생
19
3.5 형변환(Casting) 축소 변환을 위해서는 명시적인 형변환 구문 사용 형변환의 예 : 정수값을 바이트 값으로 형변환
예제 : ConversionDemo.java 예제 : CastCharacter.java (target-type) value int a; byte b; ..... b = (byte) a;
20
3.6 연산자와 수식 연산자의 유형 단항연산자 이항 연산자 삼항 연산자 operator op op operator
op1 operator op2 삼항 연산자 expr ? op1 : op2
21
3.6 연산자와 수식 3.6.1 산술 연산자 연산자 사용법 설명 비고 + op1 + op2 op1과 op2를 더한다
단항 및 이항 - op1 – op2 op1에서 op2를 뺀다 * op1 * op2 op1과 op2를 곱한다 이항 / op1 / op2 op1과 op2를 나눈다 % op1 % op2 op1과 op2로 나눈 나머지를 구한다 ++ var++ ++var var 값 1 증가. var 값을 증가시키기 전에 평가 var 값 1 증가. var 값을 증가시킨 다음 평가 단항 -- var— --var var 값 1 감소. var 값을 감소시키기 전에 평가 var 값 1 증가. var 값을 감소시킨 다음 평가
22
3.6 연산자와 수식 3.6.2 관계 및 논리 연산자 관계 연산자 연산자 사용법 설명 > op1 > op2
>= op1 >= op2 op1이 op2 보다 크거나 같은 경우 참 < op1 < op2 op1이 op2 보다 작은 경우 참 <= op1 <= op2 op1이 op2 보다 작거나 같은 경우 참 == op1 == op2 op1과 op2가 같은 경우 참 != op1 != op2 op1과 op2가 같지 않을 경우 참 instanceof op1 instanceof op2 op1이 op2의 객체일 경우 참
23
3.6 연산자와 수식 논리 연산자 연산자 사용법 설명 & op1 & op2 op1과 op2가 모두 true인 경우 true
&& op1 && op2 op1이 false이면 op2를 평가하지 않는다 | op1 | op2 op1과 op2중 둘 중 하나가 true인 경우 true || op1 || op2 op1이 true이면 op2를 평가하지 않는다 ! !op op가 true이면 false, false이면 true
24
3.6 연산자와 수식 3.6.3 비트 연산자 비트 단위로 연산을 수행하며 int, long, short, char, byte 형에 적용 연산자 사용법 설명 >> op1 >> op2 op1을 op2만큼 오른쪽으로 쉬프트 << op1 << op2 op1을 op2만큼 왼쪽으로 쉬프트 >>> op1 >>> op2 op1을 op2만큼 오른쪽으로 쉬프트하면서 왼쪽에는 부호와 무관하게 0이 채워짐 & op1 & op2 비트 단위의 논리곱(AND) | op1 | op2 비트 단위의 논리합(OR) ^ op1 ^ op2 비트 단위의 배타적 논리합(XOR) ~ ~op2 비트 단위의 보수
25
3.6 연산자와 수식 비트 연산자 비트 연산자의 논리표 A B A|B A&B A^B ~A 1
26
3.6 연산자와 수식 3.6.4 배정 연산자와 단축 배정 연산자 단축 배정 연산자( i = i + 8; => i += 8;) 연산자 사용법 의미 += op1 += op2 op1 = op1 + op2 -= op1 -= op2 op1 = op1 - op2 *= op1 *= op2 op1 = op1 * op2 /= op1 /= op2 op1 = op1 / op2 %= op1 %= op2 op1 = op1 % op2 &= op1 &= op2 op1 = op1 & op2 |= op1 |= op2 op1 = op1 | op2 ^= op1 ^= op2 op1 = op1 ^ op2 <<= op1 <<= op2 op1 = op1 << op2 >>= op1 >>= op2 op1 = op1 >> op2 >>>= op1 >>>= op2 op1 = op1 >>> op2
27
3.6 연산자와 수식 3.6.5 3항 연산자 "?:” 선택문의 if-then-else문을 축약해서 사용할 수 있는 연산자
3항 연산자는 우선 수식1을 평가하여 true인지 false 인지를 판별하여 true이면 수식2가 평가되고, false 이면 수식3이 평가되어 그 결과가 수식1의 결과로 반환 예 : flag = count > 0 ? 0 : 1; count 값이 0보다 크면 flag에 0이 배정되고 count값이 0보다 크지 않으면 flag에 1값이 배정된다 예 : ratio = count > 0 && count <= 100 ? count/100 : 0 ; 수식 1에 해당하는 “count > 0 && count <= 100”을 평가하여 그 결과가 true이면 “count/100”의 결과를 ratio에 저장하고, false이면 ratio에 0을 저장 수식1 ? 수식2 : 수식3
28
>> >>> <<
3.6 연산자와 수식 3.6.6 연산자의 우선 순위 우선순위 연산자 1 () [] . 8 & 2 ~ ! 9 ^ 3 * / % 10 | 4 + - 11 && 5 >> >>> << 12 || 6 > >= < <= 13 ?: 7 == != 14 =
29
3.6 연산자와 수식 예제 : Arithmetic.java 예제 : Bitwise.java 예제 : BitEquals.java
예제 : TernaryDemo.java
30
3.7 문자열(String) 자바는 문자열을 String 클래스의 객체로 구현(12장) 사용 예
String str = "this is a test"; System.out.println(str); // 문자열 인쇄 int count = 4; System.out.println("Counted" + count + " characters"); // 문자열을 결합하여 인쇄 // 정수 4는 자동으로 문자열로 형변환
31
3.8 선택문 자바는 선택논리의 제공을 위해 if, switch 문 제공 3.8.1 if-else 문 if-else 문
int a,b; boolean flag; flag = false; // 생략 if (a < b) flag = true; System.out.println("Flag is" + flag);
32
3.8 선택문 if-else 문 예 int a,b; boolean flag; // ........생략 if (a < b)
flag = true; else flag = false; // else 절의 사용 System.out.println("Flag is" + flag); boolean dataAvailable; // 조건절에 boolean 변수를 직접 사용 if (dataAvailable) ProcessData(); waitForMoreData();
33
3.8 선택문 if-else 문 예 int bytesAvailable; // ...
if (bytesAvailable > 0) { // 한 문장 이상일 경우 블록으로 지정 ProcessData(); bytesAvailable -= n; } else { waitForMoreData(); bytesAvailable = n; }
34
3.8 선택문 3.8.2 내포된 if 문 if(i == 10) { if(j < 20) a = b;
예 if(i == 10) { if(j < 20) a = b; if(k > 100) c = d; else a = c; // 같은 블록 내에서 가장 가까운 if(k>100)과 연관된 else문 } else a = d; // 같은 블록 내에서 가장 가까운 if(i == 10)과 연관된 else문
35
3.8 선택문 3.8.3 if-else-if 문 if (조건절) 문장1; else if(조건절) 문장2; 문장3; ...
문장n;
36
3.8 선택문 3.8.4 switch 문 switch (수식) { case 값1: 처리문장들; break; case 값2:
case 값n: default: 묵시적으로 처리해야 하는 문장들; }
37
3.8 선택문 3.8.5 내포된 switch 문 예 switch(count) { case 1:
switch(flag) { //내포된 switch문 case 0: System.out.println("flag is zero"); break; case 1: // switch(count)의 case 1과 아무런 상관이 없다 System.out.println("flag is one"); } System.out.println("내포된 switch문 실행"); case 2:
38
3.8 선택문 예제 : IFelse.java 예제 : Switch.java 예제 : SwitchNoBreak.java
39
3.9 반복문 자바는 반복 논리를 제공하기 위해 while, do-while, for문을 제공
반복될 문장이 여러 문장일 경우 “{}”를 사용하여 블록으로 지정
40
3.9 반복문 3.9.1 while 문 조건절로 지정된 조건이 참일 동안 While 블록을 실행 예
반복문장들 } int a=10, b=20; while(a>b) System.out.println(“이 문장은 영원히 나타나지 않는다”);
41
3.9 반복문 3.9.2 do-while 문 예제 : DoWhile.java 예제 : DoUseMenu.java
반복문장들 } while(조건절);
42
3.9 반복문 3.9.3 for문 for문은 주어진 초기값을 시작으로 조건을 만족하는 동안 블록을 수행
초기값설정을 수행하고, 조건을 판단하여 참이면 블록을 수행하고, 증감 부분을 수행(과정반복) for(초기값 ; 조건 ; 증감) { 반복문장들 }
43
3.9 반복문 for문의 예 class For { public static void main(String args[]) {
int n; System.out.print("1에서 10까지의 정수 : " ); for(n=1; n < 11; n++) System.out.print(n + " " ); }
44
3.9 반복문 for문의 예 class For { public static void main(String args[]) {
System.out.print("1에서 10까지의 정수 : " ); for(int n=1; n < 11; n++) // for 문 내에서 변수를 선언하여 사용. // 변수 n은 main() 메소드를 유효범위로 가진다. System.out.print(n + " " ); } class ForErr { int n; // 변수 n 선언 // for 문 내에서 n을 다시 선언. 에러발생 }}
45
3.9 반복문 for문의 예 class DoubleC {
public static void main(String args[]) { int a, b; for(a=1, b=10; a<b; a++, b--) { // 초기화 부분과 증감부분에 두 개 이상의 구문을 콤마로 구분하여 지정 System.out.print("a = " + a); System.out.println(" b = " + b); }
46
3.9 반복문 for문의 예 boolean flag=false; for (int i=1; !flag; i++) {
if (finished_routine()) flag = true; } class Forflag { public static void main(String args[]) { int i; boolean flag = false; i = 1; for( ; !flag; ) { // 초기화 증감부분 생략 System.out.println("i의 값은 " + i + "입니다. "); if(i == 10) flag = true; i++; } } }
47
3.9 반복문 예제 : While.java 예제 : WhileNoBody.java 예제 : NestedFor.java
예제 : Alphabet.java 예제 : MinMax.java for( ; ; ) { // 무한 루프 }
48
3.10 제어의 이동 프로그램 제어를 이동시키기 위해 break, continue, return 문을 제공
switch문에서 switch문을 벗어나는데 사용 반복문에서 반복루프를 벗어나는데 사용 기존 프로그램 goto문의 개선된 형태로서 사용
49
3.10 제어의 이동 break문 예 class ForBreak {
public static void main(String args[]) { for(int i=0; i<100; i++) { if(i == 10) break; System.out.println(i + "자바의 세계로 오세요! " ); } System.out.println("Break에 의하여 for 문이 중단되었습니다."); }} class WhileBreak { int i = 0; while(i < 100) { i++; System.out.println("Break에 의하여 While 문이 중단되었습니다.");
50
3.10 제어의 이동 예제 : NestedForBreak.java 예제 : BreakTest.java
예제 : BreakErr.java
51
3.10 제어의 이동 3.10.2 continue 문 예제 : ContinueTest.java
반복문의 특정지점에서 제어를 반복문의 처음으로 보낸다 continue label 문 내포된 for문에서 제어를 label로 지정된 for문의 처음으로 이동시킨다. 예제 : ContinueTest.java 예제 : ContinueLabelTest.java
52
3.10 제어의 이동 return 문 제어를 메소드를 호출한 곳으로 반환. 예제 : Return.java
53
3.11 배열 같은 종류의 데이터를 저장하기 위한 자료구조 배열을 객체로 취급 3.11.1 1차원 배열
차원 배열 1차원 배열의 선언 type array-name[]; 또는 type[] array-name; 다차원 배열 다차원 배열 선언 type array-name[][]; 또는 type[][] array-name; 배열의 생성 array-name = new type[size]; 예 : int two_dim[][] = new int[4][5]; Tip : 자바의 배열은 한번 생성된 후에는 크기가 변할 수 없다
54
3.11 배열 예제 : Array.java 예제 : AutoArray.java 예제 : TwoArray.java
예제 : TwoDA.java 예제 : TwoDA1.java 예제 : ThreeDA.java
Similar presentations