[210127] 2. 변수와 타입

강의는 『이것이 자바다 신용권의 Java 프로그래밍 정복』 책으로 진행되고 있다.
제목을 책에 있는 챕터의 이름으로 썼긴 했지만, 하루 8시간 강의를 듣는 만큼 훨씬 많은 것들을 배울 수 있었다.
오늘 배운 것들 중, 프로그램을 작성했을 때, 데이터가 어떤 식으로 메모리에 적재되는지가 가장 핵심적인 부분이었다.
나머지는 Java에서 기본으로 제공하는 클래스와 자동 형변환과 명시적 형변환에 대해 배웠다.
핵심적인 부분만 다루고, 클래스 사용법과 형변환은 생략하겠다.

피곤해서 대충 그렸지만, 위 그림 하나로 메모리에 데이터가 적재되는 구조는 설명할 수 있을 것이다.
운영체제를 배우게 되면 실제로 이런 그림처럼 저장되지는 않는다는 것을 알겠지만, 메모리가 할당이 되면
어플리케이션이 실행되면 이러한 영역으로 메모리 영역을 구분한다는 것을 알면 된다.
먼저 Stack을 보자. 변수의 이름은 모두 Stack에 저장되며, 기본 타입의 값도 여기에 저장된다.
int age = 27;
double tall = 12345678.9
char gender ='남';
위와 같은 기본 타입들은 전부 스택에 들어가는 식이다.
하지만 데이터 중 참조형 타입인 String과 이외의 객체는 조금 다르다.
String s1 = new String("java");
String s2 = new String("java");
먼저 String은 위와 같이 new 키워드를 이용해 String 객체를 선언하는 방식이 있다. 이 경우는 선언과 초기화를 같이하였다. 이런 방법으로 String 객체를 선언하게 된다면, 스택에는 s1과 s2 변수 이름과, 메모리 주소가 저장된다. 그리고 그 메모리 주소는 instance - young - eden 부분에 저장되게 된다.
String s3 = "java";
String s4 = "java";
하지만 위와 같이 String을 이와 같이 선언하게 되면, "java"라는 텍스트는 String literal Pool에 저장되면서 객체와는 다른 취급을 하게 된다. 이는 String만의 특징인데, 만약 중복된 String 값이 있다면 Stack에 변수명이 저장되면서 같은 주소를 가르키게 된다.

다시는 그림을 그리지 않겠다. 아님 노트에 따로 그리던지 해야지.
Java에서 메모리를 아끼기 위해 s3, s4가 저장되는 방식이 고려가 된 것인데, 비상식적이다. 어디에 사용될 수 있을까 생각해보았는데, 예전에 파일 시스템을 쓸 때를 고려해서 만든게 아닌가 싶다.
객체는 stack에 변수명과 주소값이 저장되고, s1, s2와 같은 방식으로 instance - young - eden 부분에 실제 값이 저장된다.
메모리에서 설명을 안한 부분 중 static은 데이터 타입 앞에 올 수 있는 예약어로 JVM에서 로드를 할 때 가장 먼저(main함수 보다도) 초기화를 시키는데, 이런 변수나 함수를 저장하는 공간이다. final은 상수를 저장하는 공간이다.
나머지는 강의가 진행되면서 더 알아갈 것이라 설명해주셨다. 이 정도로 오늘 배운 것들 정리를 마무리한다.
코드 블럭이 지원이 된다는 점이 편하긴 한데, 라인 표시라던지 IDE처럼 글씨에 색이 없다던지 등의 문제가 있어 시간이 난다면 지원하는 플러그인이 있는지 확인해야겠다.