본문 바로가기

프로그래밍/Java

19.12.18) Java - 변수, 자료형, 선언

목차

  • 변수
  • 자료형
  • 선언

변수

메모리 속 기억공간이라 한다. 컴퓨터에게 1+1 연산을 시키려면 어떻게 해야 할까? 먼저 알려줘야 한다. 컴퓨터에게 알려주려면 메모리에 1+1을 넣어야 한다.

기억공간이라 했으니 공간의 특징이 있다.

  1. 크기가 있다
  2. 들어가는 데이터의 종류가 있다.

자료형(Data type)

기억 공간의 크기와 들어가는 데이터의 종류를 결정하는 자료형이다. 자바에는 int, char, String, boolean 등 자료형이 있다. 자료형과 그 기억공간의 이름을 붙이면 기억공간이 만들어진다.

아파트도 평 수가 나눠져있는 것처럼

자료형의 크기

  • int : 4byte, 32bit, 2^32개 정수 표현 가능. 42억 개
  • long : 8byte, 64bit, 매우 큼
  • float : 4byte, 32bit
  • double : 8byte, 32bit

자료형의 종류

  • primitive(기본자료형) : boolean, int, long, float, double
  • non-primitive(객체 자료형) : String, array... 기본자료형으로는 부족할 땐? 컴파일러에서 자동으로 제공해주는 자료형도 유용하지만 때로는 다른 자료형이 필요할 때도 있다. 예를 들어) 책을 기억공간에 넣고 싶다. 근데 책을 넣을 수 있는 자료형이 자바에는 없다? 그럼 어쩌지?? 만들면 된다. 뭐로? Class로 만든다.

내가 원하는 자료형은 설계해서 직접 만든다. 이게 객체지향 프로그램의 기본이다.

선언

-2019.12.26 수정-

자료형과 그 기억공간에 이름을 붙이는 작업을 선언이라 한다. 자료형과 변수가 만나는 걸 선언이라 한다!!

```
int a; // 선언, int형 크기와 int형이 들어갈 수 있는 기억 공간이 만들어짐

```

변수가 선언되면 컴파일러는 변수 목록표를 만든다. (Symbol table). 이 목록표는 key와 value로 구성된다. key 값에서는 각 변수가 들어가고 value에는 각 변수의 메모리 주소(address)가 있다. 그래서 key 값인 변수를 호출하면 value에 있는 메모리 주소를 찾아가서 변수를 가져온다.

복습 하는 도중에 이 개념을 읽고 "그럼 결국 기본 자료형에도 값 자체보다 주소가 들어가는 것 아닌가? 그러면 객체 자료형과 차이가 없지 않나?" 라고 의문이 생겼다.

이는 Call by value와 Call by reference와도 관련이 되어 있다. Call by value를 다시 정리했다. 매개변수가 기본 자료형이더라도 변수 속 주소가 가는 것이 아니다. 그 값이 간다. 그래서 메서드 선언부에서는 다시 한번 메모리를 만들어 그 값을 저장한다.
반면에, call by reference는 매개 변수로 주소가 가기 때문에 메서드 선언부에서는 새롭게 메모리를 만들지 않고 참조한 주소를 가르킨다. 그래서 메서드 내부에서 객체의 값을 변경하면 실제 객체 값도 변경된다.

다시 정리한다. 객체 자료형과 차이는 있다. 위에서 언급한 변수 목록표 value에 변수의 주소가 들어간다. 변수에 들어간 값의 주소가 아니다.

결국, 기본 자료형은 Symbol table에서 변수의 주소가 들어간다. 값의 주소가 아니다.