변수와 상수 (23.04.17)

·2023년 4월 17일
0

Java

목록 보기
2/35
post-thumbnail

📝 변수 (Variable)


Data(값) 처리 과정

프로그램 실행 시 사용할 값(Data)이 있다면 그 값은 먼저 메모리에 기록되어야 한다. 그리고 메모리에 값을 기록하고 지속적으로 사용하려면 변수부터 만들어야 한다.

💡 변수

메모리(RAM)에 값을 기록하기 위한 공간

  • 공간에 기록되는 값(Data)이 변할 수 있어서 변수라고 한다.
  • 변수는 여러 종류가 존재한다. (저장되는 값의 형태나 크기가 다름)

변수를 사용하면 어떤 장점이 있는지 아래 코드로 직접 살펴보자.

  • 변수를 사용하지 않았을 때
	System.out.println(2 * 3.141592653589793 * 10);
	System.out.println(3.141592653589793 * 10 * 10);
	System.out.println(3.141592653589793 * 10 * 10 * 20);
	System.out.println(4 * 3.141592653589793 * 10 * 10);

코드가 길고 복잡하여 한눈에 보기가 어렵다. 또한 값이 변화하였을 때 숫자를 일일이 바꿔 줘야 하는 번거로움이 있다. 이때 만약 변수를 사용한다면 어떤 변화가 있을까?

  • 변수를 사용했을 때
	double pi = 3.141592653589793; // 원주율
	int r = 10; // 반지름(radius)
	int h = 20; // 높이(height)
		
	System.out.println(2 * pi * r); // 원의 둘레
	System.out.println(pi * r * r); // 원의 넓이
	System.out.println(pi * r * r * h); // 원기둥의 부피
	System.out.println(4 * pi * r * r); // 구의 겉넓이

변수를 사용하자 코드가 훨씬 간결해진 것을 볼 수 있다. 또한 이 코드는 어떤 용도로 짜여진 것인지 알아보기가 훨씬 쉽다.

변수 사용의 장점은 아래와 같다.

✏️ 변수 사용의 장점

  1. 가독성 증가 (읽기 편해짐)
  2. 재사용성 증가 (한 번 만든 변수를 계속 사용 가능함)
  3. 코드 길이의 감소
  4. 유지보수성 증가 (코드 수정이 간단해짐)

💡 데이터 저장 단위

저장 공간이 제한적이기 때문에 저장 크기에 대한 기준과 CPU가 데이터를 처리할 때 일정한 기준이 필요하다.

비트(bit)

: 컴퓨터가 나타내는 데이터의 최소 저장 단위로서 2진수 값 하나를 저장할 수 있는 메모리 공간

바이트(byte)

: 데이터 처리 또는 문자의 최소 단위로서 8개의 비트가 모여 하나의 바이트가 구성됨

✏️ 변수의 선언

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

자료형의 종류

  • 논리형: boolean(1byte)
  • 정수형: byte(1byte), short(2byte), int(4byte), long(8byte)
  • 실수형 : float(4byte), double(8byte)
  • 문자형 : char(2byte, 유니코드)
  • 카멜(낙타) 표기법
    : 연결되는 두 단어 중 후속 단어의 첫 문자를 대문자로 표기

  • 변수의 선언 예시
	boolean booleanData;
	// 메모리에 논리 값(True / False)을 저장할 공간을 1byte 할당하고
	// 할당된 공간을 booleanData라고 부르겠다.

💡 값 대입과 리터럴

값 대입

: 생성한 변수(저장 공간)에 값을 대입하는 것

리터럴

: 변수에 대입되는 값 자체

✏️ 변수의 초기화

변수를 사용하기 전에 처음으로 값을 저장하는 것
지역 변수는 반드시 초기화해야 한다.

		booleanData = true; // booleanData 변수에 true 값을 집어넣기
		System.out.println("booleanData : " + booleanData);
			
		byte byteNumber = 127; // (short, byte는 옛날 코드의 잔재)
			// 메모리에 정수 값을 저장할 공간을 1byte 할당하고
			// 할당된 공간을 byteNumber라고 부르겠다.
			// 선언된 byteNumber 변수에 처음으로 127을 집어넣겠다.
			// --> 초기화 : 처음 변수에 값을 대입하는 것

		int intNumber = 2147483647; // 변수 선언 및 초기화
			
		long longNumber = 10000000000L; // 또는 소문자 l
			// The literal 10000000000 of type int is out of range 
			
		float floatNumber = 1.2345f;
			// Type mismatch: cannot convert from double to float

		double doubleNumber = 3.141592;
			// (리터럴 표기법이 없는 실수는 double로 인식)
			
			// 문자형 리터럴 표기법 : '' (홑따옴표)
			// -> 문자 하나를 의미
		char ch = 'A';
		char ch2 = 66;
			// ** char 자료형에 숫자가 대입될 수 있는 이유
			// - 컴퓨터에는 문자표가 존재하고 있는데,
			//   숫자에 따라서 지정된 문자 모양이 매핑되어 있고
			//   'B' 문자 그대로가 대입이 되면 변수에 숫자 66으로 변환되어 저장된다.
			//   -> 반대로 생각하면 변수에 애초에 66이라는 숫자를 저장하는 것이 가능하다.
			
		System.out.println("ch : " + ch);
		System.out.println("ch2 : " + ch2);

✏️ 변수의 명명 규칙

  1. 대소문자가 구분되며 길이 제한이 없다.
		int abcdefghijklmnopqrstuvwxyz;
		int abcdefghijklmnopqrstuvwxyZ; // Z 다름
  1. 예약어를 사용하면 안 된다.
		double double;
		// 오류! Syntax error on token "double", invalid VariableDeclarator
  1. 숫자로 시작하면 안 된다.
		char 1abc;
		// 오류! Syntax error on token "1", delete this token
  1. 특수문자는 '_'와 '$'만을 허용한다.
		int $intNumber; // 컴파일 시 문제는 없지만 개발자가 직접 작성하지는 않음
		int int_number; // 자바는 카멜 표기법 사용 (-> intNumber)
						// _ 작성 표기법은 DB에서 사용
  1. 여러 단어 이름은 단어의 첫 글자를 대문자로 한다.
    단, 첫 시작 글자는 소문자로 하는 것이 관례이다.
		char helloWorldAppleBananaTomato;
  1. 변수명은 언어를 가리지 않는다.
		int 정수1;
		double 실수2= 3.14;
		System.out.println(실수2);			

📝 상수 (Constant)

💡 상수

수학에서는 변하지 않는 값을 의미
컴퓨터(Java)에서는 한 번만 저장(기록)할 수 있는 메모리를 의미

  • 한 번 값이 대입되면 다른 값을 대입할 수 없음
  • 자료형 앞에 final 키워드를 작성해야 함 (마지막에 대입되는 값)

✏️ 상수 명명 규칙

  1. 모두 대문자로 표기
  2. 여러 단어 작성 시 "_" 사용

✏️ 상수를 사용하는 경우

  1. 변하면 안 되는 고정된 값을 저장할 때
  2. 특정한 값에 의미를 부여할 때
		final double PI_VALUE = 3.14;
		// PI_VALUE = 2.3222; // 에러! 대입 불가
		// The final local variable PI_VALUE cannot be assigned. It must be blank and not using a compound assignment
			
		final int LEFT_MOVE = -1;
		final int RIGHT_MOVE = 1;
			
		System.out.println(1 + 1.3);
			

profile
풀스택 개발자 기록집 📁

0개의 댓글