ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개념원리 - (3) 자바_선언과 초기화
    개발/Java 2018. 2. 13. 15:51

    처음으로 객체에 관한 수업을 듣고 숙제로 객체를 이용하여 간단한 인사 관리 시스템을 짜는데, 

    별 짓을 다 해도 내가 만든 사원 객체가 제대로 생성되지 않아서 새벽 늦게까지 끙끙댔다.

    다음 날 스터디장한테 내가 짠 소스를 보여주며 대체 왜 이게 안되는지 이해를 할 수 없다고 했다.

    스터디장이 한참을 들여다보더니 "이거 생성이 안됐잖아" 라며 간밤의 내 삽질을 뿌셔뿌셔해줬다. 


    그때까지 변수 또는 객체의 선언과 초기화, 생성에 대한 개념이 제대로 안 잡힌 상태에서 정신없이 코딩을 하다보니 그런 실수가 나온 것이다.

    이 포스팅은 그 날의 나에게 헌정하는 글이다.




    1. 선언


    자바의 정석 1권을 펴보면 본격적으로 개념 강의에 들어가자마자 변수의 선언과 초기화에 대해서 설명한다.

    변수를 "단 하나의 값을 저장할 수 있는 메모리 공간" 이라고 정의하는데,

    여기서 주목할 것은 변수가 곧 "메모리 공간" 이라는 부분이다.  

    변수를 선언한다는 것은 곧 메모리의 빈 공간에 해당 변수를 위한 저장공간을 확보한다는 것이다. 




    2. 초기화


    변수를 사용하기 전에는 초기화가 반드시 필요하다.

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

    초기화라는 용어를 쓰니 뭔가 색다른 작업을 하는 것 같지만


    int a;     ← 변수 a 선언(메모리 공간 확보)

    a = 0;    ← 변수  a의 값을 0으로 초기화


    이게 전부다.




    3. 클래스, 배열의 생성


    이렇게 정리하고 나니 정말 별것도 아닌데 왜 헷갈렸나 싶을 정도로 간단하다.

    배열이나 클래스를 선언하고 생성하는 부분에서 그나마 할말이 좀 많아질 것 같다.


    기본 자료형은 위에서 본 것과 같이 변수 선언만으로 실제 데이터를 저장할 수 있는 메모리 공간 확보가 이루어진다.

    그러나 클래스와 배열은 선언하는 것만으로는 사용할 수 없다.

    new 생성자를 사용하여야 클래스 또는 배열을 위한 실제 저장공간이 생성된다. 


    이때, new 연산자는 힙 영역에 메모리를 할당하며, 참조값을 리턴하는 역할을 한다. 

    예를 들어 아래와 같이 선언했을 시


    Animal a = new Animal();


    - Animal  :  사용자 정의 자료형

    - a          :  Animal 인스턴스를 다루기 위한 참조변수. 스택 영역에 생성되어 Animal 인스턴스의 주소를 관리

    - new      :  힙 영역에 메모리 생성, 참조값 리턴

    - Animal() :  생성자. new 연산자에 의해 생성된 메모리를 초기화함


    로 정리할 수 있다. 

    클래스를 이용하여 예시를 들었으나 배열의 경우도 위와 동일하다. 

    (단, 배열의 선언과 초기화를 동시에 하는 경우에는 int[] score = { 50, 60, 70, 80, 90}; 과 같이 new int[] 생략 가능)

    이는 배열, 클래스 등이 참조형 변수이기 때문이다.


    자바의 정석 1권 27페이지에 아래와 같이 기본형과 참조형에 대해 아주 깔끔하게 나와있는데, 


    기본형 (primitive type)

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

    - 계산을 위한 실제 값을 저장


    참조형 (reference type)

    - 8개의 기본형을 제외한 나머지 타입

    - 객체의 주소를 저장


    이 정의와 같이 배열 또는 클래스 선언에서 사용된 변수는 실제 데이터가 어디 있는지만 알고 있을 뿐,

    그 위치에 어떤 값이 들어가있는지는 모른다. 

    그러므로 배열이나 클래스를 선언하기만 하고 생성하지 않으면 아무짝에도 쓸모 없게 되는 것이다. 


    다음에는 자바의 메모리 구조도 다시 한번 공부해야겠다.... 

        








    댓글

Designed by Tistory.