1. 변수란?

2021. 6. 11. 11:58프로그래밍/개인프로젝트

개인적으로 공부하고 생각을 정리하기위해 작성하는 글입니다

오류를 지적해주시면 저의 공부에 많은 도움이 될 것입니다 


변수의 사전적 의미

 

변수의 사전적 의미는 다음과 같다.

이 세상의 모든것은 시간으로 부터 자유로울 수 없기때문에 모든것이 변수다.

컴퓨터에서는 이러한 모든것들을 사람이 사용하기위해 상징적인 이름을 붙인것이 변수다

변수를 통해 우리는 아주 긴 문장을 축약해 가독성을 높이며 메모리를 절약하는 코딩을 할 수도있고.

공통의 제거를 통해 유지보수를 편리하게 할 수도 있다.

아래에서 좀더 자세하게 알아보도록 하자

 

컴퓨터 언어에서 지정해준 타입 외의 정보는 compile되지 않는다.

때문에 '알맞은 데이터 타입'명확히 지정해줘야한다

'알맞은 데이터타입'을 지정하는것은 번거롭지만 사용할 때마다 타입을 확인하지 않을 수 있는 확신을 줄 수 있다.

예를들어 변수에 1이라는 숫자를 쓸 때 변수타입을 정의하지 않았다면 숫자1인지 문자1인지 구별할 수 없다.

 

자바에선 변수의 형태는 기본형 변수 8가지와 참조형 변수로 나눌 수 있다

기본형 변수는 실제 값을 저장하지만 참조형 변수는 값이 저장되어있는 주소를 값으로 가진다. 

각 변수의 형태를 Data Type (자료형)이라고 하며 각 자료형 마다 저장 할 수 있는 메모리 용량이 다르다.

 

1bit는 컴퓨터를 구성하는 최소 단위이지만 저장할 수 있는 값이 너무작기 때문에 8개를 묶어서 1byte라고 정의했고 byte는 컴퓨터 데이터의 기본단위로 사용한다.

 

기본형 변수

      기본형 변수는 정수형 4타입, 실수형 2타입, 문자형, 논리형 총8타입으로 분류된다

  1byte 2byte 4byte 8byte
정수형 byte short int long
실수형     float double
문자형   char    
논리형 boolean      

 

public class 변수의 타입 {

	public static void main(String[] args) {
			
	// 숫자(정수형 byte, short, int, long)
		
		byte by = -128; // 범위제한 : -128 ~ 127
		short sh = 32767; // 범위제한 : -32768 ~ 32767
		int in = 2147483647; // 범위제한 : -214783648 ~ 214783647
		long lo = 9223372036854775807L;
			//범위제한 : -9223372036854775808 ~ 9223372036854775807
            
		System.out.println(by); //-128
		System.out.println(sh); //32767
		System.out.println(in); //2147483647
		System.out.println(lo); //9223372036854775807
				
			// 범위제한을 넘어가면 에러
			// long타입은 int와 구분을 위해 접미사L을 붙여야함
            }
 	}

      정수형

            정수형의 4타입은 각자 표현할 수 있는 범위가 제한이 있으며 범위를 넘는값은 저장할 수 없다.

            메모리의 제약때문에 많은 자료형이 필요한 것이다

            int는 정수형의 기본값이다 (CPU가 가장 효율적으로 처리할 수 있는 타입)
            byte와 short는 적은 수의 표현으로 충분하고 메모리가 부족한 상황에서 사용한다

            long은 int범위를 벗어날 경우 사용해야하며 구분을 위해 접미사L을 붙여줘야 한다

 

public class 변수의 타입 {

	public static void main(String[] args) {
	//실수형
				
		float fl = 9.9999996f;
		System.out.println(fl); 
			// 9.999999f까지는 9.999999출력 
			// 9.99999952f -> 9.999999
			// 9.99999953f -> 10.0 
			// 소수점아래 7자리까지 정확히 표현
			
            // 접미사f를 붙인다
            
		double dob = 9.99999999999999912;
		System.out.println(dob);
			// 9.9999999999999991; -> 9.999999999999998출력
			// 9.99999999999999912; -> 10.0 출력
			// 소수점 아래 15자리까지는 정확히 표기
            }
	}

      실수형

            실수형은 double이 기본형이다 float형은 접미사 f나F를 붙여서 표기해야한다.

            float보다 2배의 정밀도를 가지고 있어서 double이라고 부른다

 

