- 동일한 자료형(Data Type)의 데이터를 연속된 공간에 저장하기 위한 자료 구조이다. 즉, 연관된 데이터를
그룹화
하여 묶어준다고 생각하면 된다.
- 연관된 데이터를 저장하기 위한 변수의 선언을 줄여주며, 반복문 등을 이용하여 계산과 같은 과정을 쉽게 처리할 수 있다.
- 한 번 생성된 배열은 길이를 늘리거나 줄일 수 없다.
//배열 정의 1 자료형[] 변수 = {데이터1, 데이터2, 데이터3, ... }; //배열 정의 2 자료형[] 변수 = new 자료형[배열크기]; 변수[0] = 데이터 값; 변수[1] = 데이터 값; ...
- 배열 변수를 이미 선언한 후에는 다른 실행문에서 중괄호를 사용한 배열 생성이 허용되지 않는다.
사용 예시/* * 1. Bike 객체를 담을수 있는 방 3개짜리 배열객체를 생성해서 참조값을 * bikes 라는 지역 변수에 담아 보세요. * 2. 배열의 각각의 방(0,1,2번) 에 Bike 객체를 생성해서 담아 보세요. * 3. 반복문 for 를 이용해서 순서대로 배열의 각각의 방에 있는 Bike 객체의 * ride() 메소드를 호출해 보세요. */ //1 Bike [] bikes = new Bike[3]; for (int i = 0; i < bikes.length; i++) { //2 bikes[i] = new Bike(); //3 bikes[i].ride();
기본적인 데이터 타입들을 Scanner 의 메소드를 사용하여 입력받을 수 있다.
Scanner 의 경우 아래처럼 객체를 생성해주면 된다.
Scanner in = new Scanner(System.in); // Scanner 객체 생성
메소드 기 능 next() String을 읽음. 단, 띄어쓰기 뒷부분은 읽지 않음. nextLine() String을 읽음. 띄어쓰기를 포함하여 한 줄(즉, Enter를 치기 전까지)을 읽음. nextInt() int 를 읽음. nextBoolean() boolean 을 읽음 nextByte() byte 를 읽음 nextShort() short 를 읽음 nextLong() long 을 읽음 nextFloat() float 을 읽음 nextDouble() double 을 읽음
- Scanner 클래스는
토큰 단위
로 읽는다!
(단, nextLine()은 예외이다. nextLine()은 Enter 단위로 읽는다.)토큰(Token) : 공백문자(Spacebar, Tab, Enter 등)로 구분되는 요소
- 공백 문자는 사라지지 않는다!
사용 예시//1. 문자열을 저장할 수 있는 방 5개짜리 배열객체를 생성해서 참조값을 msgs라는 지역변수에 담는다. String [] msgs = new String [5]; //2. 키보드로부터 입력받을 수 있는 Scanner 객체를 생성해서 참조값을 scan이라는 지역변수에 담는다. Scanner scan = new Scanner(System.in); //3. 반복문을 위에서 생성한 배열의 방의 갯수만큼 돌면서 키보드로부터 문자열을 입력받아서 // 배열에 순서대로 저장한다. for (int i = 0; i < msgs.length; i++) { System.out.print("문자열 입력: "); msgs[i] = scan.nextLine(); } System.out.println(" ---- 출력 ---- "); //4. 반복문 돌면서 배열에 저장되었던 모든 문자열을 순서대로 콘솔창에 출력한다. for (String tmp:msgs) { System.out.println(tmp);
- java.util 패키지에 있는 Random 클래스를 사용하는 방법이다.
- Math.random와 다르게 인스턴스를 생성해서 사용해야 한다.
- 객체 생성 방법은 2가지인데, 인자 없이 기본 생성자를 사용하는 방법과 long 타입의 시드(seed)를 인자로 받는 생성자를 사용하는 방법이다.
// 기본 생성자로 생성 Random random = new Random(); // seed 지정해서 생성 Random randomWithSeed = new Random(5); // seed 지정 random.setSeed(System.currentTimeMillis());
- 난수의 범위를 지정하려면 아래와 같이 설정하면 된다.
random.nextInt(4); // 0 ~ 3 까지의 무작위 int 값 리턴 random.nextInt(10); // 0 ~ 9 까지의 무작위 int 값 리턴 random.nextInt(100); // 0 ~ 99 까지의 무작위 int 값 리턴 random.nextInt(4)+1; // 1 ~ 4 까지의 무작위 int 값 리턴 int ranNum5 = ran.nextInt(51)-25; int ranNum5 = ran.nextInt(-25, 26); //-25 ~ 25 사이의 랜덤한 정수
사용 예시
/* * 우연히 3개가 모두 같게 나왔을 때는 "당첨됬습니다!"를 출력하고 * 하나라도 다르면 "꽝"을 출력하도록 프로그래밍 해보세요. * * ex ) cherry | apple | cherry * 꽝 * 7 | 7 | 7 * 당첨됬습니다! */ String [] list = {"cherry", "apple", "banana", "melon", "7"}; //랜덤한 숫자를 얻어내기 위한 객체 Random ran = new Random(); int [] nums = new int[3]; for(int i=0; i<nums.length; i++) { nums[i] = ran.nextInt(5); System.out.print(list[nums[i]]); if(i!=2) { System.out.print(" | "); } } if(nums[0] == nums[1] && nums[1] == nums[2]) { System.out.println("당첨됬습니다!"); } else { System.out.println("꽝"); }
- 보통 for문을 사용할땐 아래와 같이 사용한다.
for(int i=0; i<array.size(); i++){ System.out.println(array.get(i)); }
- 조건식에 array.size()를 사용할 시, for문이 돌때마다 size를 호출 한다는 단점이 있다.
데이터가 적을땐 문제가 안되지만, 만약 데이터가 많다고 가정해보면 문제가 될 수 도 있다.
- 이러한 것들을 foreach문 쓰면 편하다.
for (type var: iterate) { body-of-loop }
- 위에서 iterate는 루프를 돌릴 객체이고 iterate 객체에서 한개씩 순차적으로 var에 대입되어 for문이 수행된다. iterate로 사용할 수 있는 자료형은 루프를 돌릴수 있는 자료형(배열 및 ArrayList 등)만 가능하다.
사용 예시
String[] numbers = {"one", "two", "three"}; for(String number: numbers) { System.out.println(number); } ----- 결과 ----- one two three