Java의 정석 #2 - 변수(1/2)

김형우·2022년 7월 11일
0

Java의 정석

목록 보기
2/7

ch2-3. 변수의 선언과 저장

1. 변수(Variable)란?

  • 하나의 값을 저장할 수 있는 메모리 공간
  • 클래스변수, 인스턴스변수, 지역변수 가 있음
  • 지역변수는 읽기전에 꼭! 초기화 해야함 (ch6에서 계속)

2. 변수의 선언

1. 변수의 선언이유

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

2. 변수의 선언 방법

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

3. 변수에 값 저장하기

  1. 변수에 값 저장하기 ('='은 등호가 아니라 대입)
  • ex)
int age;		// 정수(int)타입 변수 age 선언
age = 36;		// 변수 age에 36 저장
int age = 36;	// 위의 두 줄을 한 줄로
  1. 변수의 초기화 - 변수에 처음으로 값을 저장하는 것
  • 지역변수는 읽기전에 꼭! 초기화 해야함 (ch6에서 계속)
int x = 0;			// 변수 x를 선언 후, 0으로 초기화
int y = 5;			// 변수 y를 선언 후, 5로 초기화
int x = 0, y = 5;	// 위의 두 줄을 한 줄로

4. 변수의 값 읽어오기

  1. 변수의 값이 필요한 곳에 변수의 이름을 적는다.
  • ex)
int year = 0, age = 14;
	year = age + 2000;
->	year = 14 + 2000;
-> 	year = 2014;
	age = age + 1;
->	age = 14 + 1;
->	age = 15;
	System.out.println(age);
->	System.out.println(15);    

ch2-4. 변수의 타입

1. 변수의 타입

  • 변수 : 하나의 값을 저장하기 위한 메모리 공간
  • 하나의 변수에 모든 종류의 값을 저장할 수 있는것은 아님
  1. 변수의 타입은 저장할 값의 타입에 의해 결정 된다.
  • ex) 정수 25, 만약 정수라고 타입 선언 후 3.14 라는 실수를 넣으면 에러가 발생
int age = 25;
  1. 저장할 값의 타입과 일치하는 타입으로 변수를 선언
char ch = '가';		// char는 문자 타입
double pi = 3.14	// double은 실수 타입

2. 값의 타입

  • 문자 : char
  • 숫자
    • 정수 : byte, short, int, long
      • byte : -128 ~ 127
    • 실수 : float, double
  • 논리 : boolean

ch2-5. 변수, 상수, 리터럴

1. 변수(variable)

  • 하나의 값을 저장하기 위한 공간
  • 변경 O

2. 상수(constant)

  • 한번만 값을 저장 가능한 변수
  • final을 사용한다
  • 변경 X
  • ex)
int score = 100;	// score = 100
	score = 200;	// score = 200
    
final int MAX = 100;	// MAX는 상수
		  MAX = 200; 	// 에러

3. 리터럴(literal)

  • 그 자체로 값을 의미하는 것
  • 상수와 같은 개념

ch2-6. 리터럴의 타입과 접미사

1. 리터럴 타입과 접미사

종류 리터럴 접미사
논리형 false, true 없음
정수형 123,0b0101, 077, 0xFF, 100L L
실수형 3.14, 3.0e8, 1.4f, 0x1.0p-1 f, d
문자형 'A', '1', '\n' 없음
문자열 "ABC", "123", "A", "true" 없음
- ex) ``` boolean power = true; char ch = 'A'; String str = "ABC"; byte b = 127; // int 타입 : -128~127 byte b - 128 // 에러 int i = 100; // 10진수 int oct = 0100; // 8진수 int hex = 0x100; // 16진수 long l = 10_000_000_000L; // int = 20억까지, 100억은 long long l = 100; float f = 3.14f; // f 생략불가 double d = 3.14d; // d 생략가능 ```

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

  1. 범위가 '변수' > '리터럴' 인 경우, OK
  • ex)
int i = 'A'; 		// int > char
long l = 123;		// long > int
double d = 3.14f;	// double > float
  1. 범위가 '변수' > '리터럴' 인 경우, 에러
  • ex)
int i = 3_000_000_000;	// int의 범위(약 20억) 벗어남
long l = 3.14f;			// long(8byte) < float(4byte) : 실수형이 정수형보다 저장범위가 넓음
float f = 3.14;			// float < double
  1. byte, short 변수에 int 리터럴 저장 가능
  • ex)
byte b = 100;	// OK. byte의 범위(-128~127)에 속함
byte b = 128;	// 에러. byte의 범위를 벗어남

ch2-7. 문자와 문자열

1. 문자와 문자열

  • 문자(char)에는 빈 문자 X
    • ex) char ch = ''; // 에러
  • 문자열(String)에는 빈 문자열 O
    • ex) String s = ""; // 빈 문자열
  • ex)
char ch = 'A';	// char : 문자 한개
char ch = 'AB';	// 에러

