for문에 이름을 지정할 수 있음 → break로 for문을 지정할 수 있음!
switch도 지정할 수 있음!
이건 자바만 가능함. 다른 언어들은 flag 값을 지정해야 하는데...
컴퓨터는 변수를 '변수의 시작 주소'로 구분한다.
(실제 메모리에 있는 주소를 의미함)
자바에서는 포인터의 개념이 없는 이유 ?
실제 주소를 개발자는 알 수 없다.
메모리의 주소값을 개발자에게 제공하지 않고, 개발자는 가상의 주소에 매핑된 해시값으로 데이터에 접근을 한다.
(그러므로 자바가 느려질 수 밖에 없다)
시작 주소값만 기억하고 자료형의 사이즈 만큼 데이터를 인식하기 때문에 동일한 자료형의 데이터가 저장된
나머지 배열에 저장된 값을 알 수 있다. (시작 주소의 값만 알고 있다면 ... )
키워드 → (연속적인 공간, 같은 자료형, 변수 집합)
자바에서는 2차원배열을 잘 사용하지 않고, 1차원배열의 객체 배열 형태로 만들어줌.
스택, 힙 - 변수명의 존재 유무로 구분
힙은 변수명을 기억하고 있지 않기 때문에 스택에 heap의 변수명을 저장한다.
new 키워드로 만든 공간은 모두 힙에 저장된다 → new 키워드로 만든 것을 통합하여 객체라고 부른다.
그러므로 배열은 힙에 만들어짐.
힙은 변수명이 존재하지 않는다. 주소값을 모른다! 주소를 저장할 수 있는 변수가 스택에 필요!!
int [] prime ( 이 방식이 스택에 힙의 변수명을 기억하는 작성 방식 ) -> 프라임은 배열의 값을 가지고 있지 않고
주소만 가지고 있음.
stack int [] prime ← 여기까지는 배열이 만들어진 것이 아니다.
heap / / / / / / / / ← 주소공간
int [] ar;
ar = new int[3];
ar[0], ar[1], ar[2] .. 와 같이 표현한다.
ar[0] = 100, ar[1] = 30, ar[2] =5;
ar = 200 이렇게 하면 그냥 연결이 끊어짐.
0x50 이 가리키고 있던 사이즈 3인 배열은 메모리 손실이 발생한다.
컴퓨터는 이 메모리를 사용하고 있다고 간주하기 때문이다.
그런데 자바에서는 가비지 커렉터가 이 메모리를 관리해준다. 우리가 별도로 할 필요가 없다.
스택의 변수 값들은 쓰레기 값을 가지고 있으나,
힙 영역에 new 키워드로 정의한 값들은 모두 0으로 초기화가 된다.
스택에 저장된 변수 ar은 쓰레기 값을 가지고 있는 반면
힙에 저장된 ar[0], ar[1], ar[2] 은 초기화가 없어도 0으로 초기화
@표시는 거의다 주소값을 의미함
int[] prime = new int[6];
prime.length 라고 하면 할 수 있음. (길이를 알 수 있음)
// prime2 배열을 크기를 고정하지 않고 선언, 초기화할 때는 [] 내부에 쓰지 않음
int [] prime3 = {1,2,3,4,5,6,7}; // 이렇게도 ok
일반적으로 이러한 형식을 자주 사용한다.
d
aptInfoList가 스택에 있음
aptInfoList[3][] 로 선언할 경우
aptInfoList[0] = new int[2]
aptInfoList[1] = new int[2]
aptInfoList[2] = new int[2]
와 같음
'자바 프로그래밍' 카테고리의 다른 글
[JAVA] 객체 배열 사용하기 (0) | 2019.05.16 |
---|---|
[JAVA] OOP 클래스 만들기 (0) | 2019.05.15 |
[JAVA] 나비 모양 그리기 (0) | 2019.05.15 |
[JAVA] 조건문/반복문 (0) | 2019.05.13 |
[JAVA] 자바 기초 (식별자, 자료형, 연산자) (0) | 2019.05.13 |