데이터 타입 분류
  • 자바의 데이터 타입
    • 기본 타입(primitive type) : 정수, 실수, 문자, 논리 리터럴을 저장하는 타입. 
    • 참조 타입(reference type) : 객체(object)의 번지를 참조하는 타입. 
      • 배열, 열거, 클래스, 인터페이스 타입

[데이터 타입의 종류]
[기본 타입과 참조 타입 변수]

// 기본 타입 변수
int age = 25;
double price = 100.5;

// 참조 타입 변수
String name = "신용권";
String hobby = "독서";
  • 변수는 스택 영역에 생성되고 객체는 힙 영역에 생성된다.
  • String 클래스 변수는 name과 hobby에 대한 힙 영역 주소 값(100, 200)을 가지고 있다. 

[변수의 스택 영역과 객체의 힙 영역]

 

메모리 사용 영역

[메모리 사용 세부 영역]

  • 메소드(Method) 영역
    • 코드에서 사용되는 클래스들을 클래스 로더로 런타임 상수풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드 등을 분류해서 저장한다. 
    • JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역
  • 힙 영역(Heap) 영역
    • 객체와 배열이 생성되는 영역
    • JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다.
    • 참조하는 변수나 필드가 없으면 JVM은 Garbage Collector를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거한다.
  • JVM 스택(stack) 영역
    • 각 스레드마다 하나씩 존재하고, 스레드가 시작될 때 할당된다.
    • JVM 스택은 메소드를 호출할 때마다 프레임(Frame) 추가(push)하고, 메소드가 종료되면 해당 프레임 제거(pop)
    • 프레임 내부의 로컬 변수 스택은 기본 타입 변수와 참조 타입 변수가 추가(push) 되거나 제거(pop)된다. 변수가 생성되는 시점은 초기화가 될 때, 제거되는 시점은 블록을 벗어나는 경우이다. 

 

 참조 변수의 연산
  • 기본 타입 변수의 ==, != 연산은 변수의 값이 같은지 확인
  • 참조 타입 변수의 ==, != 연산은 동일한 객체를 참조하는지 확인

 

null 과 NullPointerException
  • 참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null 값을 가질 수 있다.
  • NullPointerException : 참조 타입 변수를 잘못 사용할 경우. null 을 가지고 있는 참조 타입 변수를 사용할 경우 발생.

 

배열 타입
  • 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스(index)를 부여해 놓은 자료구조
  • 인덱스는 0부터 시작
String[] names = {'a', 'b', 'c'};

names[0] -> a
names[1] -> b
names[2] -> c
  • new 연산자로 배열 생성
int[] intArray = new int[5];
  • 타입별 배열의 초기값

[타입별 배열의 초기값]

  • 배열의 길이 
int[] intArray = {10,20,30};
int num = intArray.length; //  배열의 길이

 

커맨드 라인 입력
  • "java 클래스"로 프로그램을 실행하면
  • JVM은 길이가 0인 String 배열을 먼저 생성하고 main() 메소드를 호출할 때 매개 값으로 전달한다.

[길이가 0인 String 배열]

  • "java 클래스 문자열0 문자열1 문자열2"으로 프로그램을 실행하면
  • 문자열 목록으로 구성된 String[] 배열이 생성되고 main() 메소드를 호출할 때 매개 값으로 전달된다.

[문자열 목록으로 구성된 String 배열]

  • Integer.parseInt() : 문자열은 산술 연산이 불가능 하기 때문에 메소드를 사용해서 정수로 변환시킨다.

 

다차원 배열
  • 1차원 배열과는 달리 행과 열로 구성된 배열을 2차원 배열이라고 한다.
int[][] scores = new int[2][3];

[2차원 배열의 메모리 구조]

배열 복사
  • System.arraycopy() 메소드 사용

 

열거 타입
  • 한정된 값만 갖는 데이터 타입
  • 몇 개의 열거 상수 중에서 하나의 상수를 저장하는 데이터 타입
  • 열거 타입 선언 
    • 열거 타입 이름을 정하고, 소스 파일(.java) 생성
    • 이름은 첫 문자를 대문자로 하고, 나머지를 소문자로 구성. 여러 단어로 구성된 경우 단어 첫 문자는 대문자로 구성.
    • public enum 열거타입이름 {...}
public enum Week {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, ...}
public enum LoginResult {LOGIN_SUCCESS, LOGIN_FAILED}

 

  • 열거 타입 변수
    • 열거타입 변수 = 열거타입.열거상수;
Week today = Week.SUNDAY;
Week birthday = null;

열거 객체의 메소드
  • name() : 열거 객체가 가지고 있는 문자열 리턴
  • ordinal() : 전체 열거 객체 중 몇 번째 열거 객체인지 알려준다.
  • compareTo() : 매개값으로 주어진 열거 객체를 기준으로 전후로 몇 번째 위치하는지 비교
  • valueOf() : 매개값으로 주어지는 문자열과 동일한 문자열을 가지는 열거 객체를 리턴
  • values() : 열거 타입의 모든 열거 객체들을 배열로 만들어 리턴

'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] 자바 메모리 구조 - Heap, Stack, JVM, GC  (0) 2022.06.23
Ch06. 클래스  (0) 2022.01.02
Ch04. 조건문과 반복문  (0) 2022.01.01
Ch03. 연산자  (0) 2022.01.01
Ch02. 변수와 타입  (0) 2022.01.01

+ Recent posts