본문 바로가기

Java

Java 배열

배열

 

 

1. 배열

배열 - 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

 

1)배열의 선언과 생성

 

①배열의 선언

> 타입 변수명[];

  ex) int score[];

>타입[]변수명;

  ex) int [] score;

 

②배열의 생성

배열을 선언하면, 그 다음으로 생성해야 한다.

배열을 선언하는 것은 단지 생성된 배열을 다루기 위한 참조변수의 공간이 만들어진 것뿐이다. 

 

타입[]변수명; // 배열선언

변수명= new 타입[길이]; // 배열생성

 

int [] score;               //int 타입의 배열 선언

score = new int[5];  //길이가 5인 int배열 생성

 

배열의 선언과 생성을 동시에 할 수도 있다.

 

타입[]변수명=new 타입[길이]; //배열 선언과 동시에 선언

ex) int [] score = new int[5];

 

2)배열의 인덱스

생성된 각 배열의 공간을 배열의 요소라고 하며,

인덱스는 각 배열의 요소마다 붙여진 일련번호이다.

각 배열을 구분하기 위해 사용된다. 인덱스는 0부터 시작한다.

 

ex) int [] score = new int[5];  //인덱스의 범위는 0부터 4까지이다.

 

인덱스는 변수나 수식으로도 사용될 수도 있다.

배열의 인덱스

왼쪽의 코드를 오른쪽과 같이 for문을 이용해 간단히 할 수 있다.

 

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

배열의 길이는 한번 생성하면 길이 변경할 수 없다.

따라서 ‘배열이름.length’는 상수이다.

배열의 길이는 변경 불가하다.

4)배열의 초기화

배열은 생성과 동시에 자동적으로 기본값(0)으로 초기화된다. 

만약 원하는 값으로 저장하려면 각 요소마다 값을 지정해줘야 한다.

 

배열의 초기화는 왼쪽처럼 하나하나 값을 지정할 수도 있지만,

오른쪽처럼  for문을 활용하여 지정할 수도 있다. 

배열을 초기화하는 예제. for문 활용

 

그러나 for문으로 배열을 초기화하려면 저장하려는 값에 일정한 규칙이 있어야 한다.

 

따라서 아래처럼 간단히 초기화할 수도 있다.

int [] score = new int {50, 60, 70, 80, 90}; //배열의 생성과 초기화를 동시에 진행

 

이때 new int를 생략하는 것도 가능하다.

int [] score =  {50, 60, 70, 80, 90};

 

**주의사항!!

배열의 선언과 생성을 따로하는 경우 new int는 생략 불가능하다.

 

int [] score;

score =  new int {50, 60, 70, 80, 90}; // new int 생략 불가 



5) 배열의 출력

배열을 할 때 for문을 활용할 수 있다.

배열을 초기화하는 방법 for문 활용

위에서 가로로 줄바꿈하지 않기 위해 println은 사용했다. 

그러나 char배열은 println메서드로 출력하면 각 요소가 구분 없이 그대로 출력된다.

 

char[] chArr = {‘a’, ‘b’, ‘c’, ‘d’}; // abcd로 출력된다 

 

좀더 간단한 방법으로, ‘Arrays.toString(배열이름)’메서드를 사용할 수 있다.

 

Arrays.toString(배열이름) 메서드 활용


‘Arrays.toString(배열이름)’메서드 사용하기 위해서는

‘import.java.util.Arrays’를 추가해야 한다.

>>이클립스 단축키 ctrl + shift +o

 

cf. 만약 iArr의 값을 바로 출력하면 어떻게 될까?

System.out.println(iArr);     //  ‘타입@주소’의 형식으로 출력된다. 

 

6) 배열 예제 활용

배열 출력 예제
배열을 활용해서 총합과 평균 구하기 예제
배열을 활용하여 최대값 최소값 구하기 예제
배열의 활용 shuffle 섞기 문제
배열의 활용 로또 번호 만들기

 

배열 예제 최대값

7) 2차원 배열

 

2차원 이상의 배열, 즉 다차원 배열도 선언하여 사용할 수 있다.

차원의 제한은 없지만 주로 1,2차 배열이 사용된다.

 

① 2차원 배열 선언

2차원 배열을 선언하는 방법은 1차원 배열과 동일하다. 

대괄호 []가 하나 더 추가되는 차이점이 있을 뿐이다.

 

타입[][]변수명;

타입 변수명[][];

 

② 2차원 배열 생성

 

만약 4행 3열의 데이터를 위한 배열을 생성하려면 

int [][] score = new int [4][3];  // 4행 3열의 2차원 배열을 생성한다

 

2차원 배열은 행과 열로 구성되어 있으므로

index도 행과 열에 각각 하나씩 존재한다.

행의 범위는 ‘0~행의길이-1’ 이고, 열의 범위는 ‘0~열의길이-1’이다.

 

예시)

int [][] score = new int [4][3];   // 4행 3열의 2차원 배열 score를 생성

 

배열 score 1행 1열에 100을 저장하고 출력하고 싶다면

 

score [0][0] = 100; // 배열 score의 1행 1열 100을 저장