public class 변수의 타입 {

	public static void main(String[] args) {
			
	
				
	//문자형
		char ch = '돈';
		System.out.println(ch);
			// 돈 출력
			// 저장할 값이 2글자 이상이면 에러 ex)돈줄, 돈가방, 돈세탁 
			// 큰따옴표쓰면 에러,큰따옴표는 String타입(참조형)
            }
    }

      문자형

 

             기본값 : ' ' (공백)
             문자 저장에 사용되며 변수당 하나의 문자만 저장할 수 있다.
             작은따옴표를 이용해 나타낸다 (큰따옴표는 String타입에 사용한다)
             문자의 Unicode(16진수) 또는 문자의 10진수 값으로도 표현한다
             문자를 내부적으로 정수(유니코드)로 저장하기 때문에 정수형 또는 실수형 타입과 연산이 가능
             문자열이 아닌 하나의 문자를 저장한 값이라는 점에 유의
              (문자열을 변수에 저장하려면 char 문자형이 아닌 string객체를 사용해야함)  

 

public class 변수의 타입 {

	public static void main(String[] args) {
		
	//논리형
		boolean bo = 1>0;
		System.out.println(bo); 
			//true출력
		}
	}

      논리형

           기본값 : false
           true / false중 하나의 값을 저장 → 조건식과 논리적 계산에 주로 사용
           데이터를 다루는 최소단위가 1byte임으로 1byte를 가지게 된다.
           연산 이 불가능
           C나 C++ 등의 언어에서는 정수값이 논리형으로 사용된다.
           (0은 false에 해당되고 0이 아닌 값은 true에 해당된다.)

           그러나 자바에서는 그렇지 않다. 자바에서는 정수값을 논리형으로 사용할 수 없다

 

타입의 불일치

      저장범위가 넓은 타입에 좁은타입의 값을 저장하는것은 허용된다

int i = 'A' //ok 문자A의 유니코드인 65가 변수i에 저장된다

long i = 123 //ok int보다 long타입이 더 범위가 넓다

double d = 3.14f; //float보다 double타입이 범위가 더 넓다

 

      하지만 저장범위가 좁은 타입에 넓은타입의 값을 저장하면 에러가 발생한다

int i = 214783648; // 에러 int타입의 범위를 넘는값

float f = 3.14 // 에러 3.14는 3.14d 에서 d가 생략된것으로 double타입이다

 

참조형 변수

            기본형을 제외한 모든 데이터타입
             빈 객체를 의미하는 Null이 존재
             할당되는 메모리 크기 = 4byte
             값이 저장되어 있는곳이 주소값을 저장하는 공간으로 heap 메모리에 저장됨
             기본형타입에 비해 접근속도가 느리고 사용하는 메모리양도 압도적으로 높다

 

변수 명명 규칙

      필수규칙

              1. 대소문자가 구별되야 한다 (True와 true는 다르다)

              2. 예약어를 사용하면 안된다 (True는 사용가능하지만 true는 예약어다.)

              3. 숫자로 시작하면 안된다 (top10은 가능, 7up은 불가능)

              4. 특수문자는 '_'와 '$'만 허용

      암묵적규칙

              1. 클래스의 첫글자는 항상대문자, 변수/메서드의 첫글자는 항상 소문자

              2. 여러단어로 이루어진 이름은 단어의 첫글자를 대문자로한다.(띄어쓰기안되므로)

              3. 상수의 이름은 모두 대문자로 하고 여러단어로 이루어진경우 _로 구분한다

 

public class 변수예제 {
	 
	public static void main(String[] args) {
			
		System.out.println(6+3);
		System.out.println("6+3");
			
		int year = 0, age = 12;
		year = age + 300;
		System.out.println(age);// 12 출력
		System.out.println(year); // 312 출력
		age = age + 10;
		System.out.println(age); // 22 출력
		System.out.println(year); // 312 출력
		//year가 먼저 계산된후에 age값이 변경되었으므로 year는 312로 출력
		year = age + 300;
		System.out.println(year); //322 출력
		//year를 새로 정의해주면 변경된 age(22)로 계산해서 year는 322출력
		//프로그래밍 언어는 위에서부터 순차적으로 계산된다
			
		}

	}