일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 머신러닝
- 리액트 네이티브
- 모두를위한딥러닝
- 깃허브 로그인
- 문자열
- 모두의네트워크
- 백준 4358 자바
- 백준 5525번
- React Native
- 깃 터미널 연동
- 리액트 네이티브 프로젝트 생성
- 지네릭스
- 자바
- 리액트 네이티브 시작하기
- 모두를 위한 딥러닝
- 팀플회고
- 네트워크
- HTTP
- 데이터베이스
- 정리
- 깃허브 토큰 인증
- 백준 4949번
- 딥러닝
- 스터디
- 깃 연동
- 모두의 네트워크
- 백준 4358번
- 백준
- SQL
- 데베
- Today
- Total
솜이의 데브로그
Chapter 05 ) 배열 array 본문
참고 : Java의 정석
1. 배열
배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것이다.
배열의 선언에는 두가지 방법이 있다.
- 타입[] 변수이름;
- 타입 변수이름[];
배열의 생성
파이썬과의 차이점에 주의하자.
ex)
int[] score; //배열을 선언(참조변수 선언)
score = new int[5]; // 배열을 생성 (실제 저장 공간을 생성)
위와 같이 배열의 선언 후에는 배열을 생성해야 한다.
또는 다음과 같이 선언과 생성을 동시에 할 수도 있다.
int[] score = new int[5];
※각 배열을 int로 선언 시, 배열 요소는 자동적으로 int의 기본값인 0으로 초기화된다.
변수로 배열 내용 선언할 때, 유효한 범위를 벗어난 값을 index로 사용하면 컴파일은 되지만 ArrayIndexOutOfBoundsException 에러가 발생한다. 따라서 코드를 짤 때 주의해야한다.
배열의 길이는 배열의 요소의 개수, 즉 값을 저장할 수 있는 공간의 개수다. (이 때 배열의 길이가 0인 배열도 생성 가능)
배열은 한번 생성하면 길이를 변경할 수 없다. 따라서 배열이름.length 는 변경 불가능하다.
더 큰 길이의 새로운 배열을 생성하고자하면 기존의 배열에 저장된 값들을 새로운 배열에 복사해야한다.
배열의 초기화
배열은 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화된다.
따라서 원하는 값으로 초기화하려면 다음과 같이 할 수 있다.
int[] score = new int[]{10,20,30,40,50}; //가능
int[] score = { 10,20,30,40,50 }; //가능. new int[] 생략 가능
new int[] 생략이 가능하지만, 배열의 선언과 생성을 따로 하는 경우에는 생략 할 수 없다.ex)
int[] score;
score = new int[]{10,20,30,40,50}; //가능
score = {10, 20,30, 40, 50}; //불가능
배열의 출력
for 문을 사용해 출력 or Arrays.toString(배열이름) 으로 출력.Arrays.toString 메서드는 배열의 모든 요소를 '[첫번째 요소, 두번째 요소, ....]' 와 같은 형식의 문자열로 반환한다.
만약 배열의 이름을 바로 출력한다면 타입@주소 의 형태로 출력된다.( ex : [I@14318bb 와 같은 형식의 문자열)
그러나 예외적으로 char 배열은 println 메서드로 출력하면 각 요소가 구분자 없이 그대로 출력된다.
ex)
char[] chArr = {'a', 'b', 'c', 'd'};
System.out.println(chArr); //abcd가 출력된다.
배열의 복사
배열의 복사는 for문 보다 System.arraycopy() 를 사용하는 것이 효과적이다.
ex)
System.arraycopy(num, 0, newNum, 0, num.length);
배열 num[0]에서 newNum[0]으로 numlength개의 데이터를 복사하라는 뜻.
예제) 임의의 값으로 배열 채우기
for(i=0; i<arr.length; i++){
arr[i] = (int)(Math.random()*5);
}
2. String 배열
String배열의 선언과 생성 역시 동일하다. 또한 참조형 변수의 기본값은 null 이므로 각 요소는 null로 초기화된다.
참조형 배열의 경우 배열에 저장되는 것은 객체의 주소이다. (String은 클래스이므로 각 요소에는 주소가 저장됨.)
자바에서 String 클래스는 char배열에 기능(메서드)를 추가한 것이다.
<String 클래스의 주요 메서드>
char charAt(int index) : 문자열에서 해당 위치(index)에 있는 문자를 반환한다.
int length() : 문자열의 길이를 반환한다.
String substring(int from, int to) : 문자열에서 해당 범위(from~to)에 있는 문자열을 반환한다. (to는 범위 포함하지 않음)
boolean equals(Object obj) : 문자열의 내용이 obj와 같은지 확인한다.
char[] toCharArray() : 문자열을 문자배열(char[])로 변환해서 반환한다.
커맨드 라인을 통해 입력받기
커맨드라인에서 프로그램을 실행할 때 클래스 이름 뒤에 공백문자로 구분하여 여러개의 문자열을 프로그램에 전달 할 수 있다.
ex)
class ArrayEx16{
public static void main(String[] args){
//main
}
}
커맨드라인 실행 > java ArrayEx16 abc 123 "Hello World"
결과 : args[0] : "abc"
args[1] : "123"
args[2] : "Hello World"
커맨드라인으로부터 입력받는 매개변수는 모두 String 으로 입력되고, 공백으로 구분되므로 필요시에 따라 변환하여 사용한다.
3. 다차원 배열
2차원 배열을 선언하는 방법은 1차원 배열에 [] 를 추가한다.
ex)
int[][] score = new int[4][3]; //4행 3열의 2차원 배열 생성
2차원배열의 초기화 역시 {} 를 한번 더 써서 구분해준다. 행별로 줄 바꿈을 해줘서 초기화하는 것이 가독성이 좋다.
※위의 4행 3열의 2차원 배열에서, score.lenth 는 score가 참조하는 배열의 길이이므로 4이다. 또 score[0].length 의 길이는 3이다.
for (int[] tmp : score){
for(int i : tmp){
sum+= i;
}
}
위와 같이 2차원 배열의 모든 요소의 합을 구할 수 있는 코드 기억하자.
가변배열
2차원 이상의 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고, 각기 다른 길이의 배열을 생성할 수 있다.
ex)
int[][] score = new int[5][];
score[0] = new int[3];
score[1] = new int[4];
score[2] = new int[2];
score[3] = new int[3];
score[4] = new int[4];
가변배열 역시 중괄호{} 를 이용해 생성과 초기화를 동시에 할 수 있다.
'책을 읽자 > Java의 정석' 카테고리의 다른 글
Chapter 07 ) 객체지향프로그래밍(2) (0) | 2021.09.08 |
---|---|
Chapter 06 ) 객체지향프로그래밍(1) (0) | 2021.09.04 |
Chapter 04 ) 조건문과 반복문 (0) | 2021.09.03 |
Chapter 03 ) 연산자 operator (0) | 2021.09.03 |
Chapter 02 ) 변수 (0) | 2021.09.02 |