System.out.println(score[0][0]);  // 배열 score의 1행 1열 값을 출력

 

2차원 배열 초기화

1차원 배열 초기화와 동일하지만, {}가 하나 더 추가된다.

int[][]  arr = new int {{1,2,3}, {4,5,6}};

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

 

 

다차원 배열 예제
다차원 배열  2차원 배열의 총합과 평균 구하기
다차원 배열 예제 세과목 점수 더하고 총합, 평균 구하기

8)Arrays로 배열 다루기

 

Arrays클래스는 배열을 다루는데 유용한 메서드를 제공한다.

 

배열의 비교와 출력 -equals(), toString()

toString() - 배열의 모든 요소를 문자열로 출력 가능

               일차원 배열에만 사용 가능

deepToString() - 다차원 배열을 출력할 때

 

배열의 복사 -copyOf(), copyOfRange()

copyOf() - 배열 전체 복사

copyOfRange() - 배열의 일부 복사. 지정된 범위의 끝은 포함되지 않는다.

 

배열의 정렬 - sort()

 

toString과 deppToString 메서드 활용
copyOf와 copyOfRange 메서드 활용 sort 메서드 활용

 

배열의 복사

 

2. String배열

 

1) String 배열의 선언과 생성

배열 타입이 String인 경우에도 int배열과 방법이 동일하다.

 

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

 

3개의 String 타입의 참조변수를 위한 공간이 마련되고,

참조형 변수의 기본값은 null이므로 각 요소의 값은 null로 초기화된다.

 

cf. 변수의 타입에 따른 기본값

자료형 기본값
boolean false
char ‘\u0000’
byte, short, int 0
long 0L
float 0.0f
double 0.0 or 0.0d
참조형 null



2)String 배열의 초기화

int배열과 방법이 동일

 

String [] name = new String[3];

name[0] =”Kim”;

name[1] =”Park”;

name[2] =”Yi”;

 

괄호{}을 사용해 간단히 초기화할 수도 있다.

 

String[] name = new String {Kim, Park, Yi};

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



String 배열 초기화 예시

사실, String은 클래스이므로 new 연산자를 통해 객체를 생성해야 한다.

즉, 왼쪽처럼 new 연산자를 통해 객체를 생성해야 하는데,

오른쪽처럼 큰따옴표로 간략히 표현하는 것이 허용된다.

String 배열 활용 예시

 

3)String 클래스

 

문자열을 저장할 때 String 타입의 변수를 사용했다.

사실 문자열이라는 용어는 ‘문자를 연이어 늘어놓은 것’을 의미하므로

문자배열인 char배열과 같은 뜻이다.

 

그런데 자바에서는 char배열이 아닌 String 클래스를 이용해 문자열을 처리한다.

그 이유는 String 클래스가 char배열에 여러가지 기능을 추가하여 확장한 것이기 때문이다.

 

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

 

① String 클래스의 주요 메서드

 

메서드 설명
char charAt(int index) 문자열에서 해당 위치(index)에 있는 문자를 반환
int length() 문자열의 길이를 반환
String substring(int from, int to) 문자열에서 해당 범위(from~to)의 문자열을 반환한다. to는 포함되지 않음
equals() ‘문자열’의 내용이 같은지 확인. True or False 값을 반환
char[] toCharArray() 문자열을 문자배열(char[])로 변환하여 반환



String str = “012345”;

String tmp = Str.substring(1,4);  //str에서 1~4의 문자들을 반환. 

System.out.println(tmp);    //123 출력

 

4) 커맨드 라인을 통해 입력 받기

 

Scanner 클래스의 NextLine() 외에도

화면을 통해 사용자로부터 값을 입력받을 수 있는 방법이 있다. 

 

커맨드 라인을 이용하는 것

 

프로그램을 실행할 때 클래스이름 뒤에

공백문자로 구분하여 여러개의 문자열을

프로그램에 전달할 수 있다.       ex ) abc 123 “Hello World”

 

커맨드 라인을 통해 입력된 문자열은

String 배열에 담겨서 Main 메서드의 매개변수(args)에 전달된다.

 

커맨드 라인에 입력된 매개변수는 공백문자를 구분하기 때문에

입력될 값에 공백이 있는 경우 큰따옴표(“)로 감싸줘야 한다.

그리고 커맨드 라인에 숫자를 입력하더라도 문자열로 처리된다는 점을 기억하자.

 

만약 커맨드 라인에 매개변수를 입력하지 않으면

크기가 0인 배열이 생성되어 args.length의 길이는 0이 된다.

 

방법 : 이클립스에서 Run - configurations - arguments

 

command line 커맨드 라인을 통해 입력 받기 예제
String 배열 문자열 배열 문자 배열로 번환 응용 배열 복사 활용

'Java' 카테고리의 다른 글

re : Java 객체지향 프로그래밍Ⅱ  (0) 2022.04.13
re: Java 객체지향 프로그래밍Ⅰ  (0) 2022.04.12
re: Java 조건문과 반복문  (0) 2022.04.08
re: Java 연산자  (0) 2022.04.07
re: Java 변수  (0) 2022.04.07