2023. 1. 23. 01:36ㆍJava 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개 실제 저장공간 생성)

3.배열의 인덱스
생성된 배열의 각 저장공간을 '배열의 요소'라고 하며, '배열이름[인덱스]'의 형식으로 배열의 요소에 접근한다.
인덱스(index)는 배열의 요소마다 붙여진 일련번호 로 각 요소를 구별하는데 사용한다.
인덱스의 범위는0부터 '배열길이 -1'까지이다. 즉 인덱스는 1이 아닌 0부터 시작한다.

// 배열에 값을 저장하고 읽어오는 방법
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 |