배열 (Array)

Lee Yong Seok·2022년 4월 24일
0
post-thumbnail
post-custom-banner

배열 (Array)

· 번호(인덱스)와 번호에 대응하는 데이터들로 이루어진 자료 구조를 나타낸다.
· 일반적으로 배열에는 같은 종류의 데이터들이 순차적으로 저장되어, 
  값의 번호가 곧 배열의 시작점으로부터 값이 저장되어 있는 상대적인 위치가 된다.
· 자바에서는 배열의 길이를 구하기 위해서 length 속성을 사용한다.

[문법]

배열 선언 및 생성
자료형[] 배열이름 = new 자료형 [배열길이];

new : 객체, 즉 인스턴스를 생성할 때 사용한다.

배열 초기화
자료형[] 배열이름 = { 배열요소 1, 배열요소 2, ... }

[배열 예제1] 배열 선언 및 생성

1. stack 영역에 scores의 배열의 메모리 시작주소가 저장되고, heap 영역에 할당된 배열의 주소를 참조한다.
2. 배열에 초기값을 주지않고 생성만하면 int형 데이터 '0'으로 초기화된다.
3. heap 영역의 할당된 메모리는 인덱스가 0부터 시작한다.
4. 배열안에 있는 데이터는 각 인덱스로 접근할 수 있고, 각 데이터는 '요소'라고 부른다.

[배열 예제2] 배열 요소 출력해보자.

1. 위 그림과 같이 배열을 int형 1차원배열로 선언 및 생성을 한다.
2. 1차원배열 변수 scores는 힙 영역 어딘가에 저장되어있는 1차원 배열을 가리킨다.
   (즉, 1차원배열 공간 5개가 할당된 주소를 알고있다.)
3. 배열은 인덱스(번호)를 통해 요소에 접근한다.
4. 인덱스로 접근한 요소를 printf 형식으로 출력한다.

[배열 예제3] 반복문 for 문으로 배열 요소를 출력해보자.

1. 위 그림에서 배워야하는것은 똑같은 코드를 여러개 작성하는것보다 반복문을 이용해라.
2. 배열은 length라는 속성을 가지고있기때문에 속성을 이용하여 for 문의 조건식을 작성해라.

[배열 예제4] 배열 요소에 값 할당해보자.

1. 배열 요소 값을 초기화하지 않고 처음 선언 및 생성만 하면 배열이 int형 자료형일 때, 숫자 0으로 초기화된다.
2. 배열 요소는 인덱스로 접근해야한다.
3. 인덱스로 접근하여 대입연산자를 통해 값을 초기화한다.
4. 반복문으로 배열 요소 값을 출력한다.

[배열 예제5] 배열 선언 및 생성과 동시에 초기화를 해보자.

1. 배열 초기화는 여는 브레이스({)와 닫는 브레이스(})안에 값을 할당하면 배열 선언 및 생성과 동시에 의미있는 값을 
   부여할 수 있다.
2. 배열 선언 및 생성만 했다면 숫자 0이라는 의미없는 값으로 초기화되었겠지만, 위와같이 생성할 때부터 값을 초기화
   한다면 의미있는 값으로 바로 배열을 생성할 수 있다.
   

[배열 예제6] 5명의 학생의 점수 총점 및 평균을 구해보자.

1. int형 1차원배열 변수 scores의 배열 요소를 초기화한다.
2. 값이 잘 초기화되었는지 for 문을 통해 출력해본다.
3. 총점은 int형 변수 total에 저장하기 위해 0으로 초기화한다.
4. for 문을 사용하여 5명의 점수를 배열의 길이(length)만큼 수행하여 총점 변수인 total에 누적(+=) 한다.
5. 평균을 나타내는 double형 변수 average에 총점 변수를 배열의 길이인(scores.length = 5)로 나눈다.
6. 총점을 배열의 길이로 나눈 연산 결과값은 int형으로 나오기때문에 정확한 값을 저장하기 위해 강제형변환을 한다.
7. printf 형식을 이용하여 소수점 첫째자리까지 평균을 출력한다.
   

for each 문 (Enhanced for 문)

1. for each 문은 배열의 특성을 겨냥하여 일반 for 문을 사용하는 것보다 더 편하다.
   (배열의 특성 1. 배열은 길이가 있다(length), 2. 배열은 순차적으로 저장된다)
2. for each 문은 배열의 길이 만큼 반복문을 수행하는데 반복을 할 때마다 배열 요소를 순차적으로 가져와 변수에 
   대입한다.

[for each 문 예제1] 배열을 선언 및 생성과 동시에 초기화를 하여 for each문을 사용하여 배열 요소를 출력해보자.

1. int형 1차원배열 변수 scores를 배열 선언 및 생성과 동시에 의미있는 값으로 초기화한다.
2. for each 문을 이용한다.
3. 참조할 변수 이름은 scores이고, scores는 heap 영역에 할당된 배열 요소 값을 가지고 있는 주소 값을 가지고 있다.
4. temp라는 임시 변수에 배열 요소 값을 순차적으로 불러와 출력문을 실행한다.

[for each 문 예제2] 이번에는 예제1번과 다른 자료형인 String 클래스를 이용하여 1차원배열에 있는 배열 요소를 출력해보자.

