배열
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문으로 배열을 초기화하려면 저장하려는 값에 일정한 규칙이 있어야 한다.
따라서 아래처럼 간단히 초기화할 수도 있다.
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문을 활용할 수 있다.
위에서 가로로 줄바꿈하지 않기 위해 println은 사용했다.
그러나 char배열은 println메서드로 출력하면 각 요소가 구분 없이 그대로 출력된다.
char[] chArr = {‘a’, ‘b’, ‘c’, ‘d’}; // abcd로 출력된다
좀더 간단한 방법으로, ‘Arrays.toString(배열이름)’메서드를 사용할 수 있다.
‘Arrays.toString(배열이름)’메서드 사용하기 위해서는
‘import.java.util.Arrays’를 추가해야 한다.
>>이클립스 단축키 ctrl + shift +o
cf. 만약 iArr의 값을 바로 출력하면 어떻게 될까?
System.out.println(iArr); // ‘타입@주소’의 형식으로 출력된다.
6) 배열 예제 활용
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[][] 생략됨
8)Arrays로 배열 다루기
Arrays클래스는 배열을 다루는데 유용한 메서드를 제공한다.
배열의 비교와 출력 -equals(), toString()
toString() - 배열의 모든 요소를 문자열로 출력 가능
일차원 배열에만 사용 가능
deepToString() - 다차원 배열을 출력할 때
배열의 복사 -copyOf(), copyOfRange()
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은 클래스이므로 new 연산자를 통해 객체를 생성해야 한다.
즉, 왼쪽처럼 new 연산자를 통해 객체를 생성해야 하는데,
오른쪽처럼 큰따옴표로 간략히 표현하는 것이 허용된다.
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
'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 |