카테고리 없음
참조 타입 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 + "입니다.");
}
}
◎ 배열의 길이
- 배열에 저장할 수 있는 전체 항목 수
- 코드에서 배열의 길이 얻는 방법
// 배열변수.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 + "입니다.");
}
}
참조 타입을 2편으로 나눠서 끝낼 생각이였는데 배열 타입의 내용이 너무 많아 끝내지 못했어요ㅜㅜ 다음 시간에는 다차원 배열부터 시작하여 참조 타입의 공부를 마무리하겠습니다. 감사합니다.^^
반응형