본문 바로가기
JAVA

배열과 향상된 for문

by winteringg 2022. 8. 23.

1. 배열(Array)
1) 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것.
2) 동일한 자료형의 순차적 자료 구조(Data Structure)
3) 인덱스 연산자[]를 이용하여 빠른 참조가 가능
  - 인덱스 : 각 요소에 자동으로 붙는 일련 번호
  - 인덱스의 범위는 0부터 시작하기 때문에 끝은 '배열길이-1' 까지임. ex)배열 길이가 5면, [0,1,2,3,4]
4) 물리적 위치와 논리적 위치 동일
5) 배열의 순서는 1부터가 아닌 0부터 시작
6) 배열은 한번 생성하고 컴파일되면 그 길이를 바꿀 수 없음. 더 많은 저장공간들이 필요하다면, 보다 큰 배열을 새로 만들고 이전 배열로부터 항목값들을 복사해야 함.
7) 필요성 : 중복된 변수 선언을 줄이기 위해, 반복문을 이용해서 요소들을 쉽게 처리하기 위해.

배열 선언시 인덱스 구조

2. (1차원) 배열 선언과 생성
1) 배열 선언 : 배열을 다루기 위한 참조변수의 선언

배열 선언과 생성

3. 배열 길이와 초기화
1) 배열이름.length - 배열의 길이 (int형 상수)
  - int[] arr = new int[5];     //길이가 5인 int 배열
  - int tmp = arr.length;      //arr.length 의 값은 5이고 tmp에 5가 저장 됨.
2) 배열의 초기화
  - 배열의 각 요소에 처음으로 값을 저장하는 것.
  - 배열은 선언과 동시에 자료형에 따라 자동으로 초기화 됨. (정수는 0, 실수는 0.0, 객체는 null)
  - 하지만 필요에 따라 초기값을 지정할 수 있음.

3) 배열의 출력

int[] score = {50, 60, 70, 80, 90};
	System.out.println(score);

=> 배열을 초기화하여 값을 저장하고 그것을 출력할 경우 저장된 값이 출력되는 것이 아닌, 배열의 주소값이 출력 됨. ([@14318bb 와 같은)

//for문을 이용하여 저장된 값을 출력
for(int i=0; i<score.length; i++) {
	System.out.println(score[i]);
    
/*
* Arrays.toString() 메소드를 이용하여 저장된 값을 출력
* -> 배열의 내용을 문자열로 반환해 주는 역할.
*/
int[] score = {50, 60, 70, 80, 90};
	System.out.println(Arrays.toString(score));

  => 따라서 저장된 문자열의 값을 출력하고 싶을 경우 for문을 이용하여 출력하거나 Arrays.toString() 메소드를 이용해야 함.

char[] ch = {'a', 'b', 'c', 'd'};
	System.out.println(ch);

 

  => 하지만 예외로 문자형은 저장한 값을 그대로 반환하여 'abcd'를 출력할 수 있음.


4. String배열의 선언과 생성
1) String[] name = new Stirng[3];
   String[] name = {"Kim", "Park", "Lee"};
  - 3개의 문자열을 담을 수 있는 배열을 생성함.
2) String 배열과 Math.random() 메서드를 활용한 가위바위보 랜덤 게임 구현하기

import java.util.Arrays;

public class Exam1 {

	public static void main(String[] args) {
		String[] sArr = {"가위", "바위", "보"};
			          //0      1      2
		for(int i=0; i<10; i++) {
			int tmp = (int)(Math.random()*3);
			System.out.print(sArr[tmp]+" ");
		}
	}
}

랜덤으로 출력된 화면

보 바위 가위 보 보 바위 바위 보 보 바위 
가위 보 보 가위 가위 보 가위 바위 보 가위
가위 바위 보 가위 가위 보 가위 보 가위 보


5. 2차원 배열(다차원 배열) 선언과 초기화

1) 2차원 배열 : 테이블 형태의 데이터를 저장하기 위한 배열
2) 3차원 배열 : 2차원 테이블 형태의 데이터가 여러개 모인 배열
3) 선언 방법
          - int[][] score = new int[4][3];
          => 4행 3열의 2차원 배열 생성

4행 3열의 2차원 score 배열 생성된 모습

    4) 2차원 배열 초기화

//1번 방법
int[][] arr = new int[][] {{1,2,3}, {4,5,6}};

//2번 방법 (1차원 배열과 마찬가지로 new int[][] 는 생략 가능)
int[][] arr = {{1,2,3}, {4,5,6}};

//3번 방법 (한 눈에 행과 열이 다 보여서 가장 많이 쓰임)
int[][] arr = {
		{1, 2, 3},
                {4, 5, 6}
};

 

6. 객체를 참조하는 배열
1) 기본 타입 (byte, char, short, int, long, float, double, boolean) 배열
  - 각 항목에 직접 값을 가지고 있음. (index에 1 이라는 값을 저장하면 heap 메모리에는 그 값이 그대로 저장됨)
2) 참조 타입 (클래스, 인터페이스) 배열
  - 각 항목에 객체의 번지를 가지고 있음. 예를 들어 "자바" 라는 문자열 값을 String 인덱스에 저장한다고 해도, 문자열 값 그대로 들어가는 것이 아닌 메모리에 저장된 주소 번지 값이 출력됨.

7. 향상된 for문
1) 조건
  - JDK 1.5 이상이어야 함.
  - 사용할 변수는 for문 안에서 사용되기 때문에 지역변수로 인식됨.
  - 배열 변수만 사용 가능함.

2) 사용 이유
  - 배열처럼 여러 원소로 이루어진 집합의 모든 원소에 대해 특정 작업을 반복하기 위해 사용.
 
  3) 특징
  - 간편하고 가독성 좋은 코드.
  - 배열 인덱스 예외 문제 해결 
  - 배열이나 ArrayList 값을 사용할 수는 있지만 값을 직접 수정할 수는 없음.

4) 선언 방법
      for(배열값을 담을 변수 : 변수 배열) {
          반복 영역;
      }

//기존 for문 방법 1
for(int i=1; i<11; i++)
	System.out.print(" " + i); //출력 화면 -> 1 2 3 4 5 6 7 8 9 10
    
//기존 for문 방법 2
int[] arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(int i=0; i<arr1.length; i++)
	System.out.print(" "+arr1[i]); //출력 화면 -> 1 2 3 4 5 6 7 8 9 10
    
//향상된 for문 (배열 변수만 사용 가능)
int arr2[] = {1,2,3,4,5,6,7,8,9,10};
for(int i : arr2)
	System.out.print(" " + i); //출력 화면 -> 1 2 3 4 5 6 7 8 9 10




 

 

참고 : [한빛미디어] 이것이 자바다 (신용권의 Java 프로그래밍 정복) Chapter 5.배열
참고 : [도우출판] JAVA의 정석(3ND EDITION)-자바의 정석 최신 Java 8.0 포함 Chapter 5.배열

향상된 for문 참고 : https://java119.tistory.com/107

'JAVA' 카테고리의 다른 글

메서드  (0) 2022.08.28
switch-case 조건문  (0) 2022.08.28
반복문 (Loop)  (0) 2022.08.22
if 조건문  (0) 2022.08.20
Scanner 클래스  (0) 2022.08.20

댓글