제2장 데이터 및 수식
데이터와 식 또 다른 프로그래밍의 기본 개념을 살펴봅시다. 2장의 주요 강의 내용: 문자 스트링 기본 데이터 변수의 선언과 사용 수식과 연산자 우선순위 데이터 변환 사용자로부터의 입력 Java 에플릿 그래픽 소개 © 2004 Pearson Addison-Wesley. All rights reserved
목차 문자 스트링 (Character Strings) 변수와 배정 (Variables and Assignment) 기본 데이터 타입 (Primitive Data Types) 수식 (Expressions) 데이터 변환 (Data Conversion) 상호작용 프로그램 (Interactive Programs) 그래픽 (Graphics) 애플릿 (Applets) 형상 그리기 (Drawing Shapes) © 2004 Pearson Addison-Wesley. All rights reserved
문자 스트링(Charter Strings) 스트링 리터럴(string literal) 이중 인용부호로 둘러싸인 문자들 예: "This is a string literal." "123 Main Street" "X“ 모든 문자 스트링 String 클래스에서 정의되는 Java의 객체 모든 스트링 리터럴은 스트링 객체를 나타냄 © 2004 Pearson Addison-Wesley. All rights reserved
System.out.println ("Whatever you are, be a good one."); 문자 스트링의 프린트 println 메소드 사용 예, 1장의 Lincoln 프로그램 출력장소 지정 System.out 객체(모니터 출력) System.out.println ("Whatever you are, be a good one."); 메소드 이름 객체 메소드의 입력 데이터 (매개변수(parameter)) © 2004 Pearson Addison-Wesley. All rights reserved
print 메소드 System.out 객체는 우리가 사용할 수 있는 다른 서비스도 제공한다. print 메소드는 println 메소드와 비슷한데 출력 후 다음 라인으로 이동하지 않는다. 따라서 여러 개의 print 구문이 있을 때 출력되는 각 스트링은 모두 같은 줄에 출력된다. Countdown.java (67쪽) 참조 © 2004 Pearson Addison-Wesley. All rights reserved
Countdown.java 출력: Three… Two… One… Zero… Liftoff! //******************************************************************** // Countdown.java Author: Lewis/Loftus // // print문과 println문의 비교를 위한 데모프로그램 public class Countdown { //----------------------------------------------------------------- // 로케트의 카운트다운을 보여주는 두 줄의 출력 public static void main (String[] args) System.out.print ("Three... "); System.out.print ("Two... "); System.out.print ("One... "); System.out.print ("Zero... "); System.out.println ("Liftoff!"); //여기까지가 첫째 줄에 표시됨 System.out.println ("Houston, we have a problem.");//이 내용은 둘째 줄에 표시됨 } 출력: Three… Two… One… Zero… Liftoff! Houston, we have a problem. © 2004 Pearson Addison-Wesley. All rights reserved
스트링 접합(String Concatenation) 하나의 스트링을 다른 스트링의 끝에 접합시키는 스트링 접합 연산자로 플러스 기호(+)를 사용한다. "Peanut butter " + "and jelly" 이 연산자는 숫자를 스트링에 접합시키는데도 사용된다. 스크링 리터럴(string literal)은 두 라인으로 나누어 사용될 수 없다. 예, println(“This is a very long line with numbers. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10…”) //두 라인에 걸쳐 사용될 수 없다. => println(“this is a very long line with num” + “bers. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10”) Facts.java 참조(68쪽[영문 65쪽]) © 2004 Pearson Addison-Wesley. All rights reserved
Facts.java We present the following facts for your extracurricular edification: Letters in the Hawaiian alphabet: 12 Dialing code for Antarctica: 672 Year in which Leonardo da Vinci invented the parachute: 1515 Speed of ketchup: 40 km per year //******************************************************************** // Facts.java Author: Lewis/Loftus // // 스트링 접합 연산자의 사용과 정수에서 스트링으로의 자동 변환의 예 public class Facts { //----------------------------------------------------------------- // Prints various facts. public static void main (String[] args) // 스트링들이 하나의 스트링으로 접합될 수 있다. System.out.println ("We present the following facts for your " + "extracurricular edification:"); System.out.println (); // 스트링은 숫자들을 포함할 수 있다. System.out.println ("Letters in the Hawaiian alphabet: 12"); // 수치(numeric value)들은 스트링에 접합될 수 있다. System.out.println ("Dialing code for Antarctica: " + 672); System.out.println ("Year in which Leonardo da Vinci invented " + "the parachute: " + 1515); System.out.println ("Speed of ketchup: " + 40 + " km per year"); } © 2004 Pearson Addison-Wesley. All rights reserved
스트링 접합 (계속) 플러스 기호(+) 는 산술 덧셈기호로도 사용된다. 연산에 사용하는 데이터의 종류에 따라 자동으로 적절한 연산을 선택하게 된다. 스트링 접합: 스트링 + 스트링, 스트링 + 숫자, 숫자 + 스트링 산술 덧셈: 숫자 + 숫자 + 연산자는 왼쪽에서부터 오른쪽으로 연산을 수행함 (예외, 괄호 안 연산은 우선 수행) Addition.java 참조(71쪽[영문 67쪽]) © 2004 Pearson Addison-Wesley. All rights reserved
Addition.java 24 and 45 concatenated: 2445 24 and 45 added: 69 //******************************************************************** // Addition.java Author: Lewis/Loftus // // 덧셈과 스트링 접합 연산자의 차이를 보여준사. public class Addition { //----------------------------------------------------------------- // 두 수를 접합하고 더해서 출력하는 예(연산 순서 중요) public static void main (String[] args) System.out.println ("24 and 45 concatenated: " + 24 + 45); System.out.println ("24 and 45 added: " + (24 + 45)); } 24 and 45 concatenated: 2445 24 and 45 added: 69 © 2004 Pearson Addison-Wesley. All rights reserved
탈출 시퀀스(Escape Sequence) 이중 인용 부호(”)의 출력 방법은? 아래 예의 경우 컴파일러는 두 번째 인용 부호(Hello 앞의 것)를 스트링의 마지막으로 착각할 수 있다. 이 경우 다시 H라는 문자에 대해 무엇을 해야 할지 모름. (컴파일-시간 에러 초래) 예, System.out.println ("I said "Hello" to you."); 탈출 시퀀스(escape sequence)는 연속되는 문자로 표현하고 특수문자를 나타낸다. 탈출 시퀀스는 백슬래쉬(backslash) 문자(\)로 시작한다. System.out.println ("I said \"Hello\" to you."); © 2004 Pearson Addison-Wesley. All rights reserved
탈출 시퀀스(계속) 자바의 탈출 시퀀스: Roses.java 참조(72쪽[영문 68쪽]) 탈출 시퀀스 \b \t \n \r \" \' \\ 의미 백스페이스(backspace) 탭(tab) 개행(newline) 열복귀(carriage return) 이중 인용부호(double quote) 단일 인용부호(single quote) 백슬래쉬(backslash) Roses.java 참조(72쪽[영문 68쪽]) © 2004 Pearson Addison-Wesley. All rights reserved
Roses.java Roses are red, Violets are blue, Sugar is sweet, //******************************************************************** // Roses.java Author: Lewis/Loftus // // 탈출 시퀀스의 사용을 보여준다. public class Roses { //----------------------------------------------------------------- // 시를 여러 줄에 걸쳐 출력한다. public static void main (String[] args) System.out.println ("Roses are red,\n\tViolets are blue,\n" + "Sugar is sweet,\n\tBut I have \"commitment issues\",\n\t" + "So I'd rather just be friends\n\tAt this point in our " + "relationship."); } Roses are red, Violets are blue, Sugar is sweet, But I have "commitment issues", So I'd rather just be friends At this point in our relationship. © 2004 Pearson Addison-Wesley. All rights reserved
목차 문자 스트링 (Character Strings) 변수와 배정 (Variables and Assignment) 기본 데이터 타입 (Primitive Data Types) 수식 (Expressions) 데이터 변환 (Data Conversion) 상호작용 프로그램 (Interactive Programs) 그래픽 (Graphics) 애플릿 (Applets) 형상 그리기 (Drawing Shapes) © 2004 Pearson Addison-Wesley. All rights reserved
하나의 선언문에서 같은 타입의 여러 개의 변수를 동시에 선언할 수 있다. 변수(Variables) 변수는 컴퓨터의 메모리 내 한 의치의 이름이다. 변수의 선언은 변수의 이름과 그 장소에 저장할 데이터의 타입을 포함한다. 변수 명(variable name) 데이터 타입(data type) int total; int count, temp, result; 하나의 선언문에서 같은 타입의 여러 개의 변수를 동시에 선언할 수 있다. © 2004 Pearson Addison-Wesley. All rights reserved
변수의 초기화(variable Initialization) 변수는 선언 할 때 초기 값을 부여 할 수 있다. int sum = 0; int base = 32, max = 149; 변수가 프로그램에서 참조될 때 변수에 저장되어 있는 현재의 값이 사용된다. PianoKeys.java 참조(74쪽[영문 70쪽]) © 2004 Pearson Addison-Wesley. All rights reserved
Pianokeys.java 출력: A piano has 88 keys. //******************************************************************** // PianoKeys.java Author: Lewis/Loftus // // Demonstrates the declaration, initialization, and use of an // integer variable. public class PianoKeys { //----------------------------------------------------------------- // Prints the number of keys on a piano. public static void main (String[] args) int keys = 88; System.out.println ("A piano has " + keys + " keys."); } 출력: A piano has 88 keys. © 2004 Pearson Addison-Wesley. All rights reserved
배정(Assignment) 배정문은 변수의 값을 변경하는데 사용 된다. 배정 연산자: = 배정 연산자: = total = 55; 배정연산자의 오른 쪽에 있는 식이 먼저 계산되고 그 결과가 왼쪽에 있는 변수 명을 갖은 메모리에 저장된다. 위의 예에서 새로운 값은 total에 저장되어있던 값을 덮어쓴다. 변수에 저장하는 값은 선언문에서 지정했던 타입과 일치하여야 한다. Geometry.java 참조(75쪽[영문 71쪽]) © 2004 Pearson Addison-Wesley. All rights reserved
Geometry.java 출력: A heptagon has 7 sides. A decagon has 10 sides. //******************************************************************** // Geometry.java Author: Lewis/Loftus // // Demonstrates the use of an assignment statement to change the // value stored in a variable. public class Geometry { //----------------------------------------------------------------- // Prints the number of sides of several geometric shapes. public static void main (String[] args) int sides = 7; // declaration with initialization System.out.println ("A heptagon has " + sides + " sides."); sides = 10; // assignment statement System.out.println ("A decagon has " + sides + " sides."); sides = 12; System.out.println ("A dodecagon has " + sides + " sides."); } 출력: A heptagon has 7 sides. A decagon has 10 sides. A dodecagon has 12 sides. © 2004 Pearson Addison-Wesley. All rights reserved
final int MIN_HEIGHT = 69; 상수(Constants) 상수는 변수와 비슷한 식별자(identifier) 이나 존재하는 동안 언제나 하나의 특정 값만을 유지해야 한다는 점이 다르다. 이름에서 보듯이, 그 값이 변하지 않는 것이다(constant). c.f., 변수: 변하는 값(variable) 만일 값이 설정된 상수의 값을 변경하려고 한다면 컴파일러는 오류 메시지를 낼 것이다. Java에서는 선언문 앞에 예약어 final을 사용하면 그 식별자는 상수가 된다. final int MIN_HEIGHT = 69; © 2004 Pearson Addison-Wesley. All rights reserved
상수(계속) 다음과 같은 세가지 이유에서 상수는 매우 유용하다. 1. 불명확한 리터럴 값에 의미를 부여할 수 있다. 1. 불명확한 리터럴 값에 의미를 부여할 수 있다. 예, 250이라는 숫자보다는 MAX_LOAD가 의미를 잘 전달한다 2. 프로그램 관리가 편리해 진다. 예, 프로그램의 여러 곳에서 사용된 상수 값을 변경하려는 경우, 선언문 한곳만 수정하면 된다. 3. 변화되면 안 되는 값이라는 것을 형식적으로 명백히 함으로써 , 다른 프로그래머에 의한 부주의한 오류를 예방 할 수 있다. © 2004 Pearson Addison-Wesley. All rights reserved
목차 문자 스트링 (Character Strings) 변수와 배정 (Variables and Assignment) 기본 데이터 타입 (Primitive Data Types) 수식 (Expressions) 데이터 변환 (Data Conversion) 상호작용 프로그램 (Interactive Programs) 그래픽 (Graphics) 애플릿 (Applets) 형상 그리기 (Drawing Shapes) © 2004 Pearson Addison-Wesley. All rights reserved
기본 데이터(Primitive Data) Java에는 8가지의 기본 데이터 타입이 있다 4가지 유형의 정수(integer) 타입: byte, short, int, long 2가지 유향의 부동 소수점(floating point) 타입: float, double 1가지 유형의 문자 (character) 타입: char 1가지 유형의 부울 (boolean) 데이터 타입: boolean © 2004 Pearson Addison-Wesley. All rights reserved
수를 나타내는(Numeric) 기본 데이터 수를 나타내는 여러 가지 기본 데이터 타입의 차이점은 데이터의 크기이다. 따라서 저장할 수 있는 데이터의 범위는 다음과 같다. 타입 byte short int long float double 기억장소 8 비트 16 비트 32 비트 64 비트 최소값 -128 -32,768 -2,147,483,648 < -9 x 1018 +/- 3.4 x 1038 with 7 significant digits +/- 1.7 x 10308 with 15 significant digits 최대값 127 32,767 2,147,483,647 > 9 x 1018 © 2004 Pearson Addison-Wesley. All rights reserved
문자(Characters) char 변수는 하나의 문자를 저장한다. 문자 리터럴(Character literal)은 단일 인용 부호로 표현된다: 'a' 'X' '7' '$' ',' '\n' 선언의 예: char topGrade = 'A'; char terminator = ';', separator = ' '; 기본 문자 변수: 하나의 문자 저장 스트링 객채( String object): 여러 개의 문자 저장 (기본 데이터 타입 아님) © 2004 Pearson Addison-Wesley. All rights reserved
문자 집합(Character Sets) 문자 집합은 특정 순서를 갖는 문자들로 이루어져 있고 각 문자는 유일한 수와 일치한다. Java에서의 char 변수는 유니코드 문자 집합 (Unicode character set) 의 문자를 저장 할 수 있다. 유니코드 문자 집합은 문자당 16 비트를 사용한다. 따라서 65,536개의 문자를 지원할 수 있다. 유니코드 문자 집합은 국제적 문자 집합으로 여러 나라의 언어에서 사용하는 기호와 문자를 포함하고 있다. © 2004 Pearson Addison-Wesley. All rights reserved
문자(Characters) ASCII 문자 집합은 유니코드 보다 더 오래되고 작은 문자 집합이지만 아직도 널리 사용되고 있다. ASCII 문자는 Unicode 문자 집합의 부분집합으로 다음과 같은 문자를 제공한다: uppercase letters lowercase letters punctuation digits special symbols control characters A, B, C, … a, b, c, … period, semi-colon, … 0, 1, 2, … &, |, \, … carriage return, tab, ... © 2004 Pearson Addison-Wesley. All rights reserved
부울(Boolean) 부울(boolean) 값은 참(true)아냐 거짓(false)이냐의 상태를 나타낸다. boolean done = false; 부울 변수( boolean variable)는 두 가지 상태를 나타내는 모드 경우에 사용할 수 있다. 예, 전구의 켜짐 과 꺼짐, 특정 값의 변경 전 과 후, 회원과 비회원… © 2004 Pearson Addison-Wesley. All rights reserved
목차 문자 스트링 변수와 배정 기본 데이터 타입 수식 데이터 변환 상호작용 프로그램 그래픽 애플릿 형상 그리기 © 2004 Pearson Addison-Wesley. All rights reserved
식(Expressions) 식 수식(Arithmetic expressions) 연산자(operator)와 피연산자(operand)의 결합 수식(Arithmetic expressions) 수식연사자(arithmetic operator)를 사용하여 값을 계산한다 덧셈(Addition) + 뺄셈(Subtraction) - 곱셈(Multiplication) * 나눗셈(Division) / 나머지연산(Remainder) % 하나 혹은 두 개의 피연산자가 부동 소수점 값이면 그 연산의 결과도 부동 소수점 값이 된다. © 2004 Pearson Addison-Wesley. All rights reserved
나눗셈과 나머지연산 나눗셈(/) 두 개의 피연산자가 모두 정수이면, 결과는 정수가 된다. (소수점 이하는 버림) 14 / 3 결과는 4 8 / 12 결과는 나머지 연산자(%) 나눗셈 후 그 나머지 계산 14 % 3 결과는 2 8 % 12 결과는 8 © 2004 Pearson Addison-Wesley. All rights reserved
연산자 우선순위(precedence) 연산자들이 결합되어 복잡한 수식 표현 연산자 우선순위 result = total + count / max - offset; 연산자 우선순위 어느 연산을 먼저 할 지 결정하는 규칙 곱셈과 나눗셈, 나머지연산이 덧셈, 뺄셈, 스트링 접합보다 우선 동일한 우선순위를 갖는 연산자들은 왼쪽에서 오른쪽으로 괄호(parentheses)안의 계산은 먼저 수행한다. © 2004 Pearson Addison-Wesley. All rights reserved
연산자 우선순위(계속) 예) 다음 수식에서 연산되는 순서는? a + b + c + d + e a + b * c - d / e 1 2 3 4 3 1 4 2 a / (b + c) - d % e 2 1 4 3 a / (b * (c + (d - e))) 4 3 2 1 © 2004 Pearson Addison-Wesley. All rights reserved
수식 트리(Expression Trees) 수식 연산은 수식 트리로 표현할 수 있다. 우선순위 트리의 아래 부분에 있는 연산은 윗 부분에 있는 연산보다 더 높은 우선순위를 갖는다. a + / - d b c a + (b – c) / d 우선순위 © 2004 Pearson Addison-Wesley. All rights reserved
“=“ 배정기호의 오른쪽에 있는 수식이 먼저 계산되고 배정 (Assignment) 배정 수행은 수식연산보다 낮은 우선순위를 갖는다. “=“ 배정기호의 오른쪽에 있는 수식이 먼저 계산되고 answer = sum / 4 + MAX * lowest; 4 1 3 2 그 다음에 연산된 결과가 배정기호 오른쪽에 있는 변수에 저장된다. © 2004 Pearson Addison-Wesley. All rights reserved
(count의 원래 값을 새 값으로 덮어쓴다.) 배정 (Assignment) 배정문의 좌우에 같은 변수를 포함할 수 있다. 먼저 count에 저장된 현재 값에 1을 더하고 count = count + 1; 그 다음 계산 결과를 count에 저장한다. (count의 원래 값을 새 값으로 덮어쓴다.) (원래 값은 다시 복원할 수 없음) © 2004 Pearson Addison-Wesley. All rights reserved
증가/감소 연산(Increment and Decrement) 증가/감소 연산자 하나의 피연산자(operand)를 갖는다. 증가 연산자(++)는 피연산자의 값에 1을 더한다. 감소 연사자(--)는 피연산자의 값에 1을 뺀다. 예 count++; count = count + 1; © 2004 Pearson Addison-Wesley. All rights reserved
증가/감소 연산 전위/후위 증가, 감소 연산 count++ ++count 두 가지 형태가 단독으로 사용될 때는 동일한 결과 전위/후위 증가, 감소 연산 후위 형태(postfix form): 값을 읽고 증가 count++ 전위 형태(prefix form): 먼저 증가 후 값을 읽음 ++count 두 가지 형태가 단독으로 사용될 때는 동일한 결과 다른 수식 안에 사용되었을 때는 다른 결과를 준다. count = 3; a = 3 + count++; a: 6, count: 4 count = 3; a = 3 + ++count; a: 7, count: 4 © 2004 Pearson Addison-Wesley. All rights reserved
배정 연산자(Assignment Operators) 필요성 어떤 변수에 대해 연산한 후 그 결과를 동일 변수에 다시 저장 그 절차를 간단히 해주기 위한 배정 연산자 제공 예 num += count; num = num + count; © 2004 Pearson Addison-Wesley. All rights reserved
배정 연산자(Assignment Operators) Java의 배정연산자들 연산자 += -= *= /= %= 사용 예 x += y x -= y x *= y x /= y x %= y 동일 결과 x = x + y x = x - y x = x * y x = x / y x = x % y © 2004 Pearson Addison-Wesley. All rights reserved
배정 연산자(Assignment Operators) 배정 연산자의 오른쪽이 복잡한 수식인 경우 오른쪽 수식 전체가 먼저 계산된 후 그 계산 결과가 왼쪽의 변수와 결합하게 된다. 예, result /= (total-MIN) % num; result = result / ((total-MIN) % num); © 2004 Pearson Addison-Wesley. All rights reserved
목차 문자 스트링 변수와 배정 기본 데이터 타입 수식 데이터 변환 상호작용 프로그램 그래픽 애플릿 형상 그리기 © 2004 Pearson Addison-Wesley. All rights reserved
데이터 변환(Data Conversion) 필요성 한 타입의 데이터의 값을 다른 타입의 값으로 변환하는 것이 편리한 경우가 있다. 예: 정수를 실수처럼 사용하기를 원할 때 데이터 변환 현 계산에 한하여 변수에 저장된 값의 타입을 변환하여 사용하게 된다. (변환 사용 후 변수는 계속 이전 타입 유지) © 2004 Pearson Addison-Wesley. All rights reserved
데이터 변환(Data Conversion) 변환 시 정보를 잃지 않도록 조심 해서 사용해야 한다. 확장 변환(widening conversion) 작은 데이터 타입에서 더 큰 타입으로 변환 정보가 손실되지 않아서 안전하다. (예, short 에서 int) 축소변환(Narrowing conversion) 큰 데이터 타입에서 작은 데이터 타입으로 변환 정보를 잃을 수 있다. (예 int 에서 short) 3가지 데이터 변환 배정 변환(assignment conversion) 상향 변환(promotion) 캐스팅 변환(casting) © 2004 Pearson Addison-Wesley. All rights reserved
배정 변환(Assignment Conversion) 어떤 타입의 값이 다른 타입을 갖는 변수에 배정될 때 일어난다. 확장 변환만 배정 변환 가능 예 money가 float 변수이고 dollars가 int 변수 이면, 다음 배정문은 자동으로 dollars의 값을 float로 변환한다. money = dollars 주의: 위 문장 수행 후, dollars의 값이나 타입은 변경 없음 © 2004 Pearson Addison-Wesley. All rights reserved
데이터 변환(Data Conversion) 상향 변환(Promotion) 연산자가 연산을 수행하기 위해서 피연산자들을 변경할 필요가 있을 때 자동적으로 일어난다. 예 sum 이 float이고 count가 int일 때 count의 값은 floating point 값으로 자동 변환 result = sum / count; © 2004 Pearson Addison-Wesley. All rights reserved
캐스팅 변환(Casting) 캐스팅(Casting) 예 total이 부동 소수 값이 되면 count도 부동 소수로 가장 강력하고 위험한 명시적인 캐스팅 변환 확장(widening) 과 축소(narrowing) 변환 모두 가능 값 앞에 괄호 안의 type 지정함으로써 수행 된다. 예 total과 count는 정수(int) 일 때 나눗셈의 결과는 부동 소수(floating point)를 원한다면 result = (float) total / count; total이 부동 소수 값이 되면 count도 부동 소수로 상향 변환된다. © 2004 Pearson Addison-Wesley. All rights reserved
목차 문자 스트링 변수와 배정 기본 데이터 타입 수식 데이터 변환 상호작용 프로그램 그래픽 애플릿 형상 그리기 © 2004 Pearson Addison-Wesley. All rights reserved
상호작용(Interactive) 프로그램 프로그램은 입력(input)을 필요로 한다. Scanner 클래스 다양한 타입의 입력 값들을 읽어 들이기 위한 편리한 방법 제공 Scanner 객체는 사용자의 키보드 등 다양한 경로로 들어오는 여러 타입의 입력을 받을 수 있도록 설정될 수 있다. System.in 키보드 (입력)을 나타내는 객체 © 2004 Pearson Addison-Wesley. All rights reserved
Scanner scan = new Scanner (System.in); 입력 방법(Reading Input) 키보드 입력을 위한 Scanner 객체 생성 Scanner scan = new Scanner (System.in); new 연산자로 Scanner 객체 Scanner 객체를 이용하여 다양한 입력 메소드를 호출 가능 answer = scan.nextLine(); © 2004 Pearson Addison-Wesley. All rights reserved
입력 방법(Reading Input) Scanner 클래스 nextLine 메소드 java.util 클래스 라이브러리(class library)에 속함 사용하기 위하여는 반드시 프로그램에 import 되어야 함 (import문은 3 장에서 설명) nextLine 메소드 현재 줄의 끝까지 남아 있는 모든 입력을 문자 스트링으로 반환. Echo.java (95쪽[영문 91]) 참조 © 2004 Pearson Addison-Wesley. All rights reserved
Echo.java 출력: Enter a line of text: Testing! You entered: “Testing!” //******************************************************************** // Echo.java 저자: 루이스와 롭터스 // // 사용자로부터 스트링을 읽어들이는 Scanner 클래스의 // nextLine 메쏘드의 사용을 보여준다. import java.util.Scanner; public class Echo { //----------------------------------------------------------------- // 사용자로부터 문자 스트링을 읽어들여서 출력한다. public static void main (String[] args) String message; Scanner scan = new Scanner (System.in); System.out.println ("Enter a line of text:"); message = scan.nextLine(); System.out.println ("You entered: \"" + message + "\""); } 출력: Enter a line of text: Testing! You entered: “Testing!” © 2004 Pearson Addison-Wesley. All rights reserved
입력 토큰(Input Tokens) 토큰(token) 구분 Scanner 클래스의 next 메소드 공백 문자(white space)가 사용된다. space 문자(빈칸), 탭(tab), 개행(new line) 문자 등 Scanner 클래스의 next 메소드 다음 입력의 토큰(token)을 스트링으로 읽어서 반환 nextInt/nextDouble 메소드 데이터를 int나 double 타입으로 읽어들인다. GasMileage.java (96쪽) 참조 © 2004 Pearson Addison-Wesley. All rights reserved
GasMileage.java 출력: Enter the number of miles: 288 // 수치 데이터를 읽어들이기 위한 Scanner 클래스의 사용을 보여준다. //******************************************************************** import java.util.Scanner; public class GasMileage { // 사용자가 입력한 값들에 기반하여 연비를 계산한다. public static void main (String[] args) { int miles; double gallons, mpg; Scanner scan = new Scanner (System.in); System.out.print ("Enter the number of miles: "); miles = scan.nextInt(); System.out.print ("Enter the gallons of fuel used: "); gallons = scan.nextDouble(); mpg = miles / gallons; System.out.println ("Miles Per Gallon: " + mpg); } 출력: Enter the number of miles: 288 Enter the gallon of fuel used: 7.5 Miles per Gallon: 38.4 © 2004 Pearson Addison-Wesley. All rights reserved
목차 문자 스트링 변수와 배정 기본 데이터 타입 수식 데이터 변환 상호작용 프로그램 그래픽 애플릿 형상 그리기 © 2004 Pearson Addison-Wesley. All rights reserved
그래픽(Graphics) 소개 그래픽 트랙 그림 모니터 해상도( monitor resolution) 각 장의 마지막 부분 그래픽과 그래픽 사용자 인터페이스(User interface) 그림 그림은 그림의 한 점을 나타내는 화소(pixels)로 나누어져 있고, 각 화소에는 그 점의 색정보가 저장된다. 그림을 표현하는데 사용된 픽셀들의 수를 해상도(resolution)라 한다. 모니터 해상도( monitor resolution) 모니터에 디스플레이될 수 있는 픽셀들의 수 © 2004 Pearson Addison-Wesley. All rights reserved
좌표계(Coordinate Systems) 화소(pixel) 2차원 좌표계(two-dimensional coordinate system)를 통해 지칭될 수 있다. Java 좌표계 위쪽 좌측 모서리(top-left corner)를 원점(0,0) 112 Y X (0, 0) 40 (112, 40) © 2004 Pearson Addison-Wesley. All rights reserved
색상 표현 흑백 그림 컬러 그림 하나의 비트를 사용하여 각 픽셀을 저장 (0 = white, 1 = black) 한 픽셀은 색을 표현해야 한다. 세가지 기본 색인 Red, Greed, Blue의 혼합으로 표현 각각의 기본 색은 0에서 255사이의 숫자로 표현된다. 세가지 숫자로 표현된 컬러를 적록청 값(RGB-value)라 한다. © 2004 Pearson Addison-Wesley. All rights reserved
Color 클래스 컬러 표현 Color class의 미리 정의된 컬러들 Color class로부터 만들어지는 객체(object)로 표현된다. Color class의 미리 정의된 컬러들 객체(Object) Color.black Color.blue Color.cyan Color.orange Color.white Color.yellow RGB 값 0, 0, 0 0, 0, 255 0, 255, 255 255, 200, 0 255, 255, 255 255, 255, 0 © 2004 Pearson Addison-Wesley. All rights reserved
목차 문자 스트링 변수와 배정 기본 데이터 타입 수식 데이터 변환 상호작용 프로그램 그래픽 애플릿 형상 그리기 © 2004 Pearson Addison-Wesley. All rights reserved
애플릿(Applets) Java의 두 가지 종류의 프로그램 어플리케이션 애플릿 Java 어플리케이션(application) Java 애플릿(applet) 어플리케이션 main 메소드를 (method)를 갖고 있는 독립적인 프로그램 Java 인터프리터로 실행할 수 있는 프로그램 애플릿 웹(Web)상에서 전송되어 웹 브라우저에서 실행되는 프로그램 JDK의 appletviewer로도 실행 가능 main 메소드가 없고 특정 메소드들을 갖는다. © 2004 Pearson Addison-Wesley. All rights reserved
애플릿(Applets) 예, paint method: Graphics 객체(object) 애플릿에 의해 자동 실행됨 보통 애플릿의 내용을 그리는데 사용 paint 메쏘드는 매개변수로 Graphics 클래스의 객체를 받아들임. Graphics 객체(object) 그림을 그리는데 필요한 그래픽 문맥(graphics context) 정의 Graphics 클래스는 여러 가지 형상을 그리는데 사용하는 메소드들을 제공한다. © 2004 Pearson Addison-Wesley. All rights reserved
애플릿(Applets) 애플릿을 정의 하는 클래스 애플릿 실행 Applet 혹은 JApplet 클래스를 확장(extend)해야 한다. 상속(inheritance) 개념 (8장) 애플릿 실행 HTML 문서에서 태그(tag)를 통해 클래스 파일 참조해야 한다. 애플릿의 클래스 파일이 웹 상에서 전송되고 브라우저(browser) 내의 Java interpreter통해 실행 © 2004 Pearson Addison-Wesley. All rights reserved
Einstein.java //******************************************************************** // Einstein.java 저자: 루이스와 롭터스 // // 간단한 애플릿을 보여준다. import javax.swing.JApplet; import java.awt.*; public class Einstein extends JApplet { //----------------------------------------------------------------- // 앨버트 아인슈타인의 인용문을 어떤 형상들 가운데 그린다. public void paint (Graphics page) page.drawRect (50, 50, 40, 40); // 정사각형 page.drawRect (60, 80, 225, 30); // 직사각형 page.drawOval (75, 65, 20, 20); // 원 page.drawLine (35, 60, 100, 120); // 선분 page.drawString ("Out of clutter, find simplicity.", 110, 70); page.drawString ("-- Albert Einstein", 130, 100); } © 2004 Pearson Addison-Wesley. All rights reserved
HTML 애플릿 태그 주의: java 소스파일이 아닌 클래스 파일 사용 <html> <head> <title>The Einstein Applet</title> </head> <body> <applet code="Einstein.class" width=350 height=175> </applet> </body> </html> 주의: java 소스파일이 아닌 클래스 파일 사용 © 2004 Pearson Addison-Wesley. All rights reserved
목차 문자 스트링 변수와 배정 기본 데이터 타입 수식 데이터 변환 상호작용 프로그램 그래픽 애플릿 형상 그리기 © 2004 Pearson Addison-Wesley. All rights reserved
형상 그리기(drawing shapes) Graphics class의 메소드 사용 사각형 그리기 void drawRect (int x, int y, int width, int height) void fillRect (int x, int y, int width, int height) 매개변수는 좌표(coordinates)와 크기(sizes)를 정의한다. 타원형(oval) 경계사각형(bounding rectangle)으로 정의한다. 왼쪽 윗모서리 좌표와 타원이 들어갈 사각형의 폭과 높이로 정의 호(arc) 타원의(oval) 한 부분으로 생각할 수 있다. © 2004 Pearson Addison-Wesley. All rights reserved
Drawing a Line page.drawLine (10, 20, 150, 45); or X Y 10 150 20 45 page.drawLine (10, 20, 150, 45); page.drawLine (150, 45, 10, 20); or © 2004 Pearson Addison-Wesley. All rights reserved
Drawing a Rectangle page.drawRect (50, 20, 100, 40); 50 X 20 40 100 Y © 2004 Pearson Addison-Wesley. All rights reserved
Drawing an Oval 경계 사각형 (bounding rectangle) X Y 175 20 80 경계 사각형 (bounding rectangle) 50 page.drawOval (175, 20, 50, 80); © 2004 Pearson Addison-Wesley. All rights reserved
Drawing Shapes 배경 색상(background color) 지정 전경색상(foreground color) 지정 setBackground (Color.cyan); 전경색상(foreground color) 지정 page.setColor (Color.blue); Snowman.java (103쪽[한글:107쪽]) 참조 © 2004 Pearson Addison-Wesley. All rights reserved
Snowman.java import javax.swing.JApplet; import java.awt.*; //******************************************************************** // Snowman.java 저자: 루이스와 롭터스 // 기본적인 그리기 메쏘드들과 색상의 사용을 보여준다. import javax.swing.JApplet; import java.awt.*; public class Snowman extends JApplet { // 눈사람을 그린다. public void paint (Graphics page) final int MID = 150; final int TOP = 50; setBackground (Color.cyan); page.setColor (Color.blue); page.fillRect (0, 175, 300, 50); // 땅 page.setColor (Color.yellow); page.fillOval (-40, -40, 80, 80); // 태양 © 2004 Pearson Addison-Wesley. All rights reserved
Snowman.java(계속) page.setColor (Color.white); page.fillOval (MID-20, TOP, 40, 40); // 머리 page.fillOval (MID-35, TOP+35, 70, 50); // 위 몸통 page.fillOval (MID-50, TOP+80, 100, 60); // 아래 몸통 page.setColor (Color.black); page.fillOval (MID-10, TOP+10, 5, 5); // 왼쪽 눈 page.fillOval (MID+5, TOP+10, 5, 5); // 오른쪽 눈 page.drawArc (MID-10, TOP+20, 20, 10, 190, 160); // 웃는 모습 page.drawLine (MID-25, TOP+60, MID-50, TOP+40); // 왼팔 page.drawLine (MID+25, TOP+60, MID+55, TOP+60); // 오른팔 page.drawLine (MID-20, TOP+5, MID+20, TOP+5); // 모자 챙 page.fillRect (MID-15, TOP-20, 30, 25); // 모자 윗 부분 } © 2004 Pearson Addison-Wesley. All rights reserved
요약(Summary) 문자 스트링(character strings) 기본 데이터(primitive data) 변수의 선언과 사용(the declaration and use of variables) 수식과 연산자 우선순위(expressions and operator precedence) 데이터 변환(data conversions) 사용자 입력(accepting input from the user) Java 애플릿(Java applets) 그래픽 개요(introduction to graphics) © 2004 Pearson Addison-Wesley. All rights reserved