배열(Array)

2023. 1. 23. 01:36Java Study Note

반응형

1. 배열이란?

개념: 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 '배열(Array)'이라고 한다. 

 

2. 배열 선언과 생성:

배열 선언: 단지 생성된 배열을 다루기 위한 참조변수를 위한 공간이 만들어질 뿐이다. 

선언방법(2가지) 선언 예
타임[ ] 변수이름: int[ ]  age;
String[ ] name;
타임 변수이름[ ] : int age[ ];
String name[ ];

배열 생성: 값을 저장할 수 있는 공간이 만들어진다.

배열을 생성하기 위해서 연산자 'new'와 함께 배열의 타입과 길이를 지정해 주어야 한다. 

타입[] 변수이름;            // 배열을 선언(배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[길이];   // 배열을 생성 (실제 저장공간을 생성)
예시: 

int[] score;        // int 타입의 배열을 다루기 위한 참조변수 score선언(참조변수를 위한 공간 생섣)
score = new int[5]; // int 타입의 값 5개를 저장할 수 있는 배열 생성(5개 실제 저장공간 생성)

배열이 주소 0*100번지에 생성되었다고 가정한 그림이다.

3.배열의 인덱스

생성된 배열의 각 저장공간을 '배열의 요소'라고 하며, '배열이름[인덱스]'의 형식으로 배열의 요소에 접근한다. 

인덱스(index)는 배열의 요소마다 붙여진 일련번호 로 각 요소를 구별하는데 사용한다. 

인덱스의 범위는0부터 '배열길이 -1'까지이다. 즉 인덱스는 1이 아닌 0부터 시작한다. 

int[ ] age = new int[5];

// 배열에 값을 저장하고 읽어오는 방법
int[] age = new int[5];
age[3] = 28; //배열이름(인덱스)에 값을 저장한다.
int valve = age[3]; // 배열 age의 4번째 요소의 값을 valve에 저장

배열으 index 로 상수 대신 변수나 수식도 사용할 수 있다.

for(int i=0 ; i<=3 ; i++){// for문을 이용하여 간단하게 배열값을 저장할 ㅜㅅ 있다. 
	age[i] = i * 10;
}

4. 배열의 길이 & 배열의 초기화 & 배열의 출력

1) 배열의 길이:

Java에서는 자바 가상 머신(JVM)이 모든 배열으이 길이를 별도로 관리하며, '배열이름.length'을 통해 배열의 길이에 대한 정보를 얻을 수 있다. 

int[] arr = new int[5];  : 배열의 길이가 5인 int 배열
int len = arr.length;       : arr.length 의 값은 5이고 len 변수에 저장된다.

// 배열은 한번 생성되면 컴파일 후 실행되는 동안은 그 길이(크기)를 바꿀 수 없습니다. 
// 배열의 길이는 상수다.

배열의 길이 이상의 값을 출력할 경우, ArrayIndexOutBoundsException이라는 error(배열의 index가 유효한 범위를 벗어났다는 에러)가 발생하여 비정상적으로 종료된다. 예: int len= arr[6] // 에러발생. 

 

2) 배열의 초기화:

배열은 생성과 동시에 자동적으로 기본값(0)으로 초기화되므로 배열을 사용하기 전에 따로 초기화 하지 않아도 된다. 

자료형(변수 타입) 기본값
byte
0
short
0
int
0
long
0L
float
0.0f
double
0.0d
char
'\n0000'
boolean
false
참조형 변수(String or any Object)
null

3) 배열의 출력:

class Arrays3_1 {
    public static void main(String[] args) {
        int[] arr = {100, 90, 80, 70, 60};
        //  배열을 가리키는 참조 변수 arr 을 출력
        
        System.out.println("arr = " + arr); 
        // 메모리 주소와 비슷한 문자열이 출력 -> 실제 주소는 아닙니다.
        // [I@7a81197d -> [(배열을 뜻함), I(int 타입을 뜻함), @(위치를 뜻함)

        // 예외 확인 하기 - char[]
        char[] chArr = {'a', 'b', 'c', 'd'};
        System.out.println(chArr); // abcd 가 출력되는데 이는 println 메서드의 기능 때문!

        // 배열의 요소 하나씩 출력하기
        for (int i = 0; i < arr.length; i++) {
            System.out.print("arr[" + i + "] = " + arr[i] + ",");//  각 요소 간의 구별을 위해 쉼표를 넣는다.
            // System.out.print는 자동으로 줄 바꿈하지 않는다. 
            // System.out.println 자동 줄 바꿈해준다. 
        }
        
        
        // 'Arrays.toString(배열이름)'메세드를 사용하면 '[첫번째 요소,두번째 요소,...]'와 같은 형식의 문자열로 만들어서 반환한다. 
        // Arrays.toString(배열) : 배열의 모든 요소를 문자열로 만들어서 반환한다.
        System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr)); 
        
        //배열을 가리키는 참조변수 iArr의 값을 출력한다.
        System.out.println(Arr); // '타입@주소'의 형식으로 출력된다.실행할 때마다 달라질 수 있다.
    }
}
class Ex5_2 {// 총점, 평균,max, min 구하기
	public static void main(String[] args) {
		int   sum = 0;      // 총점을 저장하기 위한 변수
		float average = 0f; // 평균을 저장하기 위한 변수
        
		int[] score = {100, 88, 100, 100, 90}; // 참조변수 score선언, 배열의 선언 및 생성
		
        int max = score[0];// 배열의 첫 번째 값으로 최대값으로 초기화 한다. 
        int min = score[0];// 배열의 첫 번째 값으로 최소값으로 초기화 한다. 
        
		for (int i=0; i < score.length ; i++ ) {
			sum += score[i]; // for문을 이용하여 총점을 계산
            if(score[i] > max){// max, min값을 구하기
            	max = score[i];
            }else if (score[i] < min) {
            	min = score[i];
            }
		}//end of for
		average = sum / (float)score.length ; // 계산결과를 float로 얻기 위해서 형변환

		System.out.println("총점 : " + sum);
		System.out.println("평균 : " + average);
        System.out.println("최대값 : " + max);
        System.out.println("최소값 : " + min);
	}// end of main
}// end of class
class Ex5_4 {
	public static void main(String[] args) {
		int[] numArr = {0,1,2,3,4,4,5,6,7,8,9};
		System.out.println(Arrays.toString(numArr));

		for (int i=0; i < 100; i++ ) {
			int n = (int)(Math.random() * 10);  // 0~9 중의 한 값을 임의로 얻는다.
            
            // numArr[0]과 numArr[n]의 값을 서로 바꾼다. 
			int tmp = numArr[0]; 
			numArr[0] = numArr[n];
			numArr[n] = tmp;
		}
		System.out.println(Arrays.toString(numArr));
	} // main의 끝
}

