본문 바로가기

java

자바의 정석 ch2

 

1. 변수(variable)란?

변하는 수?

하나의 값을 저장할 수 있는 메모리 공간

 

2. 변수의 선언

① 변수의 선언 이유

- 값(data)을 저장할 공간을 마련하기 위해서

 

 ② 변수의 선언 방법

변수타입               변수이름;

int                          age

 

3. 변수에 값 저장하기

① 변수에 값 저장하기(' = ' 는 등호가 아니라 대입)

int age ;           // 정수 (int)타입의 변수 age를 선언

age = 25 ;       // 변수 age에 25를 저장

int age = 25;   // 위의 두 줄을 한 줄로

 

② 변수의 초기화 - 변수에 처음으로 값을 저장하는 것

(주의 : 지역 변수는 읽기 전에 꼭! 초기화 해야함.)

int x = 0;     // 변수 x를 선언 후, 0으로 초기화

int y = 5;     // 변수 y를 선언 후, 5로 초기화

int x = 0, y  = 5;   // 위의 두 줄을 한 줄로

4. 변수의 값 읽어오기

① 변수의 값이 필요한 곳에 변수의 이름을 적는다.

int year = 0, age = 14;

year = age + 2000;

→ year = 14 + 2000;

→ year = 2014;

 

age = age + 1;     // 변수의 값을 1증가시키는 방법

→ age = 14 + 1;

→ age = 15;

System.out.println(age);

→ System.out.println(15);    // 15가 화면에 출력됨.

 

5. 변수의 타입

① 변수의 타입은 저장할 값의 타입에 의해 결정된다.

int age = 25;  (o)

int age = 3.14;    (x)

 

② 저장할 값의 타입과 일치하는 타입으로 변수를 선언

char ch = '가';       // char는 문자 타입

double pi = 3.14;  // double은 실수 타입

 

6. 값의 타입

문자 - char

숫자 - 정수 - byte, short, int, long

        - 실수 - float, double

논리 - boolean (true or false)

                        

7. 변수, 상수, 리터럴

변수(variable) - 하나의 값을 저장하기 위한 공간

상수(constant) - 한 번만 값을 저장 가능한 변수

리터럴(literal) - 그 자체로 값을 의미하는 것

int score = 100; 

     score = 200;  (변경 o)

final int MAX = 100;     // MAX는 상수

             Max = 200;     // 에러

char ch = 'A';

String str = "abc";

 

8. 리터럴의 접두사와 접미사

 

boolena power = true;

char ch = 'A';

String str = "ABC";

byte b = 127;

byte b = 128;            // 에러

int i = 100;                // 10진수

int oct = 0100;          // 8진수

int hex = 0x100;       // 16진수

long l  = 10_000_000_000L;

long l = 100;             // OK

float f = 3.14f;           // f 생략 x

double d = 3.14d;     // d 생략 o

10. → 10.0

.10 → 0.10

10f → 10.0f

1e3 → 1000.0d

 

9. 변수와 리터럴의 타입 불일치

① 범위가 ' 변수 > 리터럴' 인 경우, OK

int i = 'A' ;                 // int > char

long l = 123 ;            // long > int

double d = 3.14f       // double > float

 

② 범위가 '변수 < 리터럴' 인 경우, 에러

int i = 30_0000_0000 ;            // int의 범위(±20억) 벗어남

long l = 3.14f ;                         // long < float

float f = 3.14d;                         // float < double

 

③ byte, short 변수에 int 리터럴 저장가능

단 , 변수의 타입의 범위 이내이어야 함.

byte b = 100;             // OK, byte의 범위(-128 ~ 127)에 속함

byte b = 128;             // 에러, byte의 범위를 벗어남.

 

10. 문자와 문자열

char ch = 'A';

char ch = 'AB';    // 에러

String s = "A";

String s = "";       // 빈 문자열

char ch = '';        // 에러

String s = "ABC";

String s1 = "AB";

String s2 = new String("AB");

 

11. 두 변수의 값 교환하기

int x = 10, y = 20;

x = y;           // y의 값을 x에 저장 ( x )

y = x;           // x의 값을 y에 저장 ( x )

 

int x = 10, y = 20;

int tmp;

 

tmp = x;        // x의 값을 tmp에 저장

x = y;            // x의 값을 y에 저장

y = tmp;        // tmp의 값을 y에 저장

 

12. 기본형과 참조형

기본형(Primitive type)

- 오직 8개(boolean, char, byte, short, int, long, float, double)

- 실제 값을 저장

 

