개발자꿈나무

자바 - 변수, 리터럴 본문

자바

자바 - 변수, 리터럴

망재이 2022. 12. 26. 13:07

Ch.2 변수

>>>변수

 

  1. 변수란 ? - “하나”의 값을 저장할 수 있는 메모리 공간 (RAM)

                    - 사람이 하나하나 기억하기 힘들기 때문에 기억하기 쉬운 이름 ‘age’를 붙여줌

 

2.   변수의 선언

1) 변수의 선언 이유 - 값(data)를 저장할 공간을 마련하기 위해서

2) 변수의 선언 방법 - 

변수타입 변수이름;

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

 

3.   변수에 값 저장하기 ( ‘=‘는 등호가 아니라 대입 연산자 )

1) 변수에 값 저장하기

int age; // 정수(integer)타입의 변수 age를 선언
age=25; // 변수 age에 25를 저장
int age=25; // 위에 두줄을 간단하게 한줄로 표현

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

cf. 변수에는 클래스 변수, 인스턴스 변수, 지역 변수가 있는데 지역 변수는 꼭! 초기화해야함

int x=0; // 변수 x를 선언 후 0으로 초기화
int y=0; // 변수 y를 선언 후 0으로 초기화
int x=0, y=0; // 위에 두 줄을 간단하게 한 줄로 표현

 

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);

 

// >>> 변수타입을 이용해서 +, -, *, / 시도해보기
public class VarEx1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int x=3, y=1;
		System.out.println(x+y);
		System.out.println(x-y);
		System.out.println(x*y);
		System.out.println(x/y);
	}

}

 

5.   변수의 타입 (저장할 값의 유형에 따라 변수의  타입이 달라져야함)

ex) int age=3.14 -> 타입은 정수인데, 값이 실수라서 제대로 나타나지 않음.

                               저장할 값의 타입과 일치하는 타입으로 변수를 선언해야함.

값의 타입⎾ 문자 - char(2byte) (cf. 1byte = 8bit)

(8가지)  ├ 숫자 ⎾ 정수 - byte(1byte), short(2byte), int(4byte), long(8byte)

                    ⎿ 실수 - float(4byte), double(8byte)

            ⎿ 논리 - boolen(1byte) (False, True)     

n비트로 표현할 수 있는 값의 개수 : 2의 n제곱

n비트로 표현할 수 있는 부호 없는(0,양수) 정수의 범위 : 0~2의 n제곱 -1 

ex) 1byte = 8bit, 0~255

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

ex) 1byte=8bit, -128~127

6.   기본형과 참조형

1) 기본형(Primitive type)

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

- 실제 값을 저장

2) 참조형(Reference type)

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

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

- 참조형 변수에 객체의 주소를 저장하기 위함

 

7.   변수, 상수, 리터럴

  • 변수(variable) : 하나의 값을 저장할 수 있는 공간
  • 상수(constant) : 한 번만 값을 저장 가능한 변수
  • 리터럴(literal) : 그 자체로 값을 의미하는 것(흔히 아는 상수)

 

int score = 100;

    score = 200;

             -> score 값이 200으로 변함

final(붙여야 상수가 됨) int MAX = 100;  // MAX는 상수

            MAX = 200;  // 에러

char ch = A;

String str = abc;

// >>> 변수, 상수
public class VarEx2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int x=1000;
		x=2000;
		System.out.println(x); -> x의 값 2000으로 나옴
	}

}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    final int // x=1000;
    x=2000;
    System.out.println(x); <- 에러뜸, 상수의 값을 두개로 줬기 때문! 둘중 하나를 주석처리해줘야함
}

    char txt='A'; // char는 한글자만 인식함 ''
    txt='B';
    System.out.println(txt);

    String str="Hello"; // String은 나열이라고 생각하면 됨, 한글영문 다 가능 "" 
		str="NTY";
		System.out.println(str);

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

  • 접두사랑 접미사는 대소문자 구별 안함!
  • 실수형의 경우 f랑 d밖에 없기 때문에 d는 생략이 가능함
  • 정수형의 byte, short는 접미사가 붙지 않음.
  • byte는 -128부터 127까지 가능하고, 그 이상을 byte로 쓸 시 에러 나타남.
  • int가 20억정도까지 표현 가능한데 그 이상을 나타낼 때는 long을 쓰며 접미사 붙여줌.

 

boolean power = true; or false;                           long l = 10_000_000_000L; //_은 값이 클 때 붙여줌.L필수

char ch = ‘A’;                                                         long l = 100;  // int값으로 접미사 생략가능, OK

String str = “abc”;                                                float f = 3.14f; // 접미사 필수

byte b = 127;                                                        double d = 3.14; // 생략 가능

bute b = 128;  // 에러                                            10.      ->      10.0 double

int i = 100;  // 10진수                                             .10      ->      0.10 double

int oct = 0100;  // 8진수                                        10f      ->      10.0 float

int hex = 0x100;  // 16진수                                    1e3      ->      1000.0 double (e=10의 제곱이면서 실수형/ 10의 3제곱x1) 

int score = 0b0101; // 2진수

 

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

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

int i = ‘a’;  // int > char

long l = 123;  // long > int

double d = 3.14f;  // double > float

2) 범위가 ‘변수 < 리터럴’인 경우, 에러!

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

long l = 3.14f;  // long < float

float f = 3.14;  // float < double

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

(단, 변수의 타입의 범위 내여야 함)

byte b = 127;  // OK. byte의 범위 내 (-128~127)

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

 

** 문자형 char < 정수형 int < long < 실수형 float < double **

 

10.   문자와 문자열

char ch = ‘A’; 

char ch = ‘AB’;  // 에러

String s = “ABC”;

String s = “A”;

String s = “”;  // 빈문자열

char ch = ‘’;  // 에러

 

String s1 = “AB”;

String s2 = new String(“AB”);  // 둘은 거의 유사한 의미이지만 거의 위에 문장대로 씀

 

String s1 = “A” + “B”;  ->  “AB”

“” + 7 + 7  ->  “77”

7 + 7 + “”  ->  “14

 

11.   두 변수의 값 교환하기(tmp이용)

// >>> 두 변수의 값 교환하기
public static void main(String[] args) {
    // TODO Auto-generated method stub
    int x=10, y=20;

    x=y; // y의 값을 x에 저장 x=20
    y=x; // x의 값을 y에 저장 y=20
    
    
    System.out.println(x);
    System.out.println(y);
    
} -> 20, 20 출력

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int x=10, y=20;
    int tmp; // 빈 컵  
    
    tmp=x; // x의 값을 tmp에 저장 tmp=10
    x=y; // y의 값을 x에 저장 x=20
    y=tmp; // tmp의 값을 y에 저장 y=10
    
    
    System.out.println(x);
    System.out.println(y);
    
} -> 10, 20 출력
728x90