Array
관련 데이터를 하나로 묶는 방법!
책을 1권, 2권,… 순서로 정리하면 편리하다. 한 학급의 학생 이름도 번호를 붙이면 관리에 좋다. 프로그램도 마찬가지다. 관련 데이터를 순서대로 관리하면 좋다.
definition >> 여러 값을 하나의 변수로 묶은 것. 이를 배열(arrays)이라 한다. 아래 코드는 9명의 학생 성적을 int타입 배열에 담은 예이다.int[] scores = { 65, 74, 23, 75, 68, 96, 88, 98, 54 };
character >> 배열은 인덱스(index)라는 순서를 가지며, 모든 값의 타입이 같다.
How to use arrays
creat >> 배열은 보통 두 가지 방법으로 만든다.
// 1) 생성과 동시에 초기화 double[] arr = { 1.5, 3.2, 4.3, 0.9 }; // double 형 배열 생성 String[] names = { "Tom", "Kate", "Paul", "James" }; // String 배열 생성 // 2) 공간 할당 후 값 대입 int[] ids = new int[3]; // int형 배열 ids 공간 할당 ids[0] = 100; // 값 대입 ids[1] = 200; // 값 대입 ids[2] = 300; // 값 대입
using arrays elements >> 배열의 요소는 인덱스를 통해 사용한다.
// 1) 배열 값 읽기(read) int[] scores = {99, 88, 77}; System.out.println(scores[0]); // 99 System.out.println(scores[1]); // 88 System.out.println(scores[2]); // 77 // 2) 배열 값 변경(write) System.out.println(scores[0]); // 99 scores[0] = 0; // 0번 인덱스 값 변경 System.out.println(scores[0]); // 0
Arrays uses
using with loop code >> 배열을 보통 반복문과 함께 활용된다.
// 배열의 총합 구하기, 노가다 버전 int[] arr = { 7, 9, 31, 2, 6 }; int sum = arr[0]; sum += arr[1]; sum += arr[2]; sum += arr[3]; sum += arr[4]; // 반복문을 사용하여 개선 sum = 0; for (int i = 0; i < 5; i++) { sum += arr[i] }
length keyword >> length 키워드로 배열의 길이를 알 수 있다.
String[] names = {"Kim", "Lee", "Park", "Choi", "Oh", "Jo"}; int[] mathScores = {82, 76, 100, 92, 68, 96}; for (int i = 0; i < names.length; i++) { System.out.printf("%s : %d\n", names[i], mathScores[i]); }
make arrays >> 배열의 생성은, 중괄호에 값들을 넣어 만듭니다. 이때, 타입 뒤쪽에 대괄호([])가 필요합니다.
// int 배열 scores를 생성 int[] scores = { 90, 68, 77, 98 }; // String 배열 names를 생성 String[] names = {"Sam", "Kate", "John", "Jeny"};
access of array elements >> 배열에 담긴 값들은, 인덱스(index)라는 위치를 통해 접근 가능합니다. 인덱스는 0부터 시작함을 주의하세요.
System.out.println(names[0]); // "Sam" System.out.println(names[1]); // "Kate" System.out.println(names[2]); // "John" System.out.println(names[3]); // "Jeny"
CODE
public class Grade { public static void main(String[] args) { // 배열 생성 double[] grades = {3.45, 2.82, 3.85, 3.94}; System.out.printf("1학년: %.2f\n", grades[0]); System.out.printf("2학년: %.2f\n", grades[1]); System.out.printf("3학년: %.2f\n", grades[2]); System.out.printf("4학년: %.2f\n", grades[3]); } }
make arrays >> 배열 생성의 또 다른 방법으로는, 크기를 먼저 잡고 하나씩 대입하는 방식이 있습니다.
// A. 기존 생성 법 - 생성과 동시에 초기화 int[] mathScore = { 96, 88, 72, 68 }; // B.1 먼저 배열의 크기 설정 후, int[] arr = new int[4]; // B.2 인덱스별 값 대입 arr[0] = 11; arr[1] = 22; arr[2] = 33; arr[4] = 44;
CODE
public class Americano { public static void main(String[] args) { // 배열 생성 int[] sales = new int[5]; // 배열 값 초기화 sales[0] = 52; sales[1] = 50; sales[2] = 55; sales[3] = 42; sales[4] = 38; // 배열 합 계산 int sum = sales[0] + sales[1] + sales[2] + sales[3] + sales[4]; // 출력 System.out.printf("총 판매량: %d잔\n", sum); } }
배열과 반복문을 활용하면, 더욱 풍부한 프로그래밍을 할 수 있습니다. 아래는 배열 요소들의 총합을 구하는 예입니다.
# 변수 생성 int[] scores = { 88, 76, 92, 68, 55, 48, 82 }; int sum = 0; # 배열 요소의 합 계산 for (int i = 0; i < 7; i++) { sum += scores[i]; } # 출력 System.out.println(sum); // 509
CODE
public class SumArray { public static void main(String[] args) { // 변수 생성 int[] runningMinutes = { 42, 66, 57, 54, 88 }; int sum = 0; /* 1. for 문을 사용하여 총합을 계산하시오. */ for (int i = 0; i < 5; i ++) { sum += runningMinutes[i]; } /* 2. 평균을 계산하시오. */ double average = sum / 5.0; // 결과 출력 System.out.printf("달리기 시간 총합: %d분\n", sum); System.out.printf("달리기 시간 평균: %.0f분\n", average); } }
배열의 길이는 length 키워드를 사용하여 구할 수 있습니다.
// 배열 생성 String[] courses = { "자바", "자료구조", "알고리즘" }; // 배열의 길이 출력 System.out.println(courses.length); // 3
length 키워드는 모든 배열 순회 시 활용 가능합니다.
// 기존 방법 for (int i = 0; i < 3; i++) { System.out.println("%s\n", courses[i]); } // length 활용법 for (int i = 0; i < courses.length; i++) { System.out.println("%s\n", courses[i]); }
CODE
public class ArrayLength { public static void main(String[] args) { // 변수 생성 String[] cores = {"자바", "자료구조", "알고리즘", "데이터베이스"}; String[] electives = {"컴퓨터 네트워크", "운영체제", "소프트웨어 공학"}; String[] generals = {"영어회화", "영독해", "영작문", "팀워크", "직업윤리"}; // 핵심 과정 출력 System.out.printf("핵심과정: "); for (int i = 0; i < cores.length; i++) { System.out.printf("%s ", cores[i]); } /* 1. 선택 과정을 출력하시오. */ System.out.printf("\n선택과정: "); for (int i = 0; i < electives.length; i++) { System.out.printf("%s ", electives[i]); } /* 2. 교양 과정을 출력하시오. */ System.out.printf("\n교양과정: "); for (int i = 0; i < generals.length; i++) { System.out.printf("%s ", generals[i]); } } }
길이가 N인 배열의 인덱스는 0부터 시작하고, 그 끝은 N-1이 됩니다. 배열의 인덱스를 넘어가면 에러가 발생합니다.
// 정수형 배열 int[] scores = { 88, 72, 96, 28, 60 }; // 에러 발생 scores[-5] = 0; // (X) scores[100] = 5; // (X)
CODEpublic class OutOfIndex { public static void main (String[] args) { // 배열 생성 String[] names = { "Kim", "Lee", "Park", "Choi" }; // 배열요소 출력 System.out.printf("names[%d] => %s\n", -1, "에러!! 인덱스는 음수가 될 수 없음."); System.out.printf("names[%d] => %s\n", 0, names[0]); System.out.printf("names[%d] => %s\n", 1, names[1]); System.out.printf("names[%d] => %s\n", 2, names[2]); System.out.printf("names[%d] => %s\n", 3, names[3]); System.out.printf("names[%d] => %s\n", 4, "에러!! 배열 인덱스를 벗어남."); } }
pass variable to method >> 우리는 앞서, 일반 변수들이 메소드로 전달될 수 있음을 배웠습니다.
// 변수 생성 double a = 10.4; double b = 6.6; double result = add(a, b);
parameter of array style >> 배열을 전달받기 위해선, 파라미터의 타입 또한 배열로 선언해야 합니다.
# 메소드 정의부 public static int average(int[] arr) { ... }
CODE
public class ArrayToParameter { public static void main(String[] args) { // 배열 생성 int[] evens = { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18 }; // 짝수 int[] primes = { 2, 3, 5, 7, 11, 13, 17, 19 }; // 소수 // 계산 int evenSum = sum(evens); int primeSum = sum(primes); // 출력 System.out.println("0 이상 20 미만의 짝수와 소수 중.."); System.out.printf("짝수의 합: %d\n", evenSum); System.out.printf("소수의 합: %d\n", primeSum); } // 정수형 배열을 입력 받아 총합을 반환 public static int sum(int[] arr) { int sum = 0; for (int i = 0; i < arr.length; i++) { sum += arr[i]; } /* 해당 메소드를 완성하세요. */ return sum; } }
CODE
public class DailyUser { public static void main(String[] args) { // 배열 생성 int[] users = { 581, 512, 527, 495, 423, 141, 236 }; // 계산 double dailyUser = average(users); // 출력 System.out.printf("하루 평균 사용자: %.2f명", dailyUser); } // 정수 배열을 입력받아, 평균을 반환 public static double average(int[] arr) { // 1. 총합을 구하시오. double sum = 0.0; for (int i = 0; i < arr.length; i++) { sum += arr[i]; } // 2. 평균을 계산하시오. double avg = sum / 7.0; // 결과값 반환 return avg; } }