[kr-dev] 객체의 기초. 배열(Array) - Java(8)

in kr-dev •  7 years ago 

[kr-dev] 객체의 기초. 배열(Array) - Java(8)

오늘은 객체지향의 입문 단계라고 할 수 있는
'배열(Array)'에 대해서 다뤄보도록 하겠습니다.

배열이란 무엇일까요?

1111.png

배열은 다음 설명과 같습니다.
같은 타입의 여러 변수를
하나의 묶음으로 다루는 것으로
많은 양의 값을 다룰 때 유용합니다.

2222.png

바로 예시를 준비해보았습니다.

배열은 변수와 다르게
선언만해서는 사용할 수 없습니다.

이는 나중에 나올 객체에서도 비슷한
이야기이지만

배열을 선언, 생성해야만
사용이 가능합니다.

생성이 되지 않고 선언만 된 객체는
GC(가비지 컬렉터, 메모리 관리용)가
정리를 한다고 하는데
틀린 내용일수도 있으니 틀리면 말씀해주세요.

new 연산자가 배열 혹은 객체를
생성(호출)하는 명령어 입니다.

3333.png

물론 앞에서 다룬 변수처럼
선언, 생성, 초기화가 동시에도 가능합니다.

위의 그림을 보시면 향상된 for문이라는게 있는데요
for-each문이라고도 합니다.

배열에 특화되어있는 for문으로
그 명령어가 매우 간단하며
배열의 모든 값을 사용할 수 있다는
장점이 있습니다 :)

4444.png

다른 예시를 준비해보았습니다.

배열은 참조형 데이터로
데이터 값이 아닌 데이터의 주소값
들어가게됩니다.

따라서 올바른 참조형에
올바른 주소값이 들어갔는지 확인할 필요가 있습니다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

짱짱맨 호출로 왔습니다!
한주 수고하세요

new 로 생성된 객체는 Heap 영역에 동적으로 생성됩니다. Heap 영역은 GC 대상입니다.
생성이 되지 않고 선언만 된 것은 아래와 같은 의미라고 이해합니다.

int [] bb;

이러한 경우 bb 는 배열(객체) 레퍼런스를 담는 변수이며, bb 자체는 함수 스택영역에 생성되며 아직은 GC 와는 상관이 없습니다.
주소값이라고 이해를 해도 무방하지만 엄밀히 이야기하면 레퍼런스입니다.
자바는 C 처럼 주소값이라는 개념이 없습니다.
new 를 하기 전에 bb 에 들어있는 레퍼런스 값은 아무 의미가 없는 값입니다. (가비지 값)

헉 피드백 감사합니다 😁
저도 강의를 보고 배우는 입장인데
강의에서는 주소값이 담긴다고 하더라구요
강사님이 그냥 이해를 쉽게 돕기위해 그랬을까요?...

자바에서 for 문은 두가지입니다.

for (int i =0; i < 100; i++) ...

절차형 언어의 루프 구조를 따르고 있으며 익숙한 스타일입니다.

for (int i : bb) ...

함수형 언어를 따라한 것 같기는 한데... 단점은 index 를 쓸 수가 없다는 점입니다.

자바에서 for 문을 쓰는 경우 두번째 것으로 시작했다가 index 가 필요해서 첫번째 형태로 가는 경우가 많더라고요...

아 맞아요! ㅎ 인덱스를 이용할 경우에는
첫번째 절차형이 더 용이하더라구요
하지만 강의에서는 배열의 처음부터 끝까지
출력하다보니 향상된 포문을 많이
쓰더라구요 ㅎ

참고로 Python 에서는 아래와 같은 코드가 가능합니다.

list = [1,2,3]
for (e, i) in enumerate(list):
     print(e,i)

Java 8 부터 Iterable 에 대한 forEach 가 제공되니 참고하세요...