Notice
Recent Posts
Recent Comments
05-21 07:17
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Computer Language - Reference Type 본문

Programming Language/Java

Computer Language - Reference Type

알 수 없는 사용자 2023. 5. 1. 13:16

Data type

  • 원시 타입 Primitive type
    • Integer (byte, char, short, int, long)
    • Floating-point (float, double)
    • Boolean
  • 참조 타입 Reference type
    • Array
    • Enum
    • Class (+String, Wrapper)
    • Interface

메모리에서 변수의 저장은 간단하게 Stack과 Heap의 영역에 저장된다.

 

Stack

  • 메모리 영역중에 하나로 Reference Type의 데이터는 주소값이 저장되고, Primitive Type은 실제값이 저장되는 곳이다.
  • LIFO(Last-In-First-Out) 구조로 가장 마지막에 저장된 데이터가 가장 먼저 제거된다.
  • 여러 개의 Thread가 프로그램 내에서 동시에 실행될 때 각 Thread마다 별도의 스택 영역이 생성된다.
  • 각각의 Thread마다 별도의 Stack 영역이 있기에, 자신의 지역 변수, 매개변수 등의 데이터 등을 저장할 수 있다.

Heap

  • JVM에 의해 생성되는 영역이고, 어플리케이션(옵티마이저)가 실행되는 동안 계속 살아 있는 영역이다.
  • 모든 객체들이 저장되고, 여기 있는 메모리는 global 하게 접근이 가능하다.
  • 컴퓨터 내에서 어느 위치에서든 어플이 실행되는 동안 접근 가능.

 

Reference Type

일반적으로 Reference Type은 initialization이 없을때, null로 저장되고, ==, != 연산자를 통한 값비교는 primitive 수준에서만 값을 비교하고, Instance끼리의 값을 ==, !=로 비교한다면 실제 값이 아닌 주소값을 비교하게 된다.

 

NPE(Null Pointer Exception)

 객체를 초기화하지 않으면 null 상태가 되는데, 이때 객체는 어느 무엇도 참조하지(가리키지) 않게 된다. 따라서, 해당 객체를 참조하여 사용하려고 할때, NPE가 일어난다.

 

New Keyword

 클래스의 인스턴스를 생성하려고 할 때, new 키워드는 해당 클래스의 인스턴스 하나를 생성해주는 키워드이다. 해당 인스턴스는 Heap 영역에 저장되며, 이를 가리키는 주소(address)가 반환되게 되며 기존 변수명은 이 주소를 가리키는 Stack영역에 저장된다.

String str1 = new String("Hello"); // new를 통해 인스턴스 생성 -> 주소값 반환 -> 할당 연산자로 주소 저장

 

Enumeration

 상수값들을 저장시킬 수 있는 특별한 데이터 타입이며, Reference Type의 한 형태다. 보통 Enum파일 하나를 생성하여, 거기에 선언을 한 후에 가져와 사용하는 형태이다.

// Week.java

public enum Week {
    SUNDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
}
// Main.java

public class Main {
    public static void main(String[] args) {
        Week week = Week.SUNDAY;
        System.out.println(week);

        for(Week w : Week.values()) {
            System.out.println(w);
        }
    }
}

 

Array

 통일된 자료형을 다수 저장할 수 있는 Reference Type의 한 형태이다. 0-index형태로 파이썬과 동일하게 대괄호를 통해 각각의 데이터에 접근이 가능하다.

int[] intArr;
double[] doubleArr;
String[] strArr;

int intArr_[];
double doubleArr_[];
String strArr_[];

int intArray[] = new int[5];
double[] doubleArray = new double[10];
String strArray[] = new String[2];

int[] int_arr = {1, 2, 3};
double double_arr[] = {0.1, 0.2, 0.3};
String str_arr[] = {"a", "b", "c"};

 Array를 통해 다중 Array로 2차원, 3차원으로 확장이 가능하다. 또한 각각의 원소마다 Array의 크기를 달리할 수 있다.

int[][] intArr = new int[5][];

for(int i=0; i<intArr.length; i++) {
    intArr[i] = new int[i*2];
}

 

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

Computer Language - OOP (2)  (0) 2023.09.15
Computer Language - OOP (1)  (0) 2023.05.01
Computer Language - Condition & Loop  (2) 2023.04.30
Computer Language - Basic Operators  (2) 2023.03.22
Computer Language - I/O System  (0) 2023.03.22
Comments