CHAPTER 02 데이터형과수식 JAVA Programing
개요 학습목표 4가지기본데이터형과변수의선언및할당방법연산자들과연산식의사용법간단하게입출력을하는방법 목차 데이터형변수의선언과초기화식별자와예약어연산자와연산식간단한입출력
개요 메모장과 DOS 창에서프로그래밍 객체지향이후이클립스사용 메모장과 DOS 창을연다.(notepad, cmd) DOS 명령어 디렉토리이동 : cd [ 이동할디렉토리명 ] 디렉토리내용보기 : dir 디렉토리만들기 : mkdir [ 디렉토리명 ] 디렉토리지우기 : rmdir [ 디렉토리명 ] C:\ 밑에작업디렉토리학번디렉토리생성및 HelloWorld 작성, 컴파일, 실행
데이터형 (data type) 변수의필요성 프로그래머는어떤메모리에어떤값을저장했는지를일일이기억해야한다. 그러나, 사람은숫자보다는문자를기억하기쉽다. 다음 2 개의프로그램을비교해보자 INPUT (1000) INPUT (1001) (1002) = (1000) + (1001) PRINT (1002) INPUT kor INPUT eng total = kor + eng PRINT total 여기서는메모리를 3 개만이용했지만, 수백개가필요한프로그램에서는기억하는것이불가능 따라서, 변수를사용 다음을꼭기억해두자 변수는메모리의주소를심볼로나타낸것이다.
데이터형 (data type) 데이터형의필요성 변수는메모리의주소를심볼로나타낸것이다. 메모리는 1byte(8bit) 단위로주소가정해져있다. 1byte 보다큰크기의자료를저장시키려면, 여러개의메모리를하나의단위로처리 따라서, 데이터크기와메모리의저장할데이터종류 ( 종수, 실수등 ) 를미리결정해야한다. 이것이데이터형이다. 변수선언 변수선언은사용할메모리크기와저장할형을미리결정해주는것이다.
변수의선언과초기화 변수의선언 요리전에음식을담을그릇을준비하는것 선언시자바에서는변수의자료형에맞는기억공간을미리확보. 변수를선언하지않고사용하게되면오류발생 변수선언법 자료형 (type) int size ; 이름 (name) char c; int i; double interestrate;
변수의선언과초기화 변수선언과동시에값을넣는방법 변수이름뒤에대입연산자를 = 놓고초기값을적으면된다. char charex="a"; int intex=8; double DoubleEx= 0.05; 하나의문장을변수를여러개선언할수도있다. int index, total =0;
데이터형 정수형 (Integer) 실수형 (float) 기본데이터형 부울린형 (Boolean) 문자형 (Char) 데이터형 (Data Type) 배열 (Array) 스트링 (String) 추상데이터형 클래스 (Class) 인터페이스 (Interface) 그림 2.1 자바의데이터형 사용자정의데이터형
기본데이터형 정수데이터형 byte, short, Int, long 가있다. byte short 그림 2.2 정수데이터형 = 8 bit (1byte) int long 정수형 크기 (byte) 범위 값 byte 1-2 7 ~2 7-1 -128 ~ 127 short 2-2 15 ~2 15-1 -32,768 ~ 32767 (3만정도 ) int 4-2 31 ~2 31-1 -2,147,483,648 ~ 2,147,483,647 (21 억 ) long 8-2 63 ~2 63-1 -9,223,372,036,854,775,808L~9,223,372,036,854,775,80 7L 정수형연산시결과는 int 형이다. 즉, 정수형의기본은 int 형이다.
기본데이터형 예제 2.1 정수데이터형의예제 1:public class Overflow{ 2: public static void main(string args[]) { 3: byte num1 = 127; 4: num1 = (byte)(num1 + 1); 5: System.out.println(num1); // -128 출력 6: byte num2 = -128; 4: num2 = (byte)(num2-1); 5: System.out.println(num2); //127 출력 6: } 7:} 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 126 127-128 -2-1 -1 0-2 1 2-127 126-128 127
기본데이터형 실수데이터형 소수점이하자릿수를가지고있는숫자를표현하기위해사용. float 와 double 있으며, 각각 32 비트와 64 비트의공간을차지한다. 7 비트 24 비트 31 30 24 23 s 지수부소수부 0 그림 2.9 float 형과 double 형의숫자기억방식 7 비트 56 비트 63 62 56 55 s 지수부소수부 0 실수형크기 (byte) 값 float 4-3.40282347E+38F ~ +3.40282347E+38F double 8-1.79769313486231570E+308 ~ +1.79769313486231570E+308 실수형연산시결과는 double 형이다. 즉, 실수형의기본은 double 형이다.
기본데이터형 예제 2.3 실수데이터형변수선언의예제 1:public class RealNumber{ 2:public static void main(string[] args) { 3:float floatvalue=23.47f; //32 비트정수형선언 4:double doublevalue=2456.78; //64 비트정수형선언 5:System.out.println("float 값은 :" +floatvalue); 6:System.out.println("double 값은 :" +doublevalue); 7: } 8:} 그림 2.8 예제 2.3 컴파일결과
기본데이터형 문자데이터형 char 형, char 는 ASCII 코드체계를따르는데, 크기는 1 바이트이며, 알파벳대소문자와숫자, 특수문자등의 255 자까지를나타낼수있다. 1:public class charex { 2: public static void main(string[] args) { 3: char ch='c'; 4: system.out.println("char 값은 :" +ch); 5: } 6:} 문자형크기 (byte) 값 char 2 '\u0000' ~ '\uffff' (ISO Unicode char acter set)
기본데이터형 부울린데이터형 true 혹은 false 의단지두가지값만을갖는데이터형이다. 1:public class booleanex{ 2: public static void main(string args[]) { 3: boolean bvar1=true; 4: boolean bvar2=false; 5: boolean bvar3=0; // 에러발생 6: } 7:} 논리형크기 (bit) 범위 boolean 1 true 또는 false
기본데이터형 기본데이터형사용 설명문을보며이해하자 1:class Variable 2: public static void main(string args[]) { 3: byte bt = 10; 4: int i, j, k; // 한문장에여러변수선언시컴마사용 5: i = j = k = 10; // 치환연산자는오른쪽에서왼쪽으로수행 6: float x=10, y=20.2f, z=30.3f; // 정수형상수 10이 float로자동형변환 7: double a=10, b=20.2, c=30.3; // 정수형상수 10이 double로자동형변환 8: boolean boo1 = true, boo2 = false; 9: char ch='c'; String str = 자바시작하기 ; // 문자와스트링상수표현 10: System.out.println(bt); 11: System.out.println(i + j + k); // 합계가출력 12: System.out.println(i + " " + j + " " + k); 13: System.out.println(x + " " + y + " " + z); 14: System.out.println(a + " " + b + " " + c); 15: System.out.println(boo1 + " " + boo2); 16: System.out.println(ch + " " + str); 17: } 18: } 10 30 10 10 10 10.0 20.2 30.3 true false c 자바시작하기
식별자와예약어 식별자 (identifier) 식별자는변수, 메소드, 클래스, 배열등의이름이다. 식별자이름을사용할때, 이름사용의의미를쉽게알수있도록이름을짓는것이좋다. 1 자바식별자에서영문자는대문자와소문자를다른문자로구분한다. 2 첫글자는반드시영문자나밑줄 (_), 달러표시 ($) 로시작되어야한다. 3 식별자에는 0부터 9까지의숫자도포함될수있다. 4 식별자의이름을짓는데또다른제한은자바예약어들을사용할수없다는것이다.
식별자와예약어 예약어 (reserved word) 자바프로그래밍언어자체적으로사용하고있는식별자로서, 프로그래머가임의적으로사용할수없다. 예를들어정수형변수를선언하는다음의문장은예약어즉 byte 를식별자로사용함으로써에러가발생한다. public class Test { public static void main(string[] args) { int byte; int test; } }
연산자와연산식 연산자 (operator) 는사칙연산자인산술연산자를포함하여증감, 치환, 비교, 논리, 비트연산자등이있다.
연산자와연산식 산술연산자 연산자 의미 예 + - * / % 덧셈뺄셈곱셈나눗셈나머지 3 + 4 5-7 5 * 5 14 / 7 20 % 7 연산자우선순위예1) result = 20 + 60 * 2 / 3; 예2) 60 ( 20 + ( ( 60 * 2 ) / 3 ) ) 예3) 53 ( ( ( 20 + 60 ) * 2 ) / 3 ) 증감연산자 프로그램을작성하다보면, 1 을증가하거나감소하는문장을사용하는경우가많다. 구분연산식의미사용예결과 (x 가 1 일때 ) 전위연산자 ++x --x x = x + 1 x = x - 1 y = ++x y = --x x=2, y=2 x=1, y=1 후위연산자 x++ x-- x = x + 1 x = x - 1 y = x++ y = x-- x=2, y=1 x=2, y=0
연산자와연산식 산술치환연산 연산자연산식예의미 x 가 10 일경우 += x += 2 x = x + 2 x = 12 -= x -= 2 x = x - 2 x = 8 *= x *= 2 x = x * 2 x = 20 /= x /= 2 x = x / 2 x = 5 %= x %= 2 x = x % 2 x = 0 산술치환연산자도산술연산자보다우선순위가낮기때문에연산식을먼저계산한후산술치환연산을수행한다. 다음은산술치환연산에연산식이혼합된예제이다. public class Test { public static void main(string[] args) { int x=10, y=20; x *= y + 1000; System.out.println("x 의값은 " + x + " 입니다."); } } 옆의경우 x 는 10200 이된다. 즉연산자우선순위에따라 y+1000 을먼저수행한결과인 1020 에 x 의값 10 을곱한결과를다시 x 에치환한다.
연산자와연산식 비교연산비교연산은같다, 크다, 작다등의두수를비교하는연산이다. 이러한비교연산은다음장의선택문 (if 문 ) 이나반복문 (while 문 ) 의조건비교에사용된다. 이러한비교연산의결과는참 (true) 또는거짓 (false) 의두가지뿐이다. 예를들어문장 System.out.println (5>3); 은 true 를출력한다. 연산자의미예 public class Test { public static void main(string[] args) { System.out.println (5>3); } } ==!= < > 같다다르다 ~ 보다작다 ~ 보다크다 x == 3 x!= 3 x < 3 x > 3 <= 작거나같다 x <= 3 >= 크거나같다 x >= 3 < 비교연산자 >
연산자와연산식 논리연산 논리연산자는 AND, OR, NOT의세가지가있다. 논리연산자는여러개의조건을조합하여참인지거짓인지를따질때사용한다. 예를들어 비가오지않고휴일이면테니스를친다 라는문장에는 비가오지않는다 라는조건과 휴일이다 라는조건이동시에만족이되면테니스를친다는의미가포함되어있다. < 논리연산자표 > 의미 연산자 예 AND && a && b a와 b가모두 true일때만 true OR a b a와 b 중하나만 true이면 true NOT!! a a가 true이면 false, a가 false이면 true
연산자와연산식 비트연산비트단위연산은피연산자의비트표현에적용되는연산자이다. AND 연산은 1 과 1 인경우에만결과가 1 이며, 나머지의경우는모두 0 이된다. OR 연산은양쪽중하나만 1 이면결과가 1 이된다. XOR(eXclusive OR) 는양쪽이다르면 1, 같으면 0 이된다. 연산자의미예 & ^ << >> >>> ~ &= = ^= <<= >>= >>>= 비트단위의 AND (bitwise AND) 비트단위의 OR 비트단위의 XOR 왼쪽으로쉬프트 (left shift) 오른쪽으로쉬프트 0으로채우는오른쪽쉬프트 1의보수 (1은 0으로, 0은 1로 ) AND 연산후치환 OR 연산후치환 XOR 연산후치환왼쪽쉬프트후치환오른쪽쉬프트후치환 0으로채우는쉬프트후치환 a & b a b a ^ b a << move a >> move a >>> move ~a a &= b a = b a ^= b a <<= move a >>= move a >>>= move
간단한입출력 표준출력 표준출력은 System.out 의밑에여러개의함수들이있음 ( 구체적인설명을뒤에서함 ) println( 내용 ), print( 내용 ) 내용이여러개인경우, + 연산자를사용 내용이숫자만있을경우더하기가되지만, 스트링이있으면연결이됨 printf( 형식, 내용 ), format( 형식, 내용 ) 형식은 C 언어와유사함 %c, %d, %s, %f
간단한입출력 표준입력 표준입력은 System.in 의밑에여러개의함수들이있음 한글자만입력받음 read() : System.in. read() 여러글자입력 여러글자를입력받기위해서는버퍼 (buffer) 를선언해이용해야함 BufferedReader 를이용하는방법이있음 선언이복잡 Scanner 를이용하는방법 C 언어의 scanf() 와유사 이책에서는보다간단한 Scanner 를이용한다.
간단한입출력 표준입력 Scanner 이용 1: import java.util.*; 2: public class ReadInteger { 3: public static void main(string args[]){ 4: Scanner buf = new Scanner(System.in); 5: System.out.println(" 두정수를입력 "); 6: int x = buf.nextint(); 7: int y = buf.nextint(); 8: System.out.println(" 두수의합은 "+(x+y)); 9: } 10:} String x = buf.next(); // 스트링 short x = buf.nextshort(); // 정수형 int x = buf.nexting(); long x = buf.nextlong(); double x = buf.nextdouble(); // 실수형 float x = buf.nextfloat();
간단한입출력 생각해보기 1. 두정수를입력받아, 사칙연산결과를출력하는프로그램을작성해보자. 2. 1 번을완성했다면, 사칙연산중나눗셈의경우, 소수점이하도출력되도록수정해보자. (hint) 형변환 (type casting) 을활용
import java.util.*; public class Opertation_test { public static void main (String [] args) { int no1,no2; Scanner s = new Scanner(System.in); System.out.print(" 두정수를입력하세요 : "); no1 = s.nextint(); no2 = s.nextint(); System.out.println( " 두수의덧셈 " + (no1+no2) ); System.out.println( " 두수의뺄셈 " + (no1-no2) ); System.out.println( " 두수의곱셈 " + (no1*no2) ); System.out.println( " 두수의나눗셈 " + ((float)no1/no2) ); } }