ye._.veloper

[Java] 변수(Variable) 본문

Java

[Java] 변수(Variable)

ye._.veloper 2023. 1. 12. 00:01

 

 


☁ 변수란 ?

   · 메모리 공간(RAM)에 한 개의 값을 기록하기 위한 장소(공간)

 

☁ 변수의 자료형

* 기본형(Primitive Type)

  · 변수(Variable)실제 데이터 (값)을 저장

  · 논리형, 문자형, 정수형, 실수형으로 나눠지고 8개의 자료형이 있음

  · 각 자료형 별 데이터 저장크기가 다름

 

* 참조형(Reference Type)

  · 데이터가 저장되어 있는 주소를 저장 (객체의 주소)

  · 기본형을 제외한 나머지(String 등) 사용자 정의 자료형

  · 4byte의 공간을 저장공간으로 할당

 

 변수의 선언

  · 메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것

	 자료형 변수명 = 값;
	   자료형 : 생성할 변수에 어떤 종류의 값이 들어갈지 타입을 지정
	   변수명 : 변수의 이름
	   값 : 변수에 들어갈 데이터

       * 정수형
            bnum = 1;
	    snum = 2;
	    inum = 4;
	    lnum = 8L;

       * 실수형	
	    fnum = 4.0f;
	    dnum = 8.0;

       * 논리형			
	    isTrue = true; // true or false
			
       * 문자 & 문자열
	    ch = 'A';	//싱글 쿼테이션 사용
	    str = "A";	//더블 쿼테이션 사용 (한 글자여도 String 사용O)
 

☁ 변수의 명명 규칙

1. 대소문자가 구분되며 길이 제한이 없다.

2. 예약어를 사용하면 안된다.

3. 숫자로 시작하면 안된다.                                           

    ex) age1은 가능하지만 1age는 불가능

4. 특수문자는 '_'(under bar)와 '$'만 허용                       

    ex) sh@rp는 불가능하지만 $harp는 가능

5. 여러 단어 이름은 단어의 첫 글자를 대문자로 한다.   

    ex) ageOfVampire, userName (= 낙타등표기법, 카멜(Camel)표기법)

 
< 주요 예약어 >

☁ 변수의 초기화

  · 변수를 사용하기 전에 처음으로 값을 저장하는 것

      ➡ 지역변수는 반드시 초기화 해야 한다

▷ 선언 후 초기화
   int age;
   age = 100;

▷ 선언과 동시에 초기화
   int age = 100;
 

☁ 값 대입과 리터럴(Literal)

▷ 값 대입 : 생성한 변수(저장 공간)에 값을 대입하는 것
   int age;
   age = 10;
   age = 20;

-> 변수는 한 개의 데이터만 보관, 마지막에 대입한 값만 보관 (제일 마지막에 작성된 값을 최종값으로 가짐)

▷ 리터럴 : 변수에 대입되는 값 자체를 의미
   short s = 32767;
   int i = 100;
   long l = 10000L;
   float f = 0.123f;
   double d = 3.14;
   
   char c = 'A';
   String str = "ABC";
 

☁ 상수

  · 수학에서는 '변하지 않는 값'을 의미

  · 컴퓨터에서는 '한 번만 저장할 수 있는 공간'

     ➡ 초기화 이후 다른 데이터(값)를 대입할 수 없다.

▷ 상수 선언 예시
   final int age;
   final double PI = 3.14;

  -> 변수의 자료형 앞에 final을 붙여 상수임을 표시
 
▷ 상수 테스트
        int age;
        final int AGE; //final을 사용해 상수 선언
		
        age = 20;
        AGE =20;
		
        System.out.println("age :" + age);
        System.out.println("AGE :" + AGE);
		
        age =19;
        //AGE = 19;		상수는 초기화 이후 값을 변경할 수 없기 때문에 주석을 제거하면 에러 발생
		
        System.out.println("변경 후 age: " + age);
        System.out.println("변경 후 AGE: " + AGE);
 

