관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch5 - 1 ~ 5 [배열, 배열의 인덱스,배열의길이,배열의초기화] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch5 - 1 ~ 5 [배열, 배열의 인덱스,배열의길이,배열의초기화]

소소한나구리 2023. 11. 8. 16:17

1) 배열

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것으로 많은 양의 값(데이터)를 다룰 때 유용함
  • 변수는 저장공간이 각각 독립적이지만 배열은 연속적
  • 0부터 연속적으로 자동으로 번호가 붙음 저장됨 - 인덱스 생성

 

(1) 배열의 선언과 생성

  • 배열을 다루기 위한 참조변수를 선언
  • 둘다 가능하지만 java스타일 사용을 권장
    • Java 스타일
      • 타입 [ ]  변수이름
      • int [ ] score; -> 배열기호가 타입의 일부로 본다 
    • C언어 스타일
      • 타입 변수이름 [ ]
      • int score[ ];
    • 타입 [  ] 변수이름; -> 배열을 선언 (배열을 다루기 위한 참조변수 선언)
    • 변수이름 = new 타입[길이]; (배열을 생성 - 실제 저장공간을 생성)
      • int[ ] score;. -> int타입의 배열을 다루기 위한 참조변수 score선언
      • socre = new int [5]; ->  int타입의 값 5개를 저장할 수 있는 배열 생성

(2) 배열의 인덱스

  • 각 요소(저장공간)에 자동으로 붙은 일련번호
  • 인덱스(index)의 범위는 0 부터 배열길이 -1 까지

(3) 연습

public class ex5_intro {

	public static void main(String[] args) {
		int[] score;		// 1. 배열 score를 선언(참조변수)
		score = new int[5];	// 2. 배열의 생성(int저장공간 x 5)

		int[] scroe = new int[5];	// 배열의 선언과 생성을 동시에

		score[3] = 100;

		System.out.println("score[0] = "+score[0]);
		System.out.println("score[1] = "+score[1]);
		System.out.println("score[2] = "+score[2]);
		System.out.println("score[3] = "+score[3]);
		System.out.println("score[4] = "+score[4]);

		int value = score[3];
		System.out.println("value = "+value);
		
	}

}

score[0] = 0
score[1] = 0
score[2] = 0
score[3] = 100
score[4] = 0
value = 100

2) 배열의 길이

  • 배열변수이름.length : 배열의 길이(int형 상수)
int[] arr = new int[5]; // 참조변수가 arr이고 길이가 5인 int배열
int tmp = arr.length;   // arr.length의 값은 5(배열의 길이) -> tmp에 5가 저장됨
  • 배열은 한번 생성하면 '실행하는 동안'에 그 길이를 바꿀 수 없음 - 실행전, 실행이 끝나고 수정
  • 이유는 메모리의 저장 특성 때문 -> 배열을 메모리에 저장시 연속적으로 저장해야 하는데, 메모리의 빈 공간이 연속적으로 있다는 보장이 없기 때문
  • 배열의 길이보다 더 많은 양의 데이터가 필요하게되어 더큰 크기의 새로운 배열을 생성하면 JVM이 메모리의 다른 공간에 새로운 배열크기로 요청된 공간만큼 연속된 메모리를 할당하고 기존과 동일한 코드가 실행되면 기존데이터를 복사함
  • 배열의 길이를 굳이 사용하는 이유는 수정을 용이하게 하게 하고 오류 발생을 줄이기 위함임

(1) .length 사용 예제

  • 아래의 코드 이미지 처럼 for문의 조건식을 i < 6으로 하드코딩하게 되면 배열의 길이가 줄어들었을 경우 에러가 발생할 수 있음
  • score.length로 for문의 조건식에 배열의 길이를 입력하면 배열의 길이를 계속 변경하여도 애플리케이션을 실행 시 에러가 발생하지 않음

 

(2) 실습

int[] arr = new int[9]; // 길이가 9인 int배열 arr생성
System.out.println("arr.length="+arr.length);
			
//  for(int i=0; i<10; i++) // index 범위가 벗어나서 에러 발생
    for(int i=0; i<arr.length; i++) // 조건식을 인덱스길이로 설정하여 배열을 수정하여도 에러가 안남
        System.out.println("arr["+i+"]="+arr[i]);

3) 배열의 초기화

  • 배열의 각 요소에 처음으로 값을 저장하는 것, 값을 저장하는 행위를 초기화 라고함

(1) 배열 타입별 초기화 기본값

  • 배열은 각 타입의 기본값으로 자동으로 초기화가 됨
  • boolean - false
  • char - '\u0000', null 문자를 나타내며 출력시 보이지 않음
  • byte, short, int - 0
  • long - 0L
  • float - 0.0f
  • double - 0.0d or 0.0
  • 참조형 - null

(2) 예시

  • 만약 배열의 값이 규칙이 있는 경우 반복문으로 값을 초기화 할 수 있음
  • 배열의 값에 규칙이 없는경우 { }를 활용하여 직접 값을 초기화 할 수 있으며, 배열 변수를 선언과 동시에 값을 초기할 수 있음
int[] score = new int[5];	// 길이가 5인 int형 배열을 생성
score[0] = 50;			// 각 요소에 직접 값을 저장
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;

위 처럼 규칙이 있는 경우 반복문으로 생성 가능
for(int i = 0; i < score.length; i++)
	score[i] = i * 10 + 50;
    
규칙이 불규칙할 경우
1번 - int[] score = new int[]{50,60,70,80,90};
2번 - int[] score = {50,60,70,80,90};	//new int[] 생략 가능 - 훨씬 많이 씀

단,아래처럼 두문장으로 선언과 초기화를 나눠야 할 경우가 발생하면 1번으로 해야함(드물게 발생)
int[] score;
score = new int[]{50,60,70,80,90};

 

 

 

** 출처 : 남궁성의 정석코딩_자바의정석_기초편 유튜브 강의