본문 바로가기

카테고리 없음

참조 타입 1번째

  • 메소드(Method)

Method 정의 및 관련 용어

 

  • Method 사용 Flow(흐름도)

 

- Activation Record (Activation Framework)

  • method를 호출할 때 마다 JVM이 메모리에서 stack 영역에 생성하는 정보 (메소드에서 선언한 변수 전체 정보)
  • Stack 영역을 call stack, execution stack, runtime stack, machine stack 등으로 부름
  • Stack 의미 : LIFO(Last In First Out)
  • 1) 나중에 입력된 것을 맨 처음으로 읽음(삭제)
  • 2) Method내 선언된 변수들 중 마지막에 선언된 변수가 stack 상단에 위치

 

- JVM S/W 실행순서

  1. JVM SW가 메인 메모리에 올라감
  2. JVM이 실행할 class files들을 기계어로 번역 후 메모리에 올림
  3. CPU가 기계어로 된 응용 프로그램 1 line씩 실행

JVM이 사용하는 메모리 영역

 

- JVM이 사용하는 메모리 영역 상세

  • OS에서 할당 받은 메모리 영역(Runtime Data Area)을 세 영역으로 구분

 

- 참조 타입 객체 stack-heap 관계

 

- 변수의 메모리 사용

  • 기본 타입 변수 - 실제 값을 변수 안에 저장
  • 참조 타입 변수 - 주소를 통해 객체 참조
// 기본 타입 변수
int age =25;
double price = 100.5;

// 참조 타입 변수
String name = "신용권";
String hobby = "독서";

 

 

- Program Code, Stack, Heap 관계 예시

 

- JVM이 사용하는 메모리 영역

◎ 메소드 영역(Static 영역, 클래스 영역)

  • 클래스(메소드와 코드)들이 Load되는 영역
  • 클래스에 선언된 import 구문에 작성된 패키지의 클래스들이 Load되고 사용자가 작성한 클래스도 Load되고 강제로 클래스를 로드 가능
  • 클래스는 Load 되면 프로그램이 종료될 때까지 소멸되지 않음
  • 문자열 상수도 이 영역에 저장됨

 자바 Stack

  • method를 호출하면 method 수행에 필요한 것들을 저장하는 영역
  • 가장 최근에 호출된 method의 프레임이 가장 위에 존재하고 이 프레임이 활성 Stack 프레임이라고
  • method의 수행이 종료되면 자동적으로 소멸

 Heap

  • new라는 예약어를 이용하여 동적으로 할당 받는 객체들의 영역
  • Garbage Collection이 자율적으로 객체의 메모리 해제(삭제)를 관리

- 참조 변수의 ==, != 연산

◎ 변수의 값이 같은지 다른지 비교

  • 기본 타입 : byte, char, short, int, long, float, double, boolean
  • 의미 : 변수의 값이 같은지 다른지 조사
  • 참조 타입 : 배열, 열거, 클래스, 인터페이스
  • 의미 : 동일한 객체를 참조하는지 다른 객체를 참조하는지 조사

refVar1 == refVar2      // 결과 : false
refVar1 != refVar2      // 결과 : true

refVar2 == refVar3      // 결과 : true
refVar2 != refVar3      // 결과 : false

if(refVar2 == refVar3) {...}

 

- null과 NullPointerException

◎ null(널)

  • 변수가 참조하는 객체가 없을 경우 초기값으로 사용 가능
  • 참조 타입의 변수에만 저장 가능
  • null로 초기화된 참조 변수는 스택 영역 생성

  • ==, != 연산 가능
// 위 그림에서 reVar1은 힙 영역의 객체를 참조하므로 연산의 결가는 다음과 같다.

refVar1 == null        // 결과 : false
refVar1 != null        // 결과 : true


// refVar2는 null값을 가지므로 연산의 결과는 다음과 같다.

refVar2 == null       // 결과 : true
refVar2 != null       // 결과 : false

 

◎ NullPointerException의 의미

 

- 예외 (Exception)

  • 사용자의 잘못된 조작이나 잘못된 코딩으로 인해 발생하는 프로그램 오류

- NullPointerException

  • 참조 변수가 null 값을 가지고 있을 때
  • 객체의 필드나 메소드를 사용하려고 했을 때 발생
int[] intArray = null;
intArray[0] = 10;                 // NullPointerException

String str = null;
System.out.println("총 문자수:" + str.length());    // NullPointerException

 

◎ String 타입

  • 문자열을 저장하는 클래스 타입

 

  •  문자열 리터럴 동일하다면 String 객체 공유

 

  • new 연산자를 이용한 String 객체 생성
  •  - 힙 영역에 새로운 String 객체 생성
  •  - String 객체를 생성한 후 번지 리턴

String name1 = new String("신용권");
String name2 = new String("신용권");

 



오늘은 참조타입에서 메소드, Stack, heap, null과 NullPointerException, String 타입에 대해서 공부를 해보았습니다. 다음 시간에는 참조타입의 뒷 내용인 배열 타입과 열거 타입에 대해서 공부를 해보겠습니다.

반응형