자바의정석 ch5

soso·2023년 2월 13일
0
post-thumbnail

Chapter5 배열

배열(array)이란?

같은 타입의 여러 변수를 하나의 묶음으로 다루는 것이다.
배열을 사용하면 많은 양의 데이터를 손쉽게 다룰 수 있다.
'같은 타입'이어야 하며, 서로 다른 타입의 변수들로는 구성된 배열은 만들 수 없다.
변수의 선언과 달리 다뤄야 할 데이터의 수가 아무리 많아도 단지 배열의 길이만 바꾸면 된다.

배열의 선언과 생성

원하는 타입의 변수를 선언하고 변수 또는 타입에 배일임 을 의미하는 대괄호[]를 붙이면 된다.
대괄호[]는 타입 뒤에 붙여도 되고 변수이른 뒤에 붙여도 된다.

배열의 생성

배일을 선언한 다음에는 배일을 생성해야한다.
매일을 선언하는 것은 단지 생성된 배열을 다루기 위한 참조변수를 위한 공간이 만들어진 뿐이고, 배열을 생성해야만 비로소 값을 저장한 수 있는 공간이 만들어지는 것이다.
배열을 생성하기 위해서는 연산자 'new'와 함께 배일의 타입과 길이를 지정해 주어야 한다.

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

배열의 인덱스

생성된 배열의 각 저장공간을 배열의 요소(element) 라고 하며, '배열이름[인덱스]'의 형식으로 배열의 요소에 접근한다.
인덱스(index)는 배열의 요소마다 붙여진 일련번호 로 각 요소를 구별하는데 사용된다.

인덱스(index)의 범위는 0부터 '배열길이-1'까지이다.
배열에 값을 지정하고 읽어오는 방식은 변수와 같다.
다만 변수 이름 대신'배열 이름[인덱스]'을 사용하는 점만 다르다.

배열의 길이(배열이름.length)

배열이름.length을 통해 배열의 길이에 대한 정보를 알 수 있다.
배열은 한번 생성하면 길이를 변경할수 없다.
따라서 '배열 이름.length'는 상수다. 값을 읽을 수만 있을 뿐 변경할 수 없다.

'배열 이름.length'는 배열의 길이가 변경되면 자동적으로 변경된 배열의 길이를 값으로 갖기 때문에, 배열과 함께 사용되는 for문의 조건식을 일일이 변경해 주지 않아도 된다.

배열의 초기화

배열의 각 요소에 처음으로 값을 지정하는것이다.
생성과 동시에 자동적으로 기본값(0)으로 초기화 되지만 원하는 특정값을 저장하려면 요소마다 값을 지정해줘야한다.

배열의 출력

배열을 초기화할 때 for문을 사용하듯이, 배열에 저장된 값을 확인할 때도 for문을 사용하면 된다.

int[] iArr ={100, 95, 80, 70, 60};
for(int i=0; i<iArr.length; i++){
	System.out.print(iArr[i]+",");
//  System.out.println(Arrays.toString(iArr)); // 배열iArr 모든 요소 출력

더 간단한방법은 Arrays.toString(배열이름)메서드를 사용하는 것이다. 이 메서드는 배열의 모든 요소를'[첫번째 요소, 두번째 요소, ...]'와 같은 형식의 문자열로 만들어서 반환한다.

String배열의 선언과 생성

배열의 타입이 String인 경우에도 int배열의 선언과 생성 방법은 다르지 않다.

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

3개의 String타입의 참조변수를 저장하기 위한 공간이 마련되고 참조형 변수의 기본값은 null이므로 각 요소의 값은 null로 초기화 된다.

변수타입의 따른 기본값

String배열의 초기화

String[] name = new String[3] // 길이가 3인 String배열 생성
name[0] = "Choi";
name[1] = "Yi";";
name[2] = "Kim";

또는 괄호{}를 사용하여 간단히 초기화할 수 있다.

String[] name= new String[] {"Choi","Yi", "Kim" };
String[] name= {"Choi","Yi", "Kim" }; //new String[] 생략 가능

String클래스

지금까지 문자열을 저장할 때 String타입의 변수를 사용했다.
사실 문자열이라는 용어는 '문자를 연이어 늘어놓은 것'을 의미하므로 문자배열인 char 배열과 같은 뜻이다.

그런데 자바에서는 char배열이 아닌 String클래스를 이용해서 문자열을 처리하는 이유는 String클래스가 char배열에 여러 가지 기능을 추가하여 확장한 것 이기 때문이다. 그래서 char배열을 사용하는 것보다 String클래스를 사용하는 것이 문자열을 다루기 더 편리하다.

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

C언어에서는 문자열을 char배열로 다루지만, 객체지향언어인 자바에서는 char배열과 그에 관련된 기능들을 함께 묶어서 클래스에 정의한다.

String클래스의 주요 메서드

String클래는 상당히 많은 문자열 관련 메서드를 제공한다.
이번장에서는 가장 기본적인 몇가지만 설명한다.

charAt 메서드 : 문자열에서 지정된 index에 있는 한 문자를 가져온다.
substring() 메서드 : 문자열의 일부를 뽑아낼 수 있다. 주의할 것은 범위의 끝은 미 포함이라는 것이다.
equals() 메서드 : 문자열의 내용이 다른지 확인하는데 사용한다.
주의할 것은 대소문자를 구분한다는 것이다.
대소문자를 구분하지 않고 비교하려면 equalsIgnoreCase()사용해야한다.

2차원 배열의 선언

앞서 배운 1차원 배열, 2차원 이상의 배열 즉 다차원 (3 kt, multi-dimensional) 배열도 선언해서 사용할 수 있다.
주로 사용 되는것은 1,2차원 배열이다.

2차원 이상의 배열을 선언하는 방법은 1차원 배열과 같다.
다만 대괄호[]가 하나 더 들어갈 뿐이다.

2차원 배열의 인덱스

2차원 배열은 행(row)과 열(column)로 구성되어 있기 때문에 index도 행과 열에 각각 하 나씩 존재한다.
'행index'의 범위는 10~행의 길이-1'이고 '열index'의 범위는 '0~ 열의 길 이-1'이다.
2차원 배열의 각 요소에 접근하는 방법은 '배열이름[행index][열index]이다.

2차원 배열의 초기화

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

int[][] arr = new int[][]{{1, 2, 3},{4, 5, 6}}; 
int[][] arr ={{1, 2, 3},{4, 5, 6}}; // new int[][] 생략
예시
int[][] = score ={
					{100, 100, 100}
                   ,{20, 20, 20}
                   ,{30, 30, 30}
                   ,{40, 40, 40}
                  };

Arrays로 배열 다루기

문자열의 비교와 출력 -equals(), toString()
toString()배열의 모든 요소를 문자열로 편하게 출력할 수있다.
toString()은 일차원 배열에서만 사용할수 있고, 다차원 배열은 deepToString()을 사용해야한다.

equals()는 두배열에 저장된 모든 요소를 비교해서 같은면 true,다르면 false를 반환한다.
equals()은 일차원 배열에서만 사용할수 있고, 다차원 배열은 deepEquals()을 사용해야한다.

배열의 복사 -copyOf(), copyOfRange()
copyOf()는 전체를 copyOfRange()는 배열의 일부를 복사해서 새로운 배열을 만들어 반환한다.
copyOfRange()에 지정된 범위의 끝은 포함되지 않는다.

배열의 정렬- sort
sort 배열을 정리할때 사용한다.

profile
오늘의 기록

0개의 댓글