String s = "ABC";	// 문자열
String -> 자바에서 제공하는 클래스

String s1 = "AB";
String s2 = new String("AB");	// 위와 거의 같음 (차이는 9장에서 계속)

String s = "A";
String s = "";	// 빈 문자열
char ch = '';	// 에러 (char는 빈 문자열 X)

String s1 = "A" + "B";	// = "AB"

"" + 7 => "7"
"" + 7 + 7 => "7" + "7" => "77"
7 + 7 + "" => 14 + "" => "14"
  • String 정의하는 방법의 차이는 9장에서 계속

ch2-8. 문자열 결합

  • 문자열 + any type -> 문자열 + 문자열 -> 문자열
    • ex) "" + 7 + 7 => "7" + "7" => "77"
  • any type + 문자열 -> 문자열 + 문자열 -> 문자열
    • ex) 7 + 7 + "" => 14 + "" => "14"

ch2-9. 두 변수의 값 바꾸기

  • 두 컵에 담긴 물을 바꾸려면 새로운 빈 컵이 필요하다

  • ex)

    int x = 10, y = 20;
    x = y;		// y의 값을 x에 저장
    y = x; 	// x의 값을 y에 저장 // 틀린 방법
    
    // 두 변수의 값 바꾸기
    int tmp = x;
    x = y;
    y= tmp;

ch2-10. 기본형과 참조형

1. 값의 타입 (8가지)

    • 문자
      • char
    • 숫자
      • 정수
        • byte
        • short
        • int
        • long
      • 실수
        • float
        • double
    • 논리
      • boolean
        • true
        • false

2. 기본형과 참조형

1. 기본형(Primitive type)

  • 오직 8개(boolean, char, byte, short, int, long, float, double)
  • 실제 값을 저장

2. 참조형(Reference type)

  • 기본형을 제외한 나머지(String, System 등) - 무수히 많음
  • 메모리 주소를 저장(4byte 또는 8byte)
  • ex)
 Date today; // 참조형 변수 today를 선언
 today = new Date(); // today에 객체의 주소를 저장 (new Date(); 로 객체 생성)

ch2-11. 기본형의 종류와 범위

▶ 논리형

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

▶ 문자형

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

▶ 정수형

  • 정수 값을 저장하는데 사용된다. 주로 사용하는 것은 int와 long이며,
    byte는 이진 데이터를 다루는데 사용되며,
    short은 c언어와의 호환을 위해 추가되었다.

▶ 실수형

  • 실수 값을 저장하는데 사용된다. float와 double이 있다.
종류 \ 크기 1 byte 2 byte 4 byte 8 byte
논리형 boolean
문자형 char
정수형 byte short int long
실수형 float double

기본형 표현범위

1. 2진수 표현

  • 1 bit
    0 1
  • 2 bit
    0 0
    0 1
    1 0
    1 1
  • n비트로 표현할 수 있는 값의 개수 = 2n개
  • n비트로 표현할 수 있는 부호없는 정수의 범위 : 0~2n-1
  • n비트로 표현할 수 있는 부호있는 정수의 범위 : -2n-1~2n-1-1
    • ex)
      8 bit => -27~27-1
      27=128
      1 byte => -128~127

2. byte 단위의 저장형태

  • ex)
byte b;
	 b = 3;
  • = b = 00000011 이라는 1 byte 짜리 변수

1. byte(1byte = 8bit) = -27~27-1

  • n비트로 표현할 수 있는 부호있는 정수
    S 7 bit
    - S = 0 // 양수 - S = 1 // 음수

2. short(2byte = 16bit) = -215~215-1

  • n비트로 표현할 수 있는 부호있는 정수
    S 15 bit

3. char(2byte = 16bit) 0 ~ 216-1

  • n비트로 표현할 수 있는 부호없는 정수
    16 bit
    = char ch = 'A' = 65 =
    0000000001000001

4. int(4byte = 32bit) = -231~231-1

  • n비트로 표현할 수 있는 부호있는 정수
    S 31 bit (약 -20억~20억)

5. long(8byte = 64bit) = -263~263-1

  • n비트로 표현할 수 있는 부호있는 정수
    S 31 bit (약 -800경~800경)

6. float(4byte = 64bit) / double(8byte = 64bit)

  • 실수 표현 범위
  • E38 = 1038
    자료형 저장 가능한 값의 범위(양수) 정밀도 크기(bit) 크기(byte)
    float 1.4E-45 ~ 3.4E38 7 자리 32 4
    double 4.9E-324 ~ 1.8E308 15 자리 64 8
  • float 1+8+23 = 32bit = 4byte
    S(부호) E(8)(지수) M(23)(가수)
  • 정밀도 = 가수의 자릿수
    가수 M(23) -> 23 + 1(정규화) = 24자리
    107 < 224 < 108
  • double 1+11+52 = 64bit = 8byte
    S(부호) E(11)(지수) M(52)(가수)
profile
The best

0개의 댓글