Programming Language/Java

[Java] 변수

LeeJaeJun 2023. 12. 30. 23:43
728x90
반응형

변수: 단 하나의 값을 저장할 수 있는 메모리 공간

변수타입: 변수에 저장될 값이 어떤 타입(type)인지를 지정

변수이름: 변수에 붙인 이름(메모리 공간에 이름을 붙여주는 것)

 

변수를 선언하면, 메모리의 빈 공간에 변수타입에 알맞은 크기의 저장공간이 확보되고, 앞으로 이 저장공간은 변수이름을 통해 사용할 수 있게 된다.

 

변수의 초기화: 변수를 사용하기 전에 처음으로 값을 저장하는 것

Why? 메모리는 여러 프로그램이 공유하는 자원이므로 전에 다른 프로그램에 의해 garbage value가 남아있을 수 있기 때문

 (+) 지역변수는 사용되기 전에 초기화를 반드시 해야 하지만 클래스변수와 인스턴스변수는 초기화를 생략할 수 있다.

 

식별자(identifier): 프로그래밍에서 사용되는 모든 이름, 식별자는 같은 영역 내에서 서로 구분될 수 있어야 한다.

(+) 식별자 규칙

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

  2) 예약어를 사용해서는 안된다.

  3) 숫자로 시작해서는 안된다.

  4) 특수문자는 '_'와 '$'만을 허용한다.

 

예약어(keyword / reserved word): 프로그래밍언어의 구문에 사용되는 단어

 

자바 프로그래머들에게 권장하는 규칙

1) 클래스의 이름의 첫 글자는 항상 대문자로 한다.

 - 변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.

2) 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다.

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

(+) 자바에서는 모든 이름에 유니코드에 포함된 문자들을 사용할 수 있지만, 적어도 클래스 이름은 ASCII코드(영문자)로 하는 것이 좋다. 유니코드를 인식하지 못하는 OS도 있기 때문!

 

자료형은 크게 기본형 참조형으로 나눌 수 있다.

기본형 변수(primitive type): 계산을 위한 실제 값(data)를 저장

- 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)

참조형 변수(reference type): 어떤 값이 저장되어 있는 주소(memory address)를 저장(객체의 주소를 저장)

- 기본형이 아닌 모든 것들

(+) 자바는 C언어와 달리 참조형 변수 간의 연산을 할 수 없으므로 실제 연산에 사용되는 것은 모두 기본형 변수임

(+) 참조형 변수(참조변수)를 선언할 때는 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 참조변수의 타입이 됨. 따라서 새로운 클래스를 작성한다 = 새로운 참조형을 추가한다.

 

참조변수 선언 방법: 클래스이름 변수이름;

(+)참조변수는 null 또는 객체의 주소를 값을 가짐.

ex) Date today = new Date (); // 객체 생성 연산자 new를 통해 Date객체를 생성하여, 그 주소를 today에 저장

 

자료형(data type)과 타입(type)의 차이

- 기본형은 저장할 값(data)의 종류에 따라 구분되므로 기본형의 종류를 얘기할 때는 '자료형(data type)'이라는 용어를 씀

- 참조형은 항상 '객체의 주소(JVM이 32bit인 경우에는 4byte 정수/ 64bit인 경우 8byte)'를 저장하므로 값(data)이 아닌, 객체의 종류에 의해 구분되므로 참조형 변수의 종류를 구분할 때는 '타입(type)'이라는 용어를 사용. 

- 타입(type)이 자료형(data type)을 포함하는 보다 넓은 의미의 용어이므로 굳이 구분하지 않아도 됨.

 

기본 자료형의 종류와 크기

- boolean은 true와 false 두 가지 값만 표현할 수 있으면 되므로 가장 작은 크기인 1 byte

- char은 자바에서 유니코드(2 byte 문자체계)를 사용하므로 2 byte

- byte 는 크기가 1 byte라서 byte

- int(4 byte)를 기준으로 짧아서 short(2 byte), 길어서 long(8 byte)

- float는 실수값을 부동소수점(floating-point)방식으로 저장하기 때문에 float

- double은 float보다 두 배의 크기(8 byte)를 갖기에 double

(+) 정수형의 경우 -(2^n-1) ~ (2^n-1) -1 (n은 bit수)의 범위를 갖는다.

 

float의 정밀도(precision)은 7자리(10진수로 7자리 수를 오차없이 저장할 수 있다는 뜻), double의 정밀도는 15자리

 

상수: 값을 한번만 저장할 수 있는 공간

- 선언방법은 변수와 동일하지만 변수 타입 앞에 키워드 final을 붙여주어야 한다.

- 반드시 선언과 동시에 초기화해야 하며, 그 후 부터는 상수의 값을 변경하는 것이 허용되지 않는다.(but 사실 JDK1.6부터는 상수를 선언과 동시에 초기화 하지 않아도 되고, 사용하기 전에만 초기화하면 되는 것으로 바뀜.)

- 리터럴에 의미있는 이름을 붙여서 코드의 이해와 수정을 쉽게 만듦.

ex) final int MAX_WEIGHT = 70;

 

리터럴(literal): 그 자체로 값을 의미하는 것

ex) int year = 2014; //year는 변수, 2014는 리터럴

final int MAX_WEIGHT = 70; //MAX_WEIGHT은 상수, 70은 리터럴

- long타입의 리터럴에 접미사 'l' 또는 'L'을 붙임, 접미사 없으면 int타입의 literal

- byte와 short타입의 리터럴은 별도로 존재하지 않고, byte와 short타입의 변수에 값을 저장할 때는 int타입의 리터럴을 사용함.

- 16진수를 표시하기 위해서는 접두사 '0x', 또는 '0X', 8진수의 경우 '0', 2진수의 경우 '0b'를 붙인다.

- 리터럴 중간에 구분자 '_'를 넣어 큰 숫자를 편하게 읽을 수 있다.

ex) long num = 100_000_000_000L;  // long num = 100000000000L;

- 실수형에서는 float타입의 리터럴에 접미사 'f' 또는 'F'를 붙이고, double타입의 리터럴에 접미사 'd' 또는 'D'를 붙인다. double이 기본 자료형이기에 접미사 d(D)는 생략가능하다.

(+)실수형 리터럴의 예

10. == 10.0

.10 == 0.10

10f == 10.0f

3.14e3f == 3140.0f

1e1 == 10.0

1e-3 = 0.001

 

문자 리터럴: 작은따옴표로 문자 하나를 감싼 것 ex) 'A'

- 반드시 작은 따옴표 안에 하나의 문자가 있어야 한다. (작은 따옴표로 empty string 표현할 수 없음)

문자열 리터럴: 두 문자 이상은 큰 따옴표로 감싸야 하며, 이를 문자열 리터럴 이라고 함. ex) "ABC"

- 큰 따옴표 안에 아무런 문자를 넣지않는 것을 허용, 이를 빈 문자열(empty string)이라고 함.

728x90
반응형

'Programming Language > Java' 카테고리의 다른 글

[Java] 특수 문자 다루기  (0) 2023.12.30
[Java] 출력  (1) 2023.12.30
[Java] public static void main(String[] args) 분석  (0) 2023.12.30
[Java] JDK와 JRE  (0) 2023.12.30
[Java] Java의 특징  (1) 2023.12.30