참조형(Reference type)

- 기본형을 제외한 나머지(String, System 등)

- 메모리 주소를 저장(4 byte 또는 8 byte)

 

Date today;     // 참조형 변수 today를 선언

today = new Date();     // today에 객체의 주소를 저장

 

13. 기본형(Primitive type) - 종류와 크기

> 논리형 - true와 false 중 하나를 값으로 가지며, 조건식과 논리적 계산에 사용된다.

> 문자형 - 문자를 저장하는데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.

>  정수형 - 정수 값을 저장하는데 사용된다. 주로 사용하는 것은 int와 long이며, byte는 이전 데이터를 다루는데 사용되며, short은 c언어와의 호환을 위해 추가되었다. (잘 안쓰임)

> 실수형 - 실수 값을 저장하는데 사용된다. float와 double이 있다.

 

 

14. 형식화된 출력 - printf()

> println()의 단점 - 출력형식 지정불가

① 실수의 자리수 조절불가 - 소수점 n자리만 출력하려면?

System.out.println(10.0/3);                              // 3.3333333333...

 

② 10진수로만 출력된다. - 8진수, 16진수로 출력하려면?

System.out.println(0x1A);                                // 26

 

> printf()로 출력형식 지정가능

System.out.printf("$.2f", 10.0/3);                     // 3.33

System.out.printf("$.2d", 0x1A);                     // 26

System.out.printf("$.2x", 0x1A);                     // 1A

 

System.out.printf("age:%d year:%d\n", 14, 2017);

"age:14 year:2017\n"이 화면에 출력된다.

System.out.printf("age:%d",age);                     // 출력 후 줄바꿈을 하지 않는다.

System.out.printf("age:%d%n", age);              // 출력 후 줄바꿈을 한다.

 

15. printf()의 지시자

① 정수를 10진수, 8진수, 16진수로 출력

System.out.printf("%d", 15);                           // 15 10진수

System.out.printf("%o", 15);                           // 17 8진수

System.out.printf("%x", 15);                           // f 16진수

System.out.printf("%s", Integer.toBinaryString(15));           // 1111 2진수

 

② 8진수와 16진수에 접두사 붙이기

System.out.printf("%#o", 15);                    // o17

System.out.printf("%#x", 15);                    // oxf

System.out.printf("%#x", 15);                    // oXF

 

③ 실수 출력을 위한 지시자 %f - 지수형식(%e, 간략한 형식 %g)

float f = 123.4567890f;

System.out.printf(%f", f);                    // 123.456787  소수점아래 6자리

System.out.printf(%e", f);                   // 1.234568e+02  지수형식

 

System.out.printf(%g", 123.456789);          // 123.457   간략한 형식

System.out.printf("%g", 0.00000001);         // 1.00000e-8  간략한 형식

 

16. printf()의 지시자

System.out.printf("[%5d]%n", 10);             // [   10]

System.out.printf("[%-5d]%n", 10);             // [10   ]

System.out.printf("[%5d]%n", 10);             // [   10]

 

System.out.printf("[%s]%n", url);                 // [www.codechobo.com]

System.out.printf("[%20s]%n", url);             // [   www.codechobo.com]

System.out.printf("[%-20s]%n", url);            // [www.codechobo.com   ]

System.out.printf("[%.8s]%n", url);              // [www.code]

 

 

17. 화면에서 입력받기

> Scanner란?

- 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스

> Scanner를 사용하려면...

① import문 추가

import java.uitl.*;

② Scanner 객체의 생성

Scanner scanner = new Scanner(System.in);

③ Scanner 객체를 사용

int num = scanner.nextInt();     // 화면에서 입력받은 정수를 num에 저장

String input = scanner.nextLine();    // 화면에서 입력받은 내용을 input에 저장

int num = Integer.parseInt(input);     // 문자열(input)을 숫자(num)로 변환

 

18. 정수형의 오버플로우

10진수

0 ~ 9

00 ~ 99

000 ~ 999

0000 ~ 9999

2진수

0 ~ 1

00 ~ 11

000 ~ 111

0000 ~ 1111

 

19. 타입간의 변환방법

1. 문자와 숫자간의 변환

 

2. 문자열로의 변환

 

3. 문자열을 숫자로 변환

 

 

'java' 카테고리의 다른 글

자바강의 3일차  (1) 2023.12.27
자바강의 2일차  (1) 2023.12.27
자바강의 1일차  (0) 2023.12.24
자바의 정석 ch4  (1) 2023.12.24
자바의 정석 ch3  (0) 2023.12.22