☁ 문자열

  · 컴퓨터에서 "기차", "출력하세요" 등 단어나 문장을 문자열이라 표현

      ➡ " " (Double Quotation, 더블 쿼테이션)으로 묶여있으면 문자열로 인식

  · Java에서는 String 객체를 이용하여 저장

▷ 문자열 초기화
   String str = "기차";
   String str = new  String ("기차");
   String str = "기차" + "칙칙폭폭";
   String str = new String("기차" + "칙칙폭폭");
   String str = "기차" + 123 + 45 + "출발";      -> 다른 자료형 + "문자열" = 문자열
   String str = 123 + 45 + "기차" + "출발";      -> "문자열" + 다른 자료형 = 문자열

-> 다른 자료형인 123, 45 와 "기차", "출발"이라는 문자열이 합쳐진 경우,
    문자열로 인식되어 출력

출력 )
   String str = "기차" + 123 + 45 + "출발";
    출력 -> 기차123455출발

    String str = 123 + 45 + "기차" + "출발";
    출력 -> 12345기차출발
 

☁ 변수 사용 목적

▷ 변수를 사용하지 않으면,
   System.out.println(100 + 10);
   System.out.println((100 + 10) * 10);
   System.out.println(((100 + 10) * 10) - 10);
   System.out.println((((100 + 10) * 10) - 10) / 10);
-> 많은 양의 수를 사용하는 경우 코드가 복잡해지고 가독성이 떨어지며 작성하기 어렵다.

▷ 변수를 사용하면,
   int num = 100; 
   System.out.println(num + 10);
   System.out.println((num + 10) * 10);
   System.out.println(((num + 10) * 10) - 10);
   System.out.println((((num + 10) * 10) - 10) / 10);
 

☁ 데이터 오버플로우(Data Overflow)

public void testOverFlow() {
    // byte bnum = 128; => byte는 -128~127까지이기때문에 범위를 벗어나서 에러 발생
    byte bnum = 127;
    //bnum += 1;   // byte + int --> int
    //위의 코드를 아래와 같이 형 변환 시켜주기
    bnum =(byte)(bnum+1);
		
    System.out.println("bnum: " + bnum);  
    //결과 값은 오버플로우 처리가 되어서 127 + 1의 값은 범위를 벗어나는 128이 아닌 최소값인 -128로 나온다
}
 

☁ 형변환(casting)

  · 같은 종류 자료형만 대입 가능

  · 같은 종류 자료형만 계산 가능

  · 계산의 결과도 같은 종류의 값이 나와야 함

     ➡ 이러한 원칙이 지켜지지 않은 경우, 형변환이 필요

 

☁ 자동 형변환

  · 연산시 컴파일러가 자동으로 형이 변환하는 것을 의미

예시)
   int a = 12;
   double d = 3.3;
   double result = a + d;
   
   a + d = 12 + 3.3 = 12.0 + 3.3 = 15.3
    -> 단, byte와 short 자료형의 값의 계산 결과는 무조건 int로 처리

▷ byte와 short의 연산
   byte bnum = 10, bnum2 = 20;
   byte result = bnum + bnum2;           -> 에러 발생

  * 에러 발생이 나지 않으려면,
   int result = bnum + bnum2;
   byte result = (byte)(bnum + bnum2);
 

☁ 강제 형변환

  · 데이터가 큰 자료형에서 작은 자료형으로 변경 시, 데이터 손실이 있을 수 있으므로 유의

int inum = 10;
long lnum = 100;
		
int isum = 10 + 100;
// int isum = inum + lnum;  타입이 맞지 않아 에러 발생 --> long에서 int로 자동형변환이 될 수 없다.

// 아래 세가지 코드처럼 변환하여 출력할 수 있다
1. long lsum = inum + lnum;		
2. int isum = inum + (int)lnum;
3. int isum2 = (int)(inum+lnum);
 
double temp;
int name = (int)temp;
 

 

☁ 변수와 메모리 구조

 

 

 

 

Comments