1. 배열
1.1 배열(array)이란?
"배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것"
많은 양의 데이터를 저장하기 위해서, 그 데이터의 숫자만큼 변수를 선언해야 한다면 매우 혼란스러울 것이다.
이런 경우에 배열을 사용하면 많은 양의 데이터를 손쉽게 다룰 수 있다.
서로 다른 타입의 변수들로 구성된 배열은 만들 수 없다.
반드시 '같은 타입'이어야 한다.
한 학급의 시험점수를 저장하고자 할 때가 배열을 사용하기 좋은 예이다.
만일 배열을 사용하지 않는다면 학생 5명의 점수를 저장하기 위해서 아래와 같이 5개의 변수를 선언해야 할 것이다.
int score1, score2, score3, score4, score5 ;
변수 대신 배열을 이용하면 다음과 같이 간단히 처리할 수 있다.
변수의 선언과 달리 다뤄야할 데이터의 수가 아무리 많아도 단지 배열의 길이만 바꾸면 된다.
int[] score = new int[5]; // 5개의 int값을 저장할 수 있는 배열을 생성한다.
아래의 그림은 위의 코드가 실행되어 생성된 배열을 그림으로 나타낸 것이다.
값을 저장할 수 있는 공간은 score[0]부터 score[4]까지 모두 5개이며, 변수 score는 배열을 다루는데
필요한 참조변수일 뿐 값을 저장하기 위한 공간은 아니다.
후에 자세히 설명할 것이니까 지금은 참고만 하고 가볍게 넘어가자.
score >> score[0] score[1] score[2] score[3] score[4]
0x100 0 0 0 0 0
위의 그림에서 알 수 있듯이, 변수와 달리 배열은 각 저장공간이 연속적으로 배치되어 있다는 특징이 있다.
1.2 배열의 선언과 생성
배열의 선언
배열을 선언하는 방법은 간단!!
1. 원하는 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 대괄호[]를 붙이면 된다.
대괄호는 타입 뒤에 붙여도 되고 변수이름 뒤에 붙여도 되는데, 타입에 붙이자!!
why?> 대괄호가 변수이름의 일부라기보다는 타입의 일부라고 보기 때문이다.
선언방법 선언예
타입[] 변수이름; int[] score;
String[] name;
배열의 생성
배열을 선언한 다음에는 배열을 생성해야한다.
배열을 선언하는 것은 단지 생성된 배열을 다루기 위한 참조변수를 위한 공간이 만들어질 뿐이고,
배열을 생성해야만 비로소 값을 저장할 수 있는 공간이 만들어지는 것이다.
배열을 생성하기 위해서는 연산자 'new'와 함께 배열의 타입과 길이를 지정해 주어야 한다.
타입[] 변수이름 ; // 배열을 선언(배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[길이] // 배열을 생성(실제 저장공간을 생성)
아래의 코드는 '길이가 5인 int배열'을 생성한다.
int[] score; // int타입의 배열을 다루기 위한 참조변수 score선언
score = new int[5]; // int타입의 값 5개를 저장할 수 있는 배열
다음과 같이 배열의 선언과 생성을 동시에 하면 간략히 한 줄로 할 수 있는데, 대부분의
경우 이렇게 한다.
타입[] 변수이름 = new 타입[길이]; // 배열의 선언과 생성을 동시에!
int[] score = new int[5]; // 길이가 5인 int배열
이 과정을 풀어서 해석해 보자.
1. int[] score; : int형 배열 참조변수 score를 선언한다. 데이터를 저장할 수 있는 공간은 아직 마련되지 않았다.
2. score = new int[5]; : 연산자 'new'에 의해서 메모리의 빈 공간에 5개의 int형 데이터를 저장할 수 있는 공간이 마련된다.
그리고 각 배열요소는 자동적으로 int의 기본값(default)인 0으로 초기화 된다.
끝으로 대입 연산자'='에 의해 배열의 주고사 int형 배열 참조변수 score에 저장된다.
이제 참고변수 score를 통해서 생성된 배열에 값을 저장하거나 읽어 올 수 있다.
이 배열은 '길이가 5일 int배열'이며, 참조변수의 이름을 따서 '배열score'라고 부르면 된다.
1.3 배열의 길이(length)와 인덱스
"인덱스(index)의 범위는 0부터 '배열길이 -1'까지." (5 >> 0, 1, 2, 3, 4)
생성된 배열의 각 저장공간을 '배열의 요소'라고 하며, '배열이름[인덱스]'의 형식으로 배열의 요소에 접근한다.
인덱스(index)는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다.
우리가 변수의 이름을 지을 때 score1, score2, score3과 같이 번호를 붙이는 것과 비슷하다고 할 수 있다.
다만 인덱스는 1이 아닌 0부터 시작한다.
배열에 값을 저장하고 읽어오는 방법은 변수와 같다.
단지 변수이름 대신 '배열이름[인덱스]'를 사용한다는 점만 다르다.
score[3] = 100; // 배열 score의 4번째 요소에 100을 저장한다.
int value = score[3]; // 배열 score의 4번째 요소에 저장된 값을 읽어서 value에 저장
배열의 또 다른 장점은 index로 상수 대신 변수나 수식도 사용할 수 있다는 것이다.
그래서 왼쪽의 코드를 오른쪽과 같이 for문을 이용해서 간단히 할 수 있다.
오른쪽 코드는 index로 상수대신 변수 i를 사용하고, for문으로 변수 i의 값을 0부터 4까지 증가시킨다.
score[0] = 0;
score[1] = 10;
score[2] = 20; >>>> for(int i = 0 ; i < 5 ; i++) {
score[3] = 30; score[i] = i * 10;
score[4] = 40; }
배열은 다룰 때 한 가지 주의할 점은 index의 범위를 벗어난 값을 index로
사용하지 않아야 한다는 것이다.
배열의 길이
배열의 길이는 int범위의 양의 정수(0도 포함)이어야 한다.
길이가 0인 배열도 생성이 가능하다!!!!!!
배열이름.length
자바에서는 JVM이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해서 배열의 길이에 대한 정보를 얻을 수 있다.
아래의 코드에서 배열 arr의 길이가 5이므로 arr.length의 값 역시 5가 된다.
int[] arr = new int[5] ; // 길이가 5인 int배열
int tmp = arr.length; // arr.length의 값은 5이고 tmp값에 5가 저장된다.
배열은 한번 생성하면 길이를 변경할 수 없기 때문에. 이미 생성된 배열의 길이는 변하지 않는다.
따라서 '배열이름.length'는 상수다. 즉, 값을 읽을 수만 있을 뿐 변경할 수 없다.
int [] arr = new int[5];
arr.length = 10; //에러. 배열의 길이는 변경할 수 없음.
아래의 코드는 배열의 각 요소를 for문을 이용해서 출력한다. 여기서 배열 score의 길이는
6이며, 인덱스의 범위는 0~5이다.
int[] score = new int[6];
for (int i=0 ; i<6 ; i++) {
System.out.println(score[i]) ;
}
이 때 코드를 다음과 같이 변경하여 배열의 길이를 줄인다면, 유효한
인덱스의 범위는 0~4가 된다.
int[] score = new int[5]; // 배열의 길이를 6에서 5로 변경
for (int i=0; i<6; i++) { // 실수로 조건식을 변경하지 않음.
System.out.println(score[i]); //error발생!!!!!!!!!!!!!1
}
배열의 길이가 변경되었으니 for문에 사용되는 조건의 범위도 변경해주어야 하는데,
만일 이것을 잊고 실행한다면 for문은 배열의 유효한 인덱스 범위인 0~4를 넘어 0부터 5까지
반복하기 때문에 5번째 반복에서ArrayIndexOutOfBoundsExeption이라는 예외(배열의
index가 유효한 범위를 벗어났다는 에러)가 발생하여 비정상적으로 종료될 것이다.
그래서 for문의 조건식에 배열의 길이를 직접 적어주는 것보다 '배열이름.length'를 사용하는 것이 좋다.
위의 for문을 '배열이름.length'를 사용해서 변경하면 다음과 같다.
int[] score = new int[6];
for (int i=0 ; i<score.length ; i++) {
System.out.println(score[i]) ;
}
'배열이름.length'는 배열의 길이가 변경되면 자동적으로 변경된 배열의 길이를 값으로 갖기 때문에,
배열과 함께 사용되는 for문의 조건식을 일일이 변경해주지 않아도 된다.
여기서는 for문을 예로 들었지만, 모든 경우에 배열의 길이를 직접 적어주는 것보다 '배열이름.length'를
사용하는 것이 코드의 관리가 쉽고 에러가 발생할 확률이 적어진다.
배열의 길이 변경하기
배열은 한번 선언되고 나면 길이를 변경할 수 없다고 배웠는데, 그렇다면 배열에 저장할
공간이 부족한 경우에는 어떻게 해야 할까?
이때는 1. 더 큰 길이의 새로운 배열을 생성한다음, 2. 기존의 배열에 저장된 값들을 새로운 배열에 복사하면 된다.
이런 작업은 노력이 많이 필요하기 때문에, 처음부터 배열의 길이를 넉넉하게 잡아서
보통 기존의 2배정도의 길이로 생성하는 것이 좋다.
+추가 : 참조자료형의 기본값 = 'null'
boolean타입은 'false'로 초기화
1.4 배열의 초기화
배열은 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화되므로
배열을 사용하기 전에 따로 초기화를 해주지 않아도 되지만, 원하는 값을 저장하려면
아래와 같이 각 요소마다 값을 지정해 줘야한다.
int [] score = new int[5]; // 길이가 5인 int형 배열을 생성한다.
score[0] = 50; // 각 요소에 직접 값을 저장한다.
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;
배열의 길이가 큰 경우에는 이렇게 요소 하나하나에 값을 지정하기 보다는 for문을 사용하는 것이 좋다.
위의 코드를 for문을 이용해서 바꾸면 다음과 같다.
int[] score = new int [5]; //길이가 5인 int형 배열을 생성한다.
for(int i = 0 ; i < score.length ; i++) {
score[i] = i * 10 + 50;
그러나 for문으로 배열을 초기화하려면, 저장하려는 값에 일정한 규칙이 있어야만 가능하기 때문에
자바에서는 다음과 같이 배열을 간단히 초기화 할 수 있는 방법을 제공한다.
int[] score = new int[] { 50, 60, 70, 80, 90}; // 배열의 생성과 초기화를 동시에.
저장할 값들을 괄호{}안에 쉼표호 구분해서 나열하면 되며, 괄호{} 안의 값의 개수에 의해
배열의 길이가 자동으로 결정되기 때문에 괄호[]안에 배열의 길이는 안적어도 된다.
int[] score = new int[] { 50, 60, 70, 80, 90 };
int[] score = { 50, 60, 70, 80, 90 }; // new int[]를 생략할 수 있음
심지어는 위와 같이 'new타입[]'을 생략하여 코드를 더 간단히 할 수도 있다.
아무래도 생략된 형태의 코드가 더 간단하므로 자주 사용된다.
다만 다음과 같이 배열의 선언과 생성을 따로 하는 경우에는 생략할 수 없다는 점만 주의하면 된다.
int[] score;
score = new int[] { 50, 60, 70, 80, 90 }; // ok!!
score = { 50, 60, 70, 80, 90 }; // 에러. new int[]를 생략할 수 없음
배열의 출력
배열을 초기화할 때 for문을 사용하듯이, 배열에 저장된 값을 확인할 때도 다음과 같이
for문을 사용하면 된다.
int[] iArr = {100, 95, 80, 70, 60};
//배열의 요소를 순서대로 하나씩 출력
for(int i==0 ; i<iArr.length ; i++) {
System.out.println(iArr[i]) ;
}
println메서드는 출력 후에 줄 바꿈을 하므로, 여러 줄에 출력되어 보기 불편할 때가 있다.
그럴 때는 다음과 같이 출력 후에 줄 바꿈을 하지않는 print메서드를 사용하자.
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(배열이름)'메서드를 사용하는 것이다.
이 메서드는 배열의 모든 요소를 '[첫번째 요소, 두번째, ... ]'와 같은 형식의 문자열로
만들어서 반환한다.
*참고 : 'Arrays.toString(배열이름)'을 사용하려면, 'import java.util.*;'를 추가해야 한다.
int[] iArr = {100,95,80,70,60};
//배열 iArr의 모든 요소를 출력한다. [100,95,80,70,60]이 출력된다.
System.out.println(Arrays.toString(iArr));
만일 iArr의 값을 바로 출력하면 어떻게 될까? iArr은 참조변수니까 변수에 저장된 값, 즉
'배열의 주소'가 출력될 것으로 생각했다면 지금까지 잘 이해하고 있는 것이다.
그러나 이러한 예상과는 달리 '타입@주소'의 형식으로 출력된다.
이 내용은 후에 다룰 테니 가볍게 넘어가고, 배열을 가리키는 참조변수를
출력해봐야 별로 얻을 정보가 없다는 정도만 기억하자.
// 배열을 가리키는 참조변수 iArr의 값을 출력한다.
System.out.println(iArr) ; //[I@14318bb와 같은 형식의 문자열이 출력된다.
예외적으로 char배열은 println메서드로 출력하면 각 요소가 구분자없이 그대로 출력되는데,
이것은 println메서드가 char배열일 때만 이렇게 동작하도록 작성되었기 때문이다.
char[] chArr = {'a', 'b', 'c', 'd'};
System.out.println(chArr); // abcd가 출력된다.
1.5 배열의 복사
배열은 한번 생성하면 그 길이를 변경할 수 없기 때문에 더 많은 저장공간이 필요하다면 보다
큰 배열을 새로 만들고 이전 배열로부터 내용을 복사해야 한다고 했다.
배열을 복사하는 방법은 두 가지가 있는데, 먼저 for문을 이용해서 배열을 복사하는 방법은 다음과 같다.
int[] arr = new int[5];
...
int[] tmp = new int[arr.length*2]; // 기존 배열보다 길이가 2배인 배열생성
for(int i = 0 ; i < arr.length ; i++)
tmp[i] = arr[i]; //arr[i]의 값을 tmp[i]에 저장
arr = tmp; //참조변수 arr이 새로운 배열을 가리키게 한다.
{+팁 : import java.util. 단축키 >>>> ctrl + shift + O}
해당 파트에 설명을 예제로 살펴보자
import java.util.Arrays; // ctrl + shift + O
public class ArrayCopyEx {
public static void main(String[] args) {
int[]arr = {5, 6, 7}; // [5,6,7]
int[]tmp = new int[arr.length*2]; // 6 [0,0,0,0,0,0]
System.arraycopy(arr, 1, tmp, 2, 2);
/*
* src : 소스(원시), 원본파일
* srcPos: 소스포지션
* dest : 타겟, 대상, 도착지
* destPos: 목적지위치를 변경하면 시작점이 바뀜
* length : ex) 길이를 2로 변경하면 기존 배열의 2개만 데려옴
*/
arr = tmp;
System.out.println(Arrays.toString(arr));
}
}
추가로 로또번호를 생성하는 예제를 만들어보자.
eclipse chap05 review예제 확인
길이가 45인 배열에 1부터 45까지의 값을 담은 다음 반복문을 이용해서
배열의 인덱스가 i인 값(ball[i])과 random()에 의해서 결정된 임의의 위치에
있는 값과 자리를 바꾸는 것을 6번 반복한다.
이것은 마치 1부터 45까지의 번호가 쓰인 카드를 잘 섞은 다음 맨 위의
6장을 꺼내는 것과 같다고 할 수 있다.
45개의 요소 중에서 앞에 6개의 요소만 임의의 위치에 있는 요소와 자리를 바꾸면 된다.
임의의 값으로 배열 채우기
배열의 연속적인 범위의 임의의 값으로 채우는 것은 다음과 같이 random()만 사용하면 쉽게 할 수 있을 것이다.
for(i=0 ; i<arr.length ; i++) {
arr[i] = (int)(Math.random() * 5) ; // 0~4범위의 임의의 값을 저장
}
그러면, 불연속적인 범위의 값들로 배열을 채우는 것은 어떻게 할까?
배열을 하나 더 사용하면 된다.
먼저 배열 code에 불연속적인 값들을 담고, 임의로 선택된 index에 저장된 값으로
배열 arr의 요소들을 하나씩 채우면 된다.
저장된 값에 상관없이 배열의 index는 항상 연속적이기 때문이다.
다음의 예제를 보자.
public class ArrayEx9_rev {
public static void main(String[] args) {
int[] code = {-4, -4, 4, 6, 11};
int[] arr = new int[10];
for(int i = 0; i<arr.length ; i++) {
int tmp = (int)(Math.random() * code.length);
arr[i] = code[tmp];
}
System.out.println(Arrays.toString(arr));
}
}
다음은 버블정렬을 통해 근접한 값과 크기를 비교하여 자리바꿈을 반복하는 것을 배워보자.
버블정렬의 전체적인 과정은 이렇다. (오름차순을 기준으로 설명)
1. 앞에서부터 현재 원소와 바로 다음의 원소를 비교한다.
2. 현재 원소가 다음 원소보다 크면 원소를 교환한다.
3. 다음 원소로 이동하여 해당 원소와 그 다음원소를 비교한다.
eclipse ArrayEx10.java 예제 확인
2. Srting 배열
2.1 String배열의 선언과 생성
배열의 타입이 String인 경우에도 int배열의 선언과 생성방법은 다르지 않다.
예를 들어 3개의 문자열을 담을 수 있는 배열을 생성하는 문장은 다음과 같다.
String[] name = new String[3]; // 3개의 문자열을 담을 수 있는 배열을 생성한다.
즉, 3개의 String타입의 참조변수를 저장하기 위한 공간이 마련되고 참조형 변수의 기본값은
null이므로 각 요소의 값은 null로 초기화 된다.
+변수의 타입에 따른 기본값은 다음과 같다.
자료형 기본값
boolean false
char '\u0000'
byte,short,int 0
long 0L
float 0.0f
double 0.0d 또는 0.0
참조형 변수 null
2.2 String배열의 초기화
초기화 역시 int배열과 동일한 방법으로 한다.
아래와 같이 배열의 각 요소에 문자열을 지정하면 된다.
String[] name = new String[3]; //길이가 3인 String배열을 생성
name[0] = "kim";
name[1] = "park";
name[2] = "yi";
또는 괄호{}를 사용해서 다음과 같이 간단히 초기화 할 수도 있다.
String[] name = new String[] {"kim", "park", "yi"};
String[] name = {"kim", "park", "yi"}; // new String[]을 생략할 수 있음.
특별히 String클래스만 "kim"과 같이 큰따옴표만으로 간략히 표현하는 것이 허용되지만,
원래 String은 클래스이므로 아래처럼 new연산자를 통해 객체를 생성해야한다.
String[] name = new String[3];
name[0] = new String( "kim" );
name[1] = new String( "park" );
name[2] = new String( "yi" );
↓↓
↓↓
↓↓
↓↓
String[] name = new String[3];
name[0] = "kim";
name[1] = "park";
name[2] = "yi";
배열에 실제 객체가 아닌 객체의 주소가 저장되어 있는 것을 볼 수 있다.
이처럼, 기본형 베열이 아닌 경우, 즉, 참조형 배열의 경우 배열에 저장되는 것은 객체의 주소이다.
참조형 배열을 객체 배열이라고도 하는데, 다음 장인 '6장 객체지향개념1'에서 배울 것이다.
+참고 : 참조형 변수를 간단히 참조변수하고도 하며, 모든 참조형 변수에는 객체가 메모리에 저장된 주소인
4byte의 정수값(0x0~0xffffffff) 또는 null이 저장된다.
2.3 char배열과 String클래스
지금까지 여러 문자, 즉 문자열을 저장할 때 String타입의 변수를 사용했다.
사실 문자열이라는 용어는 '문자를 연이어 늘어놓은 것'을 의미하므로
문자배열인 char배열과 같은 뜻이다.
그런데 자바에서는 char배열이 아닌 String클래스를 이용해서 문자열을 처리하는 이유는
String클래스가 char배열에 여러 가지 기능을 추가하여 확장한 것이기 때문이다.
그래서 char배열을 사용하는 것보다 String클래스를 사용하는 것이 문자열을 다루기 더 편리하다.
String클래스는 char배열에 기능(메서드)을 추가한 것이다.
C언어에서는 문자열을 char배열로 다루지만, 객체지향언어인 자바에서는 char배열과 그에
관련된 기능들을 함께 묶어서 클래스에 정의한다.
객체지향개념이 나오기 이전의 언어들은 데이터와 기능을 따로 다루었지만,
객체지향언어에서는 데이터와 그에 관련된 기능을 하나의 클래스에 묶어서 다룰 수 있게 한다.
즉, 서로 관련된 것들끼리 데이터와 기능을 구분하지 않고 함께 묶는 것이다.
여기서 말하는 '기능'은 함수를 의미하며, 메서드는 객체지향 언어에서 '함수'대신
사용하는 용어일 뿐 함수와 같은 뜻이다.
앞으로 '기능'이나 '함수'대신 '메서드'라는 용어를 사용할 것이다.
char배열과 String클래스의 한 가지 중요한 차이가 있는데, String객체(문자열)는
읽을 수만 있을 뿐 내용을 변경할 수 없다는 것이다.(=문자열은 내용변경불가)
String str = "Java";
str = str + "8"; // "Java8"이라는 새로운 문자열이 str에 저장된다.
System.out.println(str); // "Java8"
위의 문장에서 문자열 str의 내용이 변경되는 것 같지만, 문자열은 변경할 수 없으므로
새로운 내용의 문자열이 생성된다.
+참고 : 변경 가능한 문자열을 다루려면, StringBuffer클래스를 사용하면 된다.
String클래스의 주요 메서드
메서드 / 설명
char charAt(int index) / 문자열에서 해당 위치(index)에 있는 문자를 반환한다.
int length() / 문자열의 길이를 반환한다.
String substring(int from, int to) / 문자열에서 해당 범위 (from~ to)에 있는 문자열을 반환한다.(to는 범위에 포함되지 않음(=미만))
boolean equals(Object obj) / 문자열의 내용이 obj와 같은지 확인한다. 같으면 결과는 true, 다르면 false가 된다.
char[] toCharArray() / 문자열을 문자배열(char[])로 변환해서 반환한다.
+ 언제나 범위가 나오면 이상, 미만을 기억하자!
charAt메서드는 문자열에서 지정된 index에 있는 한 문자를 가져온다.
배열에서 '배열이름[index]'로 index에 위치한 값을 가져오는 것과 같다고 생각하면 된다.
배열과 마찬가지로 charAt메서드의 index값은 0부터 시작한다.
String str = "ABCDE";
char ch = str.charAt(3); //문자열 str의 4번째 문자 'D'를 ch에 저장.
substring()은 문자열의 일부를 뽑아낼 수 있다. 주의할 것은 범위의 끝은 포함되지 않는다는 것이다.
예를 들어, index의 범위가 1~4라면 4는 범위에 포함되지 않는다.
String str = "012345";
String tmp = str.substring(1,4); // str에서 index범위 1~4의 문자들을 반환
System.out.println(tmp); // "123"이 출력된다.
equals()는 이미 앞에서 간단히 배웠는데, 문자열의 내용이 같은지 다른지 확인하는데 사용한다.
기본형 변수의 값을 비교하는 경우 '=='연산자를 사용하지만, 문자열의 내용을 비교할 때는
equals()를 사용해야 한다. 그리고 이 메서드는 대소문자를 구분한다는 점에 주의하자.
대소문자를 구분하지 않고 비교하려면 equals()대신 equalsIgnoreCase()를 사용해야한다.
String str = "abc";
if(str.contentEquals("abc")) { // str와 "abc"가 내용이 같은지 확인한다.
}
char배열과 String클래스의 변환
가끔 char배열을 String클래스로 변환하거나, 또는 그 반대로 변환해야하는 경우가 있다.
그럴 때 다음의 코드를 사용하자.
char[] chArr = {'A', 'B', 'C'};
String str = new String(chArr); // char배열 > String
char[] tmp = str.toCharArray(); // String > char 배열
2.4 커맨드 라인을 통해 입력받기
Scanner클래스의 nextLine()외에도 화면을 통해 사용자로부터 값을 입력받을 수 있는
간단한 방법이 있다. 바로 커맨드라인을 이용한 방법인데, 프로그램을 실행할 때 클래스
이름 뒤에 공백문자로 구분하여 여러 개의 문자열을 프로그램에 전달 할 수 있다.
만일 실행할 프로그램의 main메서드가 담긴 클래스의 이름이 MainTest라고 가정하면
다음과 같이 실행할 수 있을 것이다.
c:\jdk1.8\work\ch5>java MainTest abc 123
커맨드 라인을 통해 입력된 두 문자열은 String배열에 담겨서
MainTest클래스의 main메서드의 매개변수(args)에 전달된다.
그리고는 main메서드 내에서 args[0], args[1]과 같은 방식으로
커맨드라인으로 부터 전달받은 문자열에 접근할 수 있다.
여기서 args[0]은 "abc"이고 args[1]은 "123"이 된다.
문자열 "123"을 숫자 123으로 바꾸려면 다음과 같이 한다.
int num = Integer.parseInt("123"); // 변수 num에 숫자 123이 저장된다.
'JAVA' 카테고리의 다른 글
1.컬렉션 프레임웍 - 1.1 컬렉션 프레임웍의 핵심 인터페이스 (0) | 2022.02.04 |
---|---|
선택정렬, 삽입정렬구현 (0) | 2022.01.17 |
Java 수업복습(220110~) - 조건문과 반복문(if, switch, for, while statement) (0) | 2022.01.11 |
java 수업복습(220106) - 연산자(Operator) (0) | 2022.01.10 |
Java 형변환(Casting)이란 (0) | 2022.01.07 |