자바의 정석-2 변수

자바의 정석-2 변수

변수(Variable)란?

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

변수의 선언

1) 변수의 선언 이유

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

2) 변수의 선언 방법

- 변수 타입 변수 이름 ; int age; 정수(int) 타입의 변수 age를 선언

변수에 값 저장하기

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

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

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

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

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

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

- 변수의 종류: 클래스 변수, 인스턴스 변수, 지역 변수(읽기 전에 반드시 초기화해줘야 함)

변수의 값 읽어 오기

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

int year = 0, age = 14;

year = age + 2000; -> year = 14 + 2000 -> year = 2014;

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

package ch01; public class VarEx1 { public static void main(String[] args) { int x= 4, y=2; System.out.println(x+y); System.out.println(x-y); System.out.println(x*y); System.out.println(x/y); } }

변수의 타입

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

2) 저장할 값의 타입과 일치하는 타입으로 변수를 선언한다.

char ch = ‘가’; // char는 문자 타입

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

값의 타입

기본형과 참조형

1) 기본형(Primitive type)

문자: char

숫자: 정수(byte, short, int, long) / 실수(float, double)

논리: Boolean(true, false)

- 실제 값을 저장

2) 참조형(Reference type)

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

- 무한대

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

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

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

기본형(Primitive type)

1) 논리형 (Boolean) : true와 false 중 하나의 값으로 갖으며, 조건식과 논리적 계산에 사용된다.

2) 문자형 (char) : 문자를 저장하는 데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.

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

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

종류와 크기 1(byte) 2(byte) 4(byte) 8(byte) 논리형 Boolean 문자형 char 정수형 byte short int(default) long 실수형 float double(default)

-> 1 bit = 2진수(0과 1, 2개) / 2 bit = 4개(00, 01, 10, 11)

-> 1 byte = 8bit = 2의8 제곱

-> 2 byte = 16bit = 2의 16 제곱

기본형의 표현 범위

byte의 표현 범위

-> 1 bit 2개(0과 1) -> 2 bit 4개 (00, 01, 10, 11)

예)byte인 경우(1byte = 8bit)

n비트로 표현할 수 있는 값의 개수: 2의 n제곱 개 -> 1 byte는 8bit -> 2의 8 제곱 => 256개

n비트로 표현할 수 있는 부호 없는 정수의 범위: 0 ~ 2의 n제곱-1=> 0 ~ 255

n비트로 표현할 수 있는 부호 있는 정수의 범위: -2의 n-1제곱 ~ 2의 n-1제곱 -1

type의 크기만 알고 있으면 각 정수의 범위를 쉽게 계산할 수 있음

ex) 1 byte = 8 bit이어서 n = 8

-> 부호 없는 byte의 범위 -> 0 ~ 255 / 부호 있는 byte의 범위 -> -128 ~ 127

byte의 표현범위

S는 부호 비트라고 하고 1bit이다. 0은 양수 1은 음수를 나타낸다.

short의 표현범위

chr의 표현 범위

-> 같은 2byte(16bit)라도 short는 부호가 있어서 표현 범위가 다름!

int의 표현 범위 long의 표현 범위

자료형 저장 가능한 값의 범위 정밀도 ( 오차없는 자리수 ) 크기 bit byte float 1.4E-45 ~ 3.4E38 7 자리 32 4 double 4.9E-324 ~ 1.8E308 15 자리 64 8

float의 표현 범위

-> 같은 크기의 정수형인 int와 달리 float 타입은 값을 부호, 지수, 가수로 나눠서 저장되기 때문에 범위는 더 넓어지지만, 대신 실수형은 원래 저장하려던 값과 저장된 값의 오차가 생길 수 있음

double의 표현 범위

변수, 상수, 리터럴

변수: 하나의 값을 저장하기 위한 공간

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

리터럴(literal): 그 자체로 값을 의미하는 것(=기존의 상수)

int score = 100;

score = 200;

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

MAX = 200; // 에러

char ch = ‘A’;

String str = “abc”;

리터럴의 접두사와 접미사

종류 리터럴 접미사 ( 대소문자 구별 xx) 논리형 false, true 없음 정수형 123, 0b0101, 077, 0xFF, 100L L(long 타입 ) 실수형 3.14, 3.0e8, 1.4f. 0x1.0p-1 f(float), d(double 생략가능 ) 문자형 ‘A’, ‘1’, ‘

’( 개행문자 ) 없음 문자열 “ABC”, “123”, “A”, “true” 없음

Boolean power = true;

char ch = ‘A’,

String str = “ABC”;

int i = 100; // 10진수

int oct = 0100; //8진수

int hex = 0x100; //16진수

int binary = 0b0101 //2진수

-> 접두사도 대소문자 구별 xx

long l = 10_000_000_000L; // 100억 -> 20억이 넘는 값은 long타입에 넣어 줌

long l = 100; // OK

float f = 3.14f; //생략 불가

double d = 3.14d; //d 생략 가능

10. -> 10.0 / .10 -> 0.10 è 둘 다 double 형(d가 생략되어 있음)

10f -> 10.0f è float형

le3 // 기호 e는 10의 n제곱을 의미 -> 기호 e는 실수형에 사용됨 -> 10의 3 제곱에 실수형인데 접미사 생략 -> double형 1000.0

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

1) 범위가 ‘변수 > 리터럴’인 경우 OK

int i = ‘A’; ->A의 문자코드인 65가 저장됨 // int > char

long l = 123; // long > int

double d = 3.14f; // double > float

2) 범위가 ‘변수 < 리터럴’인 경우 ERROR

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

long l = 3.14f // long < float

float f = 3.14; // float < double

3) byte, short 변수에 int리터럴 저장 가능(단 변수의 타입의 범위 이내이어야 함

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

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

문자와 문자열

char ch = ‘A’; char ch = ‘AB’; //에러 String s = “ABC”;

String은 class!

String s1 = “AB”; String s2 = new String(“AB”); //두 식이 같음

String s = “A”; // OK , String s =””; //빈 문자열도 ok(empty string)

char ch= “”; //에러

String s1 = “A” + “B”; //AB

숫자를 문자열로 변환하는 방법 “” + 7 -> “” + “7” -> “7”

문자열 결합은 왼쪽에서 오른쪽으로

문자열 + any type -> 문자열 / any type + 문자열 -> 문자열

두 변수의 값 교환하기

int x = 10, y = 20;

int = tmp; //빈 변수인 tmp 선언

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

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

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

from http://everysmallstep.tistory.com/60 by ccl(A) rewrite - 2021-12-29 08:02:27