5. String 배열

String[] name = new String[3]; // 3개의 문자열을 담으르 수 있는 배열을 생성한다.

첨조형 변수의 기본값은 null 이다. 

 

String 클래스

String 클래스는 char배열에 기능(메서드)을 추가한 것이다.

String 클래스는 char배열의 차이는 String객체(문자열)는 읽을 수만 있을 뿐 내용을 변경할 수 없다. 

따라서 새로운 내용의 문자열을 새롭게 생성한다. 

변경 가능한 문자열을 다루려면, StringBuffer클래스를 사용하면 된다.

※ equals() 메서드는 대소문자를 구분하고, equalsIgnoreCase()는 대소문자 구분하지 않고 비교한다. 

6. Scanner클래스

Scanner클래스를 통해 입력받기

// Scanner 클래스를 사용하기 위해서는 프로그램의 class명 윗줄에 import문이 필요하다. 
import java.util.Scanner;  

public class ScannerTest{
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);// Scanner 객체 생성
		// 키보드에서 사용자로부터 키 입력을 받기 위해 System.in을 사용한다.

		System.out.println("나이를 입력하세요.>"); // 입력창에 입력 요청하기
		String tmp = scanner.nextLine(); // 화면서에서 입력받은 내용을 tmp에 저장한다.
        
        System.out.printf("나이는 %d세 입니다.", tmp);
        
    }//end of main
}//end of class

7. 2차원 배열의 선언

선언방법(3가지) 선언 예
타임[ ][ ] 변수이름: int[ ][ ]  age;
타임 변수이름[ ][ ] : int age[ ][ ];
타임[ ] 변수이름[ ] : int[ ] age[ ];

※ 3차원 이상의 고차원 배열의 선언은 대괄호[ ]의 개수를 차원의 수만큼 추가해 주기만 하면 된다.

int[][] score = mew int [4][3];// 4행 3열의 2차원 배열을 생성한다. 
// 모두 12개의 int값을 저장할 수 있는 공간이 마련된다.
//또한, 기본값 0으로 저장된다.
// 배열을 생성하면 , 배열의 각 요소에는 배열요소 타입의 기본값이 자동적으로 저장된다.

3열 4행 저장공간

int int int
int int int
int int int
int int int

2차원 배열의 초기화

2차원 배열도 괄호{ }를 사용해서 생성과 초기화를 동시에 할 수 있다. 다만, 1차원 배열보다 { }를 한번 더 써서 행별로 구분해 준다.

int[][] arr = new int[][]{{1,2,3},{4,5,6}};
int[][] arr ={{1,2,3},{4,5,6}};// new int[][]가 생략됨.

8. Arrays로 배열 다루기

메서드 설명
toString() toString()배열의 모든 요소를 문자열로 편하게 출력할 수 있다. Arrays.toString(배열)
deepToString() 다차원 배열에 사용한다. Arrays.deepToString(배열)
equals() 두 배열에 저장된 모든 요소를 비교해서 같으면 true,
다르면 false를 반환한다.
Arrays.equals(배열1,배열2)
deepEquals() 다차원 배열의 비교에는 deepEquals()를 사용한다.  Arrays.deepEquals(배열1,배열2)
copyOf() 배열 전체를 복사해서 새로운 배열을 만들어 반환한다. Arrays.copyOf(변수이름, 복사할 개수)
copyOfRange() 지정된 배열의 일부를 복사해서 새로운 배열을 만들어 반환한다. Arrays.copyOfRange(변수이름, from, to)
sort() 배열 정렬할 때 사용한다. Arrays.sort(변수이름);

계속하여 객체지향 프로그래밍1

반응형

'Java Study Note' 카테고리의 다른 글

2진법, 10진법, 16진법, bit  (0) 2023.02.01
연산자와 피연산자  (0) 2023.01.24
객체지향 프로그래밍 1  (0) 2023.01.23
변수  (0) 2023.01.18
자바 시작  (0) 2023.01.18