본문 바로가기
> 개발/JAVA

자바의 변수와 자료형, 기본자료형의 종류, 할당과 초기화, 심볼 테이블

by @일리 2023. 7. 14.

변수

데이터는 메모리에 저장이 된다. 변수를 선언할 때 데이터를 저장할 메모리 공간이 할당된다. 데이터가 저장된 메모리의 공간을 나중에 참조할 수 있도록 하기 위해서는 공간을 식별할 수 있어야 한다. 이를 위해 메모리 공간에 붙이는 이름이 변수다. 다시 말해 변수는 데이터가 저장된 메모리 위치에 붙인 이름이다. 

변수 이름 규칙

1. 숫자로 시작할 수 없음

2. 대소문자 구분 가능, 길이 제한 없음

3. 특수문자 사용 불가($, _ 예외)

4. 예약어는 변수 이름으로 사용 불가

변수의 종류

1. 멤버변수

2. 클래스변수

3. 지역변수

-> 지금은 강의에서 다루지 않아서 언급만 하고 넘어간당

자료형

변수를 선언할 때 앞에 자료형을 붙여서 변수의 크기는 몇 바이트인지, 변수에 어떤 종류의 데이터를 저장할지 결정한다. int a;라고 변수를 선언하여 a라는 변수의 크기를 4바이트로 정하고, 변수에 정수만 할당할 수 있도록 제한한다.

자료형의 종류

1. 기본자료형(PDT :Primitive Data Type) : int, float, char, boolean 등..

2. 사용자정의 자료형(UDDT : User Define Datatype)

   - 사용자가 만들어 사용하는 자료형으로 사용하기 위해서는 클래스를 만들어야 한다.

기본자료형

자바의 기본자료형 요약
자바의 기본자료형

기본자료형 중에서 long과 float을 사용할 때는 맨 뒤에다가 L과 F를 붙여야 한다. 신기하게도 double은 d를 붙이지 않아도 된다. 자바에서 10진수 리터럴은 기본적으로 double로 해석되기 때문이라고 한다. 

 

 

변수를 선언할 때 데이터 타입을 제대로 명시하는 일이 왜 중요할까? 

int는 2의 32승까지 표현할 수 있다. 2의 32승은 4,294,967,296이다. 그러니까 int로 표현할 수 있는 숫자는 –2,147,483,648 ~ 2,147,483,647이다. int로 2147483647은 표현이 가능하지만, 2147483648을 표현하면 에러가 뜬다.

 

int가 표현할 수 있는 한계를 넘어섰다!
그럴 땐 long을 사용하자.

숫자로 2147483647까지만 표현하고 싶을 때 데이터 타입을 int로 지정함으로써 그보다 큰 숫자를 사용하는 오류를 방지할 수 있다. 그리고 적절한 데이터 유형을 선택하여 메모리를 효율적으로 사용할 수 있다. 127 이내의 숫자만 사용할 예정이라면 byte가 아닌 short, int, long을 선언해서 굳이 불필요한 메모리를 차지할 필요가 없다. 메모리를 효율적으로 사용하면 코드의 성능이 향상되고, 변수를 어떻게 사용할지 코드의 가독성과 유지 보수성도 높일 수 있다.

 

문자문자열은 다르다?

 

char는 문자형으로 한 글자의 문자만 표현할 수 있다. 두 글자 이상의 문자를 표현하려면 String을 사용해야 한다. String은 기본형 데이터 타입은 아니고, 자바에서 API에서 제공하는 클래스이다. String 클래스는 java.lang 패키지의 일부로 개체를 나타내는 참조 유형이다. 문자형을 사용할 때는 작은 따옴표로 문자를 감싸줘야 하고, 문자열을 사용할 때는 큰 따옴표로 문자열을 감싸주면 된다. 이런 걸보면 자바는 정말 C언어와 비슷한 점이 많다!

할당

변수에 지정된 데이터 타입에 맞게 데이터를 저장하는 행위를 말한다. 변수를 선언하면 메모리 공간이 생성되고, 변수에 값을 할당하여 그 공간에 값을 저장할 수 있다,

 

int a = 10 과 같이 상수를 할당할 수도 있고,

int b = a와 같이 변수를 할당하거나

int c = b* 10과 같이 연산식을 넣거나

int d = 매소드(파라미터) 로 매서드의 결과를 넣을 수도 있다.

초기화

변수를 만들고 나서 만들어진 메모리 공간에 값을 저장하는 행위이다. int a = 10;는 변수 a를 선언하고, 값을 10으로 초기화한 것이다.

초기화를 해야 하는 이유는 메모리에 쓰레기값(Garbage value)이 존재하지 않도록 하기 위함이다. 자바스크립트처럼 자바에도 가비지 콜렉터가 있어서 할당했던 메모리 영역 중 필요 없어진 메모리 영역이 주기적으로 삭제된다.

 

심볼 테이블(Symbol Table)

변수가 만들어지면 변수를 관리하는 테이블에 변수의 정보(변수의 이름과 변수가 저장된 주소)가 저장이 된다. 이 테이블을 심볼 테이블이라고 한다. 심볼 테이블은 변수를 효율적으로 조회하고 검색하기 위해서 해시 테이블로 구현이 되어있다. 해시 테이블은 데이터를 키와 값 쌍으로 저장하는 데이터 구조이다. 그래서 심볼 테이블은 key(변수)와 Value(번지)로 구성되어있다. 변수가 선언이 될 때 메모리 공간이 만들어지면서 심볼 테이블에 Key와 Value가 저장된다. 

 

선언을 안한 변수에 할당을 하면 cannot find symbol 에러가 뜬다.

만약 변수를 선언하지 않고 바로 값을 할당하면 위와 같이 심볼 테이블에서 찾을 수 없다는 에러가 뜬다.

+ 오늘 배운 팁

 

sout를 하면 System.out.println을 자동으로 완성해준다. 그리고 soutv를 하면 위에 선언한 변수를 활용해서 위와 같은 형태로 자동 완성해준다. 물론 기본적으로 내가 직접 코드를 하나씩 쓸 줄도 알아야하지만 나중에 시간 절약을 위해서는 단축키도 알아놔야겠당!

댓글