1. String 클래스형 변수 names에 의미있는 문자열 값으로 초기화한다.
2. for each 문을 이용하는데, 이번엔 names에 요소들은 문자열이기때문에 그걸 전달 받을 임시 변수 temp도 String 
   클래스여야한다.
3. printf 형식으로 임시 변수 temp를 출력하면 순차적으로 전달된 배열 요소가 출력된다.

다차원 배열 (Multi-dimensional Arrays)

· 제목은 다차원 배열이지만 우리는 자바에서 2차원 배열까지만 일단 정리하려한다.

[2차원 배열 예제1] 2차원 배열 선언 및 생성을 하고 배열에 접근해보자.

1. int형 2차원배열 변수 scores에 3행 5열 2차원배열을 생성한다.
2. 2차원 배열에 대한 주소를 확인하는 printf 형식을 사용하여 출력한다.
3. 2차원 배열의 주소를 확인했으면, 배열의 인덱스(번호)로 1차원 배열에 접근한다.
4. 각 인덱스(번호)에 해당하는 1차원 배열의 주소를 확인한다.

[2차원 배열 예제2] 배열 요소 값을 초기화하여 2차원 배열 요소를 출력해보자.

1. int형 2차원배열 변수 scores에 3행 5열의 2차원 배열을 선언 및 생성한다.
2. 2차원 배열 요소 값을 각 인덱스(번호)로 접근하여 초기화한다.
3. 2차원 배열 요소 값은 이중 for 문을 이용하여 출력한다.
4. 보기 쉽게 printf 형식을 이용하고 이스케이프 시퀀스인 \t(탭)을 이용하여 출력한다.

[2차원 배열 예제3] 2차원 배열 선언 및 생성시 의미있는 값으로 초기화하여 이중 for 문을 이용하여 출력해보자.

1. 2차원 배열은 초기화할 때 1차원 배열을 감싸는 여는 브레이스({)와 닫는 브레이스(})를 생성하고 수학에서 배웠던 
   행열을 생각하여 {{},{},{}}; 이런식으로 초기화한다.
2. 이중 for 문을 이용하여 printf 형식으로 출력한다.(배열 요소는 각 인덱스(번호)로 접근한다.)

[2차원 배열 예제4] for each 문을 이용하여 2차원 배열 요소를 출력해보자.

· step1 - 2차원 배열은 각 행의 첫번째 주소로 접근하여 int[] 변수 temp1에 순차적으로 주소를 전달한다.

· step2 - 각 행의 첫번째 주소를 통해 1차원 배열에 접근할 수 있기때문에 배열 요소를 받아줄 수 있는 int형 변수 
  temp2에 순차적으로 전달한다.
· int형 변수 temp2에 전달된 2차원 배열 요소를 순차적으로 출력한다.

[2차원 배열 예제5] 2차원 배열 선인 및 생성할 때 행의 값만 정하고 열의 값은 정하지 않았을 경우 배열 요소는 null로 초기화된다.

1. int형 2차원배열 변수 arr은 배열 선인 및 생성할 때 행의 값만 4를 주고 생성해본다.
2. printf 형식으로 2차원 배열 변수 arr을 출력한다.(2차원 배열 arr이 가리키는 주소를 확인한다.)
3. for 문을 이용하여 2차원 배열 요소를 출력해본다.(요소는 null로 나온다. 이유는 배열은 참조형 타입이기때문이다.
   위 그림의 경우 메모리 공간이 아직 할당되기전이라고 생각하면 된다.)
** 참조형 타입에는 클래스, 배열, 인터페이스, 열거형(Enum)이 있다.

[2차원 배열 예제6] 2차원 배열에 각 인덱스(번호)로 접근하여 1차원 배열을 생성해보자.(가변적으로 메모리를 할당할 수 있다는 것을 보여준다.)

1. int형 2차원 배열 변수 arr에 각 행은 예제5에서 생성했던 것을 이어서 설명하겠다.
2. 배열 생성 및 선언을 하고 1차원 배열을 생성했던거와 같이 나머지 배열의 길이를 생성한다.
3. 이중 for 문을 이용하여 메모리 공간에 가변적으로 만들어진 2차원 배열 요소를 출력한다.

4. for each 문을 이용하여 2차원 배열에 주소로 접근하여 각 1차원 배열 요소를 가져와 출력한다.

5. 현재 2차원 배열 변수 arr은 값이 0으로 초기화되어있기때문에 의미있는 값으로 초기화해보자.
6. 초기화한 2차원 배열 요소를 출력해보자.

7. 2차원 배열의 각 행만 생성하고 각 인덱스(번호)로 1차원 배열을 생성하면서 바로 의미있는 값으로 초기화할 수 있다.

[2차원 배열 예제7] 학생은 3명이고, 과목은 5과목이고, 각 과목의 점수와 총점 및 평균을 구해보자.

1. int형 2차원 배열 변수 scores에 학생 3명의 5과목 점수를 배열 요소로 초기화한다.
2. 이중 for 문을 이용하는데 바깥 for 문과 안쪽 for 문 사이에 각 학생별 총점을 구하고 리셋되도록 int형 변수 
   total을 0을 초기화한다.
3. 각 학생의 총점을 출력하고, 평균은 소수점 2번째자리까지 보이도록 출력한다.
profile
Today I Learned 🌙
post-custom-banner

0개의 댓글