카테고리 없음

참조 타입 2번째

달덩이>< 2022. 9. 20. 21:06

- 배열 타입

◎ 배열의 필요성

  • 학급 학생별 수학 성적을 관리하는 변수 생성 방법은??

 

◎ 배열이란?

  • 같은 타입의 데이터를 연속된 공간에서 저장하는 자료구조
  • 각 데이터 저장 위치는 인덱스 부여해 접근

 

◎ 배열의 장점

  • 중복된 변수 선언 줄이기 위해 사용
  • 반복문 이용해 요소들을 쉽게 처리

 

◎ 배열 선언

- 배열을 사용하기 위해 우선 배열 변수 선언

  • 타입 : 배열 원소의 데이터 타입 (모든 배열원소의 데이터 타입은 동일)

 

  • 배열 변수는 참조 변수 - 배열 생성되기 전 null로 초기화 가능
타입[] 변수 = null;
  • 배열 변수가 null 값을 가진 상태에서 항목에 접근 불가
  •  - 변수[인덱스]" 못함
  •     => NullPointerException 발생

◎ 값 목록으로 배열 생성하는 방법

  • 변수 선언과 동시에 값 목록 대입
데이터타입[] 변수 = {값0, 값1, 값2, 값3, ....};

  • 변수 선언 후 값 목록 대입
데이터타입[] 변수;
변수 = new 타입[] {값0, 값1, 값2, 값3, ...};

 

◎ 배열 초기화 후 메모리에 생성된 결과

int intArray[] = {4, 3, 2, 1, 0};
float floatArray[] = {0.01, 0.02, 0.03, 0.04};

 

◎ 배열 참조

  • 생성된 하나의 배열을 다수의 래퍼런스가 참조 가능

 

 

◎ 배열 원소 접근 방법

  • 반드시 배열 생성 후 접근
int intArray[];
intArray[4] = 8;   // 오류, intArray 배열의 메모리가 할당되지 않았음

 

  • 배열 변수명과 [] 사이에 원소의 인덱스를 적어 접근
  •  => 배열의 인덱스는 0부터 시작
  •  => 배열의 마지막 항목의 인덱스는 (배열 크기 -1)
int[] intArray = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};

intArray[3] = 6;               // 배열의 값을 저장
int n = intArray[3];           // 배열로부터 값을 읽음

 

◎ new 연산자로 배열 생성

  • 배열 생성시 값 목록을 가지고 있지 않음
  • 향후 값들을 저장할 배열을 미리 생성하고 싶을 경우
타입[] 변수 = new 타입[길이];
타입[] 변수 = null;
변수 = new 타입[길이];
int[] intArray = new int[5];

 

 

◎ 타입 별 항목의 기본값

분류 데이터 타입 초기값
기본 타입 (정수) byte[] 0
char[] '\u0000'
short[] 0
int[] 0
long[] 0L
기본 타입 (실수) float[] 0.0F
double[] 0.0
기본 타입 (논리) bloolean[] false
참조 타 클래스[] null
인터페이스[] null

 

 

∴ 배열 예제 : 배열에 입력 받은 수 5개 중 제일 큰 수 찾기

package p1.main;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int intArray[] = new int[5];
		int max = 0;
		
		for(int i = 0; i<5; i++) {
			intArray[i] = in.nextInt();
			if (intArray[i] > max)
				max = intArray[i];
		}
		System.out.println("입력된 수에서 가장 큰 수는 " + max + "입니다.");

	}

}

 

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다.

 

◎ 배열의 길이

  • 배열에 저장할 수 있는 전체 항목 수
  • 코드에서 배열의 길이 얻는 방법
// 배열변수.length;

int[] intArray = {10, 20, 30};
int num = intArray.lenght;

 

  • 배열의 길이는 읽기 전용
intArray.length = 10;      // 잘못된 코드

 

  • 배열의 길이는 for문의 조건식에서 주로 사용
  • 예를 들어)
int[] scores = {83, 90, 87};

int sum = 0;
for (int i = 0; i<scores.length; i++) {
	sum += scores[i];
    }
    System.out.println("총합 : " + sum);

 

◎ 배열의 길이와 인덱스 정리

  - 배열 인덱스

  • 인덱스는 0부터 시작하며 마지막 인덱스는 (배열 크기 -1)
  • 인덱스는 정수 타입만 가능
int intArray[] = new int[5];       // 인덱스는 0 ~ 4까지 가능
int n = intArray[-2];              // 실행오류, -2는 인덱스로 적합하지 않음
int m = intArray[5];               // 실행오류, 5는 인덱스의 범위(0~4)를 넘었음

 

-  배열의 길이

  • 배열의 크기는 배열 레퍼런스 변수를 선언할 때 결정되지 않음
  • 배열의 크기는 배열 생성 시에 결정되며, 나중에 바꿀 수 없음

- 배열의 크기는 배열의 length 필드에 저장

int size = intArray.lenght;

 

◎ 배열은 객체로 관리

int intArray[];
intArray = new int[5];

int size = intArray.length;
// size는 5

 

◎ Call by Reference

  • Method에 array 전달

 

∴ 배열 예제 : 5개 배열 원소의 평균값 구하기

package p1.main;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int intArray[] = new int[5];
		double sum = 0;
		
		for(int i = 0; i<intArray.length; i++) 
			intArray[i] = in.nextInt();
		
			for (int i = 0; i<intArray.length; i++) 
				sum += intArray[i];
				System.out.println("배열 원소의 평균은 " + sum/intArray.length + "입니다.");
		
		

	}

}

 

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다.

 



참조 타입을 2편으로 나눠서 끝낼 생각이였는데 배열 타입의 내용이 너무 많아 끝내지 못했어요ㅜㅜ 다음 시간에는 다차원 배열부터 시작하여 참조 타입의 공부를 마무리하겠습니다. 감사합니다.^^

반응형