변수

변수를 사용하는 이유는 프로그래밍에 의해서 값이 수시로 변하기 때문이다.
그렇기 때문에 우리는 변수에 일정 메모리를 할당하고 값을 저장한다.
자바에서는 변수를 선언하면 데이터타입에서 정한 크기의 메모리를 할당한다.

원시타입과 참조타입

개념

자바의 데이터타입은 원시타입(Primitive Type), 참조타입(Reference Type) 두가지로 나눠진다.
원시타입은 스택이라는 공간에 데이터를 넣는 걸 말한다.
당연하다고 말할 수 있지만 참조타입은 다르다.
참조타입은 스택이라는 공간에 주소를 할당하고 힙에다가 주소에 맞는 데이터를 넣어준다.

int age = 25;
String name = "최대환";

위의 두 예제는 얼핏 비슷하게 변수에 데이터를 넣는것 처럼보이지만

스택
int age = 2537번지 = "최대환"
String name = 37번지

이와 같이 저장하는 위치가 다르다.

스택영역

스택영역은 정적인 메모리이다.
스택 영역에는 기본타입의 변수가 할당되고 변수의 실제 값들이 저장되는데 원시타입 변수들은 크기가 정해져있다.

힙영역

힙영역은 동적인 메모리로 프로그램이 실행시에 메모리에 동적으로 할당한다.
동적이란말은 늘어났다 줄어들었다 할 수 있다는 말이다.
만약 참조하는 변수가 없으면 자바의 가비지 컬렉터가 제거한다.
가비지 컬렉터는 메모리의 힙 영역에서 할당된 더이상 사용하지 않는 객체를 제거하는 역할을 한다.

원시타입

원시타입 종류이다.

정수타입실수타입논리타입문자타입
byte/short/int/longfloat/doublebooleanchar

원조타입의 장점은 차지하는 메모리양이 적고, 접근속도가 빠르다.
웬만하면 성능과 메모리에 장점이 있는 원시타입을 고려해보고 만약 null이나 제네릭 타입을 사용해야한다면 참조타입을 사용하는게 맞다.

참조타입

참조타입은 원시타입을 제외한 나머지 모두를 말한다.
참조타입은 null과 제네릭 타입을 사용할 수 있다.

스택
name1 = 3번지3번지: 김찬영
name2 = null

이와 같이 null값을 설정해주면 힙영역의 객체를 참조하지 않겠다는 뜻이된다.

==과 equal()

==은 스택에 있는 실제 값끼리 비교하고 equal은 내용끼리 비교한다.

위 사진과 같이 String values are compared using '==', not 'equals()' 라는 말이 나온다.
현재 'equals()'이 아닌 '=='으로 비교되고 있다고 경고를 해주고 있는데 이는 name에는 실제 값인 "최대환"이 들어있는것이 아니라 그에 해당하는 주솟값이 들어있는데 주솟값과 실제 데이터를 비교해서 생기는 경고문이다.

NullPointException

null값을 가지고 있는 참조 타입 변수에 참조를 하려고하면 생기는 에러이다.

	public static void main(String[] args) {
		String str = null;
		System.out.println(str.length());

	}

에러메세지

Exception in thread "main" java.lang.NullPointerException

참조자료

profile
나의 개발지식 output 공간

0개의 댓글