λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“– Java/πŸ’Š Java κ°•μ˜

Java μž…λ¬Έ κ°•μ˜_λ°°μ—΄

by carrot0911 2024. 11. 7.

λ°°μ—΄

 

λ°°μ—΄ μ‹œμž‘

배열이 ν•„μš”ν•œ 이유
ν•™μƒμ˜ 점수λ₯Ό 좜λ ₯ν•˜λŠ” κ°„λ‹¨ν•œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄ 보자.

Array1

package array;

public class Array1 {

    public static void main(String[] args) {
        int student1 = 90;
        int student2 = 80;
        int student3 = 70;
        int student4 = 60;
        int student5 = 50;
        int student6 = 40;

        System.out.println("학생 1 점수 : " + student1);
        System.out.println("학생 2 점수 : " + student2);
        System.out.println("학생 3 점수 : " + student3);
        System.out.println("학생 4 점수 : " + student4);
        System.out.println("학생 5 점수 : " + student5);
        System.out.println("학생 6 점수 : " + student6);
    }
}
  • 학생을 λͺ‡ λͺ… 더 μΆ”κ°€ν•΄μ•Ό ν•œλ‹€λ©΄ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” λΆ€λΆ„κ³Ό 좜λ ₯ν•˜λŠ” λΆ€λΆ„μ˜ μ½”λ“œλ„ μΆ”κ°€ν•΄μ•Ό ν•œλ‹€. 학생을 λͺ‡ λͺ… 더 μΆ”κ°€ν•˜λŠ” 것은 κ°œλ°œμžκ°€ μ½”λ”©μœΌλ‘œ ν•΄κ²°ν•  수 μžˆμ§€λ§Œ, 학생을 수백 λͺ… 이상 μΆ”κ°€ν•΄μ•Ό ν•œλ‹€λ©΄ μ½”λ“œκ°€ μƒλ‹Ήνžˆ 많이 λŠ˜μ–΄λ‚  것이닀. κ²°κ΅­ 학생 μˆ˜κ°€ 증가함에 따라 μ½”λ”© 양이 λΉ„λ‘€ν•΄μ„œ μ¦κ°€ν•˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.
  • λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 뢀뢄을 보면 학생 μˆ˜κ°€ 증가함에 따라 intν˜• λ³€μˆ˜λ₯Ό κ³„μ†ν•΄μ„œ μΆ”κ°€ν•΄μ•Ό ν•œλ‹€. 학생 μˆ˜κ°€ 5λͺ…이면 intν˜• λ³€μˆ˜λ₯Ό 5개 μ„ μ–Έν•΄μ•Ό ν•˜κ³ , 학생 μˆ˜κ°€ 100λͺ…이라면 intν˜• λ³€μˆ˜λ₯Ό 100개 μ„ μ–Έν•΄μ•Ό ν•œλ‹€. κ²°κ΅­ λΉ„μŠ·ν•œ λ³€μˆ˜λ₯Ό λ°˜λ³΅ν•΄μ„œ μ„ μ–Έν•˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.
  • 반볡문으둜 ν•΄κ²°ν•  수 μžˆμ„ 것 κ°™μ§€λ§Œ, 점수λ₯Ό 좜λ ₯ν•˜λŠ” 뢀뢄을 보면 λ³€μˆ˜μ˜ 이름이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λ°˜λ³΅λ¬Έλ„ μ μš©ν•  수 μžˆλ‹€.

μ΄λ ‡κ²Œ 같은 νƒ€μž…μ˜ λ³€μˆ˜λ₯Ό λ°˜λ³΅ν•΄μ„œ μ„ μ–Έν•˜κ³  λ°˜λ³΅ν•΄μ„œ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 것이 λ°”λ‘œ 배열이닀.

 

λ°°μ—΄μ˜ μ„ μ–Έκ³Ό 생성

배열은 같은 νƒ€μž…μ˜ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° νŽΈν•˜κ²Œ ν•˜λ‚˜λ‘œ λ¬Άμ–΄λ‘” 것이닀.

ArrayRef1

package array;

public class ArrayRef1 {

    public static void main(String[] args) {
        int[] students;  // intν˜• λ°°μ—΄ λ³€μˆ˜ μ„ μ–Έ!
        students = new int[5];  // λ°°μ—΄ 생성!!

        // λ³€μˆ˜ κ°’ λŒ€μž…
        students[0] = 90;
        students[1] = 80;
        students[2] = 70;
        students[3] = 60;
        students[4] = 50;

        // λ³€μˆ˜ κ°’ μ‚¬μš©
        System.out.println("학생 1 점수 : " + students[0]);
        System.out.println("학생 2 점수 : " + students[1]);
        System.out.println("학생 3 점수 : " + students[2]);
        System.out.println("학생 4 점수 : " + students[3]);
        System.out.println("학생 5 점수 : " + students[4]);
    }
}

μ§€κΈˆλΆ€ν„° μ•„μ£Ό 간단해 λ³΄μ΄λŠ” λ‹€μŒ 두 쀄을 μ•„μ£Ό μžμ„Ένžˆ μ„€λͺ…ν•˜κ² λ‹€.

int[] students;  // 1. λ°°μ—΄ λ³€μˆ˜ μ„ μ–Έ
students = new int[5];  //2. λ°°μ—΄ 생성

1. λ°°μ—΄ λ³€μˆ˜ μ„ μ–Έ

  • 배열을 μ‚¬μš©ν•˜λ €λ©΄ int[ ] students; 와 같이 λ°°μ—΄ λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄μ•Ό ν•œλ‹€.
  • 일반적인 λ³€μˆ˜μ™€ 차이점은 int[ ]처럼 νƒ€μž… λ‹€μŒμ— λŒ€κ΄„ν˜Έ( [ ] )κ°€ λ“€μ–΄κ°„λ‹€λŠ” 점이닀.
  • λ°°μ—΄ λ³€μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€κ³  ν•΄μ„œ 아직 μ‚¬μš©ν•  수 μžˆλŠ” 배열이 λ§Œλ“€μ–΄μ§„ 것은 μ•„λ‹ˆλ‹€!
    • int aμ—λŠ” μ •μˆ˜λ₯Ό, double bμ—λŠ” μ‹€μˆ˜λ₯Ό 담을 수 μžˆλ‹€.
    • int[ ] students와 같은 λ°°μ—΄ λ³€μˆ˜μ—λŠ” 배열을 담을 수 μžˆλ‹€. (λ°°μ—΄ λ³€μˆ˜μ—λŠ” 10, 20 같은 값이 μ•„λ‹ˆλΌ λ°°μ—΄μ΄λΌλŠ” 것을 담을 수 μžˆλ‹€)

2. λ°°μ—΄ 생성

  • 배열을 μ‚¬μš©ν•˜λ €λ©΄ 배열을 생성해야 ν•œλ‹€.
  • new int[5]라고 μž…λ ₯ν•˜λ©΄ 총 5개의 intν˜• λ³€μˆ˜κ°€ λ§Œλ“€μ–΄μ§„λ‹€.
  • newλŠ” μƒˆλ‘œ μƒμ„±ν•œλ‹€λŠ” 뜻이고, int[5]λŠ” intν˜• λ³€μˆ˜ 5κ°œλΌλŠ” λœ»μ΄λ‹€. λ”°λΌμ„œ intν˜• λ³€μˆ˜ 5개λ₯Ό λ‹€λ£° 수 μžˆλŠ” 배열을 μƒˆλ‘œ λ§Œλ“ λ‹€λŠ” λœ»μ΄λ‹€.
  • μ•žμ„œ int student1, int student2 ... int student5κΉŒμ§€ 총 5개의 λ³€μˆ˜λ₯Ό 직접 μ„ μ–Έν–ˆλ‹€. 배열을 μ‚¬μš©ν•˜λ©΄ 이런 과정을 ν•œ λ²ˆμ— κΉ”λ”ν•˜κ²Œ μ²˜λ¦¬ν•  수 μžˆλ‹€.

λ°°μ—΄κ³Ό μ΄ˆκΈ°ν™”

  • new int[5]라고 ν•˜λ©΄ 총 5개의 intν˜• λ³€μˆ˜κ°€ λ§Œλ“€μ–΄μ§„λ‹€. μžλ°”λŠ” 배열을 생성할 λ•Œ κ·Έ 내뢀값을 μžλ™μœΌλ‘œ μ΄ˆκΈ°ν™”ν•œλ‹€.
  • μˆ«μžλŠ” 0, boolean은 false, String은 null(μ—†λ‹€λŠ” 뜻)둜 μ΄ˆκΈ°ν™”λœλ‹€.

3. λ°°μ—΄ μ°Έμ‘°κ°’ 보관

  • new int[5]둜 배열을 μƒμ„±ν•˜λ©΄ λ°°μ—΄μ˜ 크기만큼 λ©”λͺ¨λ¦¬λ₯Ό ν™•λ³΄ν•œλ‹€.
    • intν˜•μ„ 5개 μ‚¬μš©ν•˜λ©΄ 4 btye * 5 → 20 btyeλ₯Ό ν™•λ³΄ν•œλ‹€.
  • 배열을 μƒμ„±ν•˜κ³  λ‚˜λ©΄ μžλ°”λŠ” λ©”λͺ¨λ¦¬ μ–΄λ”˜κ°€μ— μžˆλŠ” 이 배열에 μ ‘κ·Όν•  수 μžˆλŠ” μ°Έμ‘°κ°’(μ£Όμ†Œ)(x001)을 λ°˜ν™˜ν•œλ‹€.
    • μ—¬κΈ°μ„œ x001이라고 ν‘œν˜„ν•œ 것이 참쑰값이닀.
  • μ•žμ„œ μ„ μ–Έν•œ λ³€μˆ˜μΈ int[ ] students에 μƒμ„±λœ λ°°μ—΄μ˜ μ°Έμ‘°κ°’(x001)을 λ³΄κ΄€ν•œλ‹€.
  • int[ ] students λ³€μˆ˜λŠ” new int[5]둜 μƒμ„±ν•œ λ°°μ—΄μ˜ 참쑰값을 κ°€μ§€κ³  μžˆλ‹€.
    • 이 λ³€μˆ˜λŠ” 참쑰값을 κ°€μ§€κ³  μžˆλ‹€. 이 참쑰값을 톡해 배열을 μ°Έμ‘°ν•  수 μžˆλ‹€. μ‰½κ²Œ μ΄μ•ΌκΈ°ν•΄μ„œ 참쑰값을 톡해 λ©”λͺ¨λ¦¬μ— μžˆλŠ” μ‹€μ œ 배열에 μ ‘κ·Όν•˜κ³  μ‚¬μš©ν•  수 μžˆλ‹€.
    • 참고둜 배열을 μƒμ„±ν•˜λŠ” new int[5] μžμ²΄μ—λŠ” μ•„λ¬΄λŸ° 이름이 μ—†λ‹€! κ·Έλƒ₯ intν˜• λ³€μˆ˜λ₯Ό 5개 μ—°μ†μœΌλ‘œ λ§Œλ“œλŠ” 것이닀. λ”°λΌμ„œ μƒμ„±ν•œ 배열에 μ ‘κ·Όν•˜λŠ” 방법이 ν•„μš”ν•˜λ‹€. λ”°λΌμ„œ 배열을 생성할 λ•Œ λ°˜ν™˜λ˜λŠ” 참쑰값을 μ–΄λ”˜κ°€μ— 보관해두어야 ν•œλ‹€. μ•žμ„œ int[ ] students λ³€μˆ˜μ— μ°Έμ‘°κ°’(x001)을 보관해 λ‘μ—ˆλ‹€. 이 λ³€μˆ˜λ₯Ό ν†΅ν•΄μ„œ 이 배열에 μ ‘κ·Όν•  수 μžˆλ‹€.

이 뢀뢄을 ν’€μ–΄μ„œ μ„€λͺ…ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

int[] students = new int[5];  // 1. λ°°μ—΄ 생성
int[] students = x001;  // 2. new int[5]의 결과둜 x001 참쑰값이 λ°˜ν™˜
students = x001;  // 3. μ΅œμ’… κ²°κ³Ό

참쑰값을 ν™•μΈν•˜κ³  μ‹Άλ‹€λ©΄ λ‹€μŒκ³Ό 같이 λ°°μ—΄μ˜ λ³€μˆ˜λ₯Ό 좜λ ₯ν•΄ 보면 λœλ‹€.

System.out.println(students);  // [I@10f87f48 @ μ•žμ˜ [IλŠ” intν˜• 배열을 λœ»ν•œλ‹€. @ 뒀에 16μ§„μˆ˜λŠ” 참쑰값을 λœ»ν•œλ‹€.
  • μƒμ„±ν•œ 배열을 μ°Έμ‘°ν•  수 μžˆλŠ”, λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œλ₯Ό λ‚˜νƒ€λ‚΄λŠ” νŠΉλ³„ν•œ 값이 μžˆλ‹€λŠ” μ •λ„λ§Œ μ΄ν•΄ν•˜λ©΄ μΆ©λΆ„ν•˜λ‹€.

 

λ°°μ—΄ μ‚¬μš©

인덱슀

배열은 λ³€μˆ˜μ™€ μ‚¬μš©λ²•μ΄ λΉ„μŠ·ν•œλ°, 차이점이 μžˆλ‹€λ©΄ λ‹€μŒκ³Ό 같이 [ ] 사이에 숫자 번호λ₯Ό λ„£μ–΄μ£Όλ©΄ λœλ‹€. λ°°μ—΄μ˜ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 숫자λ₯Ό 인덱슀(index)라고 ν•œλ‹€.

// λ³€μˆ˜ κ°’ λŒ€μž…
students[0] = 90;
students[1] = 80;

// λ³€μˆ˜ κ°’ μ‚¬μš©
System.out.println("학생 1 점수 : " + students[0]);
System.out.println("학생 2 점수 : " + students[1]);

배열은 0λΆ€ν„° μ‹œμž‘ν•œλ‹€
new int[5]와 같이 5개의 μš”μ†Œλ₯Ό κ°€μ§€λŠ” intν˜• 배열을 λ§Œλ“€μ—ˆλ‹€λ©΄ μΈλ±μŠ€λŠ” 0, 1, 2, 3, 4κ°€ μ‘΄μž¬ν•œλ‹€.
μ—¬κΈ°μ„œ μ£Όμ˜ν•΄μ•Ό ν•  점이 μžˆλŠ”λ° μΈλ±μŠ€λŠ” 0λΆ€ν„° μ‹œμž‘ν•œλ‹€λŠ” 것이닀. λ°°μ—΄μ˜ μš”μ†Œλ₯Ό 5개둜 μƒμ„±ν–ˆμ§€λ§Œ, μΈλ±μŠ€λŠ” 0λΆ€ν„° μ‹œμž‘ν•œλ‹€. λ”°λΌμ„œ μ‚¬μš© κ°€λŠ₯ν•œ 인덱슀의 λ²”μœ„λŠ” 0 ~ (n - 1)이 λœλ‹€. κ·Έλž˜μ„œ students[4]κ°€ λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μš”μ†Œμ΄λ‹€.

λ§Œμ•½ students[5]와 같이 μ ‘κ·Ό κ°€λŠ₯ν•œ λ°°μ—΄μ˜ 인덱슀 λ²”μœ„λ₯Ό λ„˜μ–΄κ°€λ©΄ λ‹€μŒκ³Ό 같은 였λ₯˜κ°€ λ°œμƒν•œλ‹€.
인덱슀 ν—ˆμš© λ²”μœ„λ₯Ό λ„˜μ–΄μ„€ λ•Œ λ°œμƒν•˜λŠ” 였λ₯˜

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds 
for length 5at array.ArrayRef1.main(ArrayRef1.java:14)

배열에 κ°’ λŒ€μž…

배열에 값을 λŒ€μž…ν•˜λ“  λ°°μ—΄μ˜ 값을 μ‚¬μš©ν•˜λ“  간에 일반적인 λ³€μˆ˜μ™€ μ‚¬μš©λ²•μ€ κ°™λ‹€. μΆ”κ°€λ‘œ [ ]λ₯Ό 톡해 인덱슀만 λ„£μ–΄μ£Όλ©΄ λœλ‹€.

students[0] = 90;  // 1. 배열에 값을 λŒ€μž…
x001[0] = 90;  // 2. λ³€μˆ˜μ— μžˆλŠ” 참쑰값을 톡해 μ‹€μ œ 배열에 μ ‘κ·Ό. 인덱슀λ₯Ό μ‚¬μš©ν•΄μ„œ ν•΄λ‹Ή μœ„μΉ˜μ˜ μš”μ†Œμ— μ ‘κ·Ό, κ°’ λŒ€μž…
students[1] = 80;  // 1. 배열에 값을 λŒ€μž…
x001[1] = 80;  // 2. λ³€μˆ˜μ— μžˆλŠ” 참쑰값을 톡해 μ‹€μ œ 배열에 μ ‘κ·Ό, 인덱슀λ₯Ό μ‚¬μš©ν•΄μ„œ ν•΄λ‹Ή μœ„μΉ˜μ˜ μš”μ†Œμ— μ ‘κ·Ό, κ°’ λŒ€μž…

λ°°μ—΄ κ°’ 읽기

// 1. λ³€μˆ˜ κ°’ 읽기
System.out.println("학생1 점수 : " + students[0]);
// 2. λ³€μˆ˜μ— μžˆλŠ” 참쑰값을 톡해 μ‹€μ œ 배열에 μ ‘κ·Ό, 인덱슀λ₯Ό μ‚¬μš©ν•΄μ„œ ν•΄λ‹Ή μœ„μΉ˜μ˜ μš”μ†Œμ— μ ‘κ·Ό
System.out.println("학생1 점수: " + x001[0]);
// 3. λ°°μ—΄μ˜ 값을 μ½μ–΄μ˜΄
System.out.println("학생1 점수 : " + 90);

배열을 μ‚¬μš©ν•˜λ©΄ μ΄λ ‡κ²Œ 참쑰값을 ν†΅ν•΄μ„œ μ‹€μ œ 배열에 μ ‘κ·Όν•˜κ³  인덱슀λ₯Ό ν†΅ν•΄μ„œ μ›ν•˜λŠ” μš”μ†Œλ₯Ό μ°ΎλŠ”λ‹€.

κΈ°λ³Έν˜• vs μ°Έμ‘°ν˜•

μžλ°”μ˜ λ³€μˆ˜ 데이터 νƒ€μž…μ„ κ°€μž₯ 크게 보면 κΈ°λ³Έν˜•κ³Ό μ°Έμ‘°ν˜•μœΌλ‘œ λΆ„λ₯˜ν•  수 μžˆλ‹€. μ‚¬μš©ν•˜λŠ” 값을 직접 넣을 수 μžˆλŠ” κΈ°λ³Έν˜•, 그리고 방금 λ³Έ λ°°μ—΄ λ³€μˆ˜μ™€ 같이 λ©”λͺ¨λ¦¬μ˜ 참쑰값을 넣을 수 μžˆλŠ” μ°Έμ‘°ν˜•μœΌλ‘œ λΆ„λ₯˜ν•  수 μžˆλ‹€.

  • κΈ°λ³Έν˜•(Primitive Type) : μš°λ¦¬κ°€ μ§€κΈˆκΉŒμ§€ 봀던 int, long, double, boolean처럼 λ³€μˆ˜μ— μ‚¬μš©ν•  값을 직접 넣을 수 μžˆλŠ” 데이터 νƒ€μž…μ„ κΈ°λ³Έν˜•(Primitive Type)이라 ν•œλ‹€.
  • μ°Έμ‘°ν˜•(Reference Type) : int[ ] students와 같이 데이터에 μ ‘κ·Όν•˜κΈ° μœ„ν•œ μ°Έμ‘°(μ£Όμ†Œ)λ₯Ό μ €μž₯ν•˜λŠ” 데이터 νƒ€μž…μ„ μ°Έμ‘°ν˜•(Reference Type)이라 ν•œλ‹€.

μ°Έκ³ 
배열은 μ™œ μ΄λ ‡κ²Œ λ³΅μž‘ν•˜κ²Œ μ°Έμ‘°ν˜•μ„ μ‚¬μš©ν• κΉŒ? μ§€κΈˆκΉŒμ§€ 배운 λ³€μˆ˜μ²˜λŸΌ λ‹¨μˆœνžˆ κ·Έ μ•ˆμ— 값을 λ„£κ³  μ‚¬μš©ν•˜λ©΄ λ˜λŠ” 것 μ•„λ‹κΉŒ?

κΈ°λ³Έν˜•μ€ λͺ¨λ‘ μ‚¬μ΄μ¦ˆκ°€ λͺ…ν™•ν•˜κ²Œ μ •ν•΄μ Έ μžˆλ‹€.

int i;  //4btye
long l;  //8btye
double d;  //8btye

그런데 배열은 λ‹€μŒκ³Ό 같이 λ™μ μœΌλ‘œ μ‚¬μ΄μ¦ˆλ₯Ό λ³€κ²½ν•  수 μžˆλ‹€.

int size = 10000;  // μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 값을 λ„£μ—ˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž.
new int[size];  // 이 μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” μ‹œμ μ— λ°°μ—΄μ˜ 크기가 μ •ν•΄μ§„λ‹€.
  • κΈ°λ³Έν˜•μ€ μ„ μ–Έκ³Ό λ™μ‹œμ— 크기가 μ •ν•΄μ§„λ‹€. λ”°λΌμ„œ 크기λ₯Ό λ™μ μœΌλ‘œ λ°”κΎΈκ±°λ‚˜ ν•  μˆ˜λŠ” μ—†λ‹€. λ°˜λ©΄μ— μ•žμ„œλ³Έ λ°°μ—΄κ³Ό 같은 μ°Έμ‘°ν˜•μ€ 크기λ₯Ό λ™μ μœΌλ‘œ ν• λ‹Ήν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ Scannerλ₯Ό μ‚¬μš©ν•΄μ„œ μ‚¬μš©μž μž…λ ₯에 따라 size λ³€μˆ˜μ˜ 값이 λ³€ν•˜κ³ , μƒμ„±λ˜λŠ” λ°°μ—΄μ˜ 크기도 λ‹¬λΌμ§ˆ 수 μžˆλ‹€. 이런 것을 동적 λ©”λͺ¨λ¦¬ 할당이라 ν•œλ‹€. κΈ°λ³Έν˜•μ€ μ„ μ–Έκ³Ό λ™μ‹œμ— μ‚¬μ΄μ¦ˆκ°€ μ •μ μœΌλ‘œ μ •ν•΄μ§€μ§€λ§Œ, μ°Έμ‘°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ 이처럼 λ™μ μœΌλ‘œ 크기가 λ³€ν•΄μ„œ μœ μ—°μ„±μ„ μ œκ³΅ν•  수 μžˆλ‹€.
  • κΈ°λ³Έν˜•μ€ μ‚¬μš©ν•  값을 직접 μ €μž₯ν•œλ‹€. λ°˜λ©΄μ— μ°Έμ‘°ν˜•μ€ λ©”λͺ¨λ¦¬μ— μ €μž₯된 λ°°μ—΄μ΄λ‚˜ 객체의 μ°Έμ‘°λ₯Ό μ €μž₯ν•œλ‹€. 이둜 인해 μ°Έμ‘°ν˜•μ€ 더 λ³΅μž‘ν•œ 데이터 ꡬ쑰λ₯Ό λ§Œλ“€κ³  관리할 수 μžˆλ‹€. 반면 κΈ°λ³Έν˜•μ€ 더 λΉ λ₯΄κ³  λ©”λͺ¨λ¦¬λ₯Ό 효율적으둜 μ²˜λ¦¬ν•œλ‹€.

 

λ°°μ—΄ λ¦¬νŽ™ν† λ§

λ°°μ—΄ λ¦¬νŽ™ν† λ§ - λ³€μˆ˜ κ°’ μ‚¬μš©

// λ³€μˆ˜ κ°’ μ‚¬μš©
System.out.println("학생1 점수 : " + students[0]);
System.out.println("학생2 점수 : " + students[1]);
System.out.println("학생3 점수 : " + students[2]);
System.out.println("학생4 점수 : " + students[3]);
System.out.println("학생5 점수 : " + students[4]);

λ³€μˆ˜λͺ…이 students둜 κ°™κΈ° λ•Œλ¬Έμ— μˆ«μžκ°€ λ°˜λ³΅λ˜λŠ” λΆ€λΆ„λ§Œ ν•΄κ²°ν•˜λ©΄ λ°˜λ³΅λ¬Έμ„ λ„μž…ν•  수 μžˆμ„ 것 κ°™λ‹€.

βœ”οΈ μ°Έκ³ 

λ¦¬νŽ™ν† λ§(Refactoring)은 기쑴의 μ½”λ“œ κΈ°λŠ₯은 μœ μ§€ν•˜λ©΄μ„œ λ‚΄λΆ€ ꡬ쑰λ₯Ό κ°œμ„ ν•˜μ—¬ 가독성을 높이고, μœ μ§€λ³΄μˆ˜λ₯Ό μš©μ΄ν•˜κ²Œ ν•˜λŠ” 과정을 λœ»ν•œλ‹€. μ΄λŠ” 쀑볡을 μ œκ±°ν•˜κ³ , λ³΅μž‘μ„±μ„ 쀄이며, μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ μ½”λ“œλ‘œ λ§Œλ“€κΈ° μœ„ν•΄ μˆ˜ν–‰λœλ‹€. λ¦¬νŽ™ν† λ§μ€ 버그λ₯Ό 쀄이고, ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯을 ν–₯상할 μˆ˜λ„ 있으며, μ½”λ“œμ˜ 섀계λ₯Ό κ°œμ„ ν•˜λŠ” 데에도 도움이 λœλ‹€.
μ‰½κ²Œ μ΄μ•ΌκΈ°ν•΄μ„œ μž‘λ™ν•˜λŠ” κΈ°λŠ₯은 λ˜‘κ°™μ€λ°, μ½”λ“œλ₯Ό κ°œμ„ ν•˜λŠ” 것을 λ¦¬νŽ™ν† λ§μ΄λΌ ν•œλ‹€.

Array1Ref2

package array;

public class Array1Ref2 {

    public static void main(String[] args) {
        int[] students;  // intν˜• λ°°μ—΄ λ³€μˆ˜ μ„ μ–Έ!
        students = new int[5];  // λ°°μ—΄ 생성!!

        // λ³€μˆ˜ κ°’ λŒ€μž…
        students[0] = 90;
        students[1] = 80;
        students[2] = 70;
        students[3] = 60;
        students[4] = 50;

        // λ³€μˆ˜ κ°’ μ‚¬μš©
        for (int i = 0; i < students.length; i ++) {
            System.out.println("학생 " + (i + 1) + " 점수 : " + students[i]);
        }
    }
}
  • λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•΄μ„œ 배열을 톡해 값을 μ‚¬μš©ν•˜λŠ” 뢀뢄을 효과적으둜 λ³€κ²½ν–ˆλ‹€.
  • λ°°μ—΄μ˜ μΈλ±μŠ€λŠ” 0λΆ€ν„° μ‹œμž‘ν•˜κΈ° λ•Œλ¬Έμ— λ°˜λ³΅λ¬Έμ—μ„œ i = 0을 μ΄ˆκΈ°κ°’μœΌλ‘œ μ‚¬μš©ν–ˆλ‹€.
  • students.length
    • λ°°μ—΄μ˜ 길이λ₯Ό μ œκ³΅ν•˜λŠ” νŠΉλ³„ν•œ κΈ°λŠ₯이닀.
    • 참고둜 이 값은 쑰회만 ν•  수 μžˆλ‹€. λŒ€μž…μ€ ν•  수 μ—†λ‹€.
    • ν˜„μž¬ λ°°μ—΄μ˜ 크기가 5이기 λ•Œλ¬Έμ— μ—¬κΈ°μ„œλŠ” 5κ°€ 좜λ ₯λœλ‹€.
  • for 문의 쑰건이 i < students.length이기 λ•Œλ¬Έμ— iλŠ” 0, 1, 2, 3, 4κΉŒμ§€λ§Œ λ°˜λ³΅ν•œλ‹€.
    • iκ°€ 5κ°€ 되면 5 < 5κ°€ λ˜λ©΄μ„œ 쑰건이 거짓이 되고, λ°˜λ³΅μ„ μ’…λ£Œν•œλ‹€.

λ°°μ—΄ λ¦¬νŽ™ν† λ§ - μ΄ˆκΈ°ν™”

배열은 { }λ₯Ό μ‚¬μš©ν•΄μ„œ 생성과 λ™μ‹œμ— νŽΈλ¦¬ν•˜κ²Œ μ΄ˆκΈ°ν™”ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

int[] students;
students = new int[]{90, 80, 70, 60, 50};  // λ°°μ—΄ 생성과 μ΄ˆκΈ°ν™”

Array1Ref3

package array;

public class Array1Ref3 {

    public static void main(String[] args) {
        int[] students;  // intν˜• λ°°μ—΄ λ³€μˆ˜ μ„ μ–Έ!
        students = new int[]{90, 80, 70, 60, 50};  // λ°°μ—΄ 생성과 μ΄ˆκΈ°ν™”!!

        // λ³€μˆ˜ κ°’ μ‚¬μš©
        for (int i = 0; i < students.length; i ++) {
            System.out.println("학생 " + (i + 1) + " 점수 : " + students[i]);
        }
    }
}

이해λ₯Ό 돕기 μœ„ν•΄ λ°°μ—΄ λ³€μˆ˜μ˜ μ„ μ–Έκ³Ό λ°°μ—΄μ˜ 생성 및 μ΄ˆκΈ°ν™”λ₯Ό 두 μ€„λ‘œ λ‚˜λˆ΄μ§€λ§Œ λ‹€μŒκ³Ό 같이 ν•œ 쀄도 κ°€λŠ₯ν•˜λ‹€.

int[] students = new int[]{90, 80, 70, 60, 50};  // λ°°μ—΄ λ³€μˆ˜ μ„ μ–Έ, λ°°μ—΄ 생성과 μ΄ˆκΈ°ν™”

λ°°μ—΄ λ¦¬νŽ™ν† λ§ - κ°„λ‹¨ν•œ λ°°μ—΄ 생성

배열은 { }만 μ‚¬μš©ν•΄μ„œ 생성과 λ™μ‹œμ— νŽΈλ¦¬ν•˜κ²Œ μ΄ˆκΈ°ν™”ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

λ°°μ—΄μ˜ νŽΈλ¦¬ν•œ μ΄ˆκΈ°ν™”

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

단 μ΄λ•ŒλŠ” μ˜ˆμ œμ™€ 같이 λ°°μ—΄ λ³€μˆ˜μ˜ 선언을 ν•œ 쀄에 ν•¨κ»˜ μ‚¬μš©ν•  λ•Œλ§Œ κ°€λŠ₯ν•˜λ‹€.
λ¬Όλ‘  μ΄λ ‡κ²Œ ν•˜λ”λΌλ„ μžλ°”κ°€ λ‚΄λΆ€μ—μ„œ λ°°μ—΄ μš”μ†Œμ˜ 크기λ₯Ό 보고 new int[5]을 μ‚¬μš©ν•΄μ„œ 배열을 μƒμ„±ν•œλ‹€. λ”°λΌμ„œ κΈ°μ‘΄ μ½”λ“œλ₯Ό 쑰금 더 νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” 편의 κΈ°λŠ₯이라 μƒκ°ν•˜λ©΄ λœλ‹€.

였λ₯˜

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

Array1Ref4

package array;

public class Array1Ref4 {

    public static void main(String[] args) {
        int[] students = {90, 80, 70, 60, 50};  // λ°°μ—΄ 생성과 μ΄ˆκΈ°ν™”!!

        // λ³€μˆ˜ κ°’ μ‚¬μš©
        for (int i = 0; i < students.length; i ++) {
            System.out.println("학생 " + (i + 1) + " 점수 : " + students[i]);
        }
    }
}

이제 ν•™μƒμ˜ 점수λ₯Ό 좔가해도 {90, 80, 70, 60, 50}의 λ‚΄μš©λ§Œ λ³€κ²½ν•˜λ©΄ λœλ‹€. 그러면 λ‚˜λ¨Έμ§€ μ½”λ“œλŠ” λ³€κ²½ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.
배열을 μ‚¬μš©ν•œ 덕뢄에 ν”„λ‘œκ·Έλž¨μ„ μ „μ²΄μ μœΌλ‘œ 잘 ꡬ쑰화할 수 μžˆλ‹€.

 

2차원 λ°°μ—΄

2차원 배열은 이름 κ·ΈλŒ€λ‘œ ν•˜λ‚˜μ˜ 차원이 μΆ”κ°€λœλ‹€. 2차원 배열은 ν–‰κ³Ό μ—΄λ‘œ κ΅¬μ„±λœλ‹€.

2차원 배열은 int[ ][ ] arr = new int[2][3]와 같이 μ„ μ–Έν•˜κ³  μƒμ„±ν•œλ‹€. 그리고 arr[1][2]와 같이 μ‚¬μš©ν•˜λŠ”λ°, λ¨Όμ € ν–‰ 번호λ₯Ό μ°Ύκ³ , κ·Έλ‹€μŒμ— μ—΄ 번호λ₯Ό 찾으면 λœλ‹€.
행은 row, 열은 column이라고 ν•œλ‹€. 자주 μ‚¬μš©ν•˜λŠ” λ‹¨μ–΄μ΄λ―€λ‘œ μ•Œμ•„λ‘μž!

2차원 λ°°μ—΄μ˜ μ‚¬μš©λ²•μ€ [ ]κ°€ ν•˜λ‚˜ μΆ”κ°€λ˜λŠ” 것을 μ œμ™Έν•˜κ³ λŠ” 1차원 λ°°μ—΄κ³Ό κ°™λ‹€.

arr[ν–‰][μ—΄], arr[row][column]

ArrayDi0

package array;

public class ArrayDi0 {

    public static void main(String[] args) {
        // 2 x 3 2차원 배열을 λ§Œλ“ λ‹€.
        int[][] arr = new int[2][3];

        arr[0][0] = 1;  // 0ν–‰ 0μ—΄
        arr[0][1] = 2;  // 0ν–‰ 1μ—΄
        arr[0][2] = 3;  // 0ν–‰ 2μ—΄
        arr[1][0] = 4;  // 1ν–‰ 0μ—΄
        arr[1][1] = 5;  // 1ν–‰ 1μ—΄
        arr[1][2] = 6;  // 1ν–‰ 2μ—΄

        // 0ν–‰ 좜λ ₯
        System.out.print(arr[0][0] + " ");  // 0μ—΄ 좜λ ₯
        System.out.print(arr[0][1] + " ");  // 1μ—΄ 좜λ ₯
        System.out.print(arr[0][2] + " ");  // 2μ—΄ 좜λ ₯

        System.out.println();  // ν•œ 행이 λλ‚˜λ©΄ 라인을 λ³€κ²½ν•œλ‹€.

        // 1ν–‰ 좜λ ₯
        System.out.print(arr[1][0] + " ");  // 0μ—΄ 좜λ ₯
        System.out.print(arr[1][1] + " ");  // 1μ—΄ 좜λ ₯
        System.out.print(arr[1][2] + " ");  // 2μ—΄ 좜λ ₯

        System.out.println();  // ν•œ 행이 λλ‚˜λ©΄ 라인을 λ³€κ²½ν•œλ‹€.
    }
}
  • 2차원 배열을 λ§Œλ“€κ³ , 배열에 값을 1λΆ€ν„° 6κΉŒμ§€ μˆœμ„œλŒ€λ‘œ 직접 μž…λ ₯ν•œλ‹€.

 

2차원 λ°°μ—΄ - λ¦¬νŽ™ν† λ§ 1

ꡬ쑰 κ°œμ„  - ν–‰ 좜λ ₯ 반볡

ꡬ쑰 λ³€κ²½

// 0ν–‰ 좜λ ₯
System.out.print(arr[0][0] + " ");  // 0μ—΄ 좜λ ₯
System.out.print(arr[0][1] + " ");  // 1μ—΄ 좜λ ₯
System.out.print(arr[0][2] + " ");  // 2μ—΄ 좜λ ₯

System.out.println();  // ν•œ 행이 λλ‚˜λ©΄ 라인을 λ³€κ²½ν•œλ‹€.

// 1ν–‰ 좜λ ₯
System.out.print(arr[1][0] + " ");  // 0μ—΄ 좜λ ₯
System.out.print(arr[1][1] + " ");  // 1μ—΄ 좜λ ₯
System.out.print(arr[1][2] + " ");  // 2μ—΄ 좜λ ₯

System.out.println();  // ν•œ 행이 λλ‚˜λ©΄ 라인을 λ³€κ²½ν•œλ‹€.

μ½”λ“œλ₯Ό 보면 행을 좜λ ₯ν•˜λŠ” 뢀뢄이 거의 κ°™λ‹€. 차이가 μžˆλŠ” 뢀뢄은 ν–‰μ—μ„œ arr[0]으둜 μ‹œμž‘ν• μ§€ arr[1]둜 μ‹œμž‘ν•  μ§€μ˜ 차이닀.

λ‹€μŒκ³Ό 같이 ν–‰(row)에 λ“€μ–΄κ°€λŠ” 숫자만 ν•˜λ‚˜μ”© μ¦κ°€ν•˜λ©΄μ„œ λ°˜λ³΅ν•˜λ©΄ 될 것 κ°™λ‹€.

// 0ν–‰ 좜λ ₯
System.out.print(arr[0][0] + " ");  // 0μ—΄ 좜λ ₯
System.out.print(arr[0][1] + " ");  // 1μ—΄ 좜λ ₯
System.out.print(arr[0][2] + " ");  // 2μ—΄ 좜λ ₯

System.out.println();  // ν•œ 행이 λλ‚˜λ©΄ 라인을 λ³€κ²½ν•œλ‹€.

ArrayDi1

package array;

public class ArrayDi1 {

    public static void main(String[] args) {
        // 2 x 3 2차원 배열을 λ§Œλ“ λ‹€.
        int[][] arr = new int[2][3];

        arr[0][0] = 1;  // 0ν–‰ 0μ—΄
        arr[0][1] = 2;  // 0ν–‰ 1μ—΄
        arr[0][2] = 3;  // 0ν–‰ 2μ—΄
        arr[1][0] = 4;  // 1ν–‰ 0μ—΄
        arr[1][1] = 5;  // 1ν–‰ 1μ—΄
        arr[1][2] = 6;  // 1ν–‰ 2μ—΄

        // 0, 1ν–‰ 좜λ ₯
        for (int row = 0; row < 2; row++) {
            System.out.print(arr[row][0] + " ");  // 0μ—΄ 좜λ ₯
            System.out.print(arr[row][1] + " ");  // 1μ—΄ 좜λ ₯
            System.out.print(arr[row][2] + " ");  // 2μ—΄ 좜λ ₯

            System.out.println();  // ν•œ 행이 λλ‚˜λ©΄ 라인을 λ³€κ²½ν•œλ‹€.
        }
    }
}
  • for문을 ν†΅ν•΄μ„œ ν–‰(row)을 λ°˜λ³΅ν•΄μ„œ μ ‘κ·Όν•œλ‹€. 각 ν–‰ μ•ˆμ—μ„œ μ—΄(column)이 3κ°œμ΄λ―€λ‘œ arr[row][0], arr[row][1], arr[row][2] 3번 좜λ ₯ν•œλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ for 문을 ν•œλ²ˆ λ„λŠ” λ™μ•ˆ 3개의 열을 좜λ ₯ν•  수 μžˆλ‹€.
    • row = 0의 for문이 μ‹€ν–‰λ˜λ©΄ arr[0][0], arr[0][1], arr[0][2]둜 1 2 3 이 좜λ ₯λœλ‹€.
    • row = 1의 for문이 μ‹€ν–‰λ˜λ©΄ arr[1][0], arr[1][1], arr[1][2]둜 4 5 6 이 좜λ ₯λœλ‹€.

ꡬ쑰 κ°œμ„  - μ—΄ 좜λ ₯ 반볡

ArrayDi2

package array;

public class ArrayDi2 {

    public static void main(String[] args) {
        // 2 x 3 2차원 배열을 λ§Œλ“ λ‹€.
        int[][] arr = new int[2][3];

        arr[0][0] = 1;  // 0ν–‰ 0μ—΄
        arr[0][1] = 2;  // 0ν–‰ 1μ—΄
        arr[0][2] = 3;  // 0ν–‰ 2μ—΄
        arr[1][0] = 4;  // 1ν–‰ 0μ—΄
        arr[1][1] = 5;  // 1ν–‰ 1μ—΄
        arr[1][2] = 6;  // 1ν–‰ 2μ—΄

        // 0, 1ν–‰ 좜λ ₯
        for (int row = 0; row < 2; row++) {
            for (int col = 0; col < 3; col++) {
                System.out.print(arr[row][col] + " ");  // 0μ—΄ 좜λ ₯
            }
            System.out.println();  // ν•œ 행이 λλ‚˜λ©΄ 라인을 λ³€κ²½ν•œλ‹€.
        }
    }
}
  • for문을 2번 μ€‘μ²©ν•΄μ„œ μ‚¬μš©ν•˜λŠ”λ°, 첫 번째 for문은 행을 νƒμƒ‰ν•˜κ³ , 내뢀에 μžˆλŠ” 두 번째 for문은 열을 νƒμƒ‰ν•œλ‹€.
  • for문을 μ‚¬μš©ν•΄μ„œ 열을 효과적으둜 좜λ ₯ν–ˆλ‹€.

 

2차원 λ°°μ—΄ - λ¦¬νŽ™ν† λ§ 2

ꡬ쑰 κ°œμ„ , μ΄ˆκΈ°ν™”, λ°°μ—΄μ˜ 길이

  • μ΄ˆκΈ°ν™” : κΈ°μ‘΄ λ°°μ—΄μ²˜λŸΌ 2차원 배열도 νŽΈλ¦¬ν•˜κ²Œ μ΄ˆκΈ°ν™”ν•  수 μžˆλ‹€.
  • forλ¬Έμ—μ„œ λ°°μ—΄μ˜ 길이 ν™œμš© : λ°°μ—΄μ˜ 길이가 달라지면 forλ¬Έμ—μ„œ row < 2, column < 3 같은 뢀뢄을 같이 λ³€κ²½ν•΄μ•Ό ν•œλ‹€. 이 뢀뢄을 λ°°μ—΄μ˜ 길이λ₯Ό μ‚¬μš©ν•˜λ„λ‘ λ³€κ²½ν•΄ 보자. 배열이 μ»€μ§€κ±°λ‚˜ 쀄어듀어도 for문의 μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³  κ·ΈλŒ€λ‘œ μœ μ§€ν•  수 μžˆλ‹€.

ArrayDi3

package array;

public class ArrayDi3 {

    public static void main(String[] args) {
        // 2 x 3 2차원 배열을 λ§Œλ“ λ‹€.
        int[][] arr = {
            {1, 2, 3},
            {4, 5, 6}
        };  // ν–‰2, μ—΄3

        // 0, 1ν–‰ 좜λ ₯
        for (int row = 0; row < 2; row++) {
            for (int col = 0; col < 3; col++) {
                System.out.print(arr[row][col] + " ");  // 0μ—΄ 좜λ ₯
            }
            System.out.println();  // ν•œ 행이 λλ‚˜λ©΄ 라인을 λ³€κ²½ν•œλ‹€.
        }
    }
}

λ°°μ—΄μ˜ 길이

forλ¬Έμ—μ„œ 2차원 λ°°μ—΄μ˜ 길이λ₯Ό ν™œμš©ν–ˆλ‹€.

  • arr.lengthλŠ” ν–‰μ˜ 길이λ₯Ό λœ»ν•œλ‹€. μ—¬κΈ°μ„œλŠ” 2κ°€ 좜λ ₯λœλ‹€.
    • { { }, { } }λ₯Ό 생각해 보면 arr 배열은 { }, { } 2개의 λ°°μ—΄ μš”μ†Œλ₯Ό κ°€μ§„λ‹€.
  • arr[row].lengthλŠ” μ—΄μ˜ 길이λ₯Ό λœ»ν•œλ‹€. μ—¬κΈ°μ„œλŠ” 3이 좜λ ₯λœλ‹€.
    • arr[0]은 {1, 2, 3} 배열을 λœ»ν•œλ‹€. 이 λ°°μ—΄μ—λŠ” 3개의 μš”μ†Œκ°€ μžˆλ‹€.
    • arr[1]은 {4, 5, 6} 배열을 λœ»ν•œλ‹€. 이 λ°°μ—΄μ—λŠ” 3개의 μš”μ†Œκ°€ μžˆλ‹€.

ꡬ쑰 κ°œμ„  - κ°’ μž…λ ₯

package array;

public class ArrayDi4 {

    public static void main(String[] args) {
        // 2 x 3 2차원 배열을 λ§Œλ“ λ‹€.
        int[][] arr = new int[2][3];// ν–‰2, μ—΄3

        int i = 1;
        for (int row = 0; row < arr.length; row++) {
            for (int col = 0; col < arr[row].length; col++) {
                arr[row][col] = i++;
            }
        }

        // 0, 1ν–‰ 좜λ ₯
        for (int row = 0; row < 2; row++) {
            for (int col = 0; col < 3; col++) {
                System.out.print(arr[row][col] + " ");  // 0μ—΄ 좜λ ₯
            }
            System.out.println();  // ν•œ 행이 λλ‚˜λ©΄ 라인을 λ³€κ²½ν•œλ‹€.
        }
    }
}
  • μ€‘μ²©λœ for문을 μ‚¬μš©ν•΄μ„œ 값을 μˆœμ„œλŒ€λ‘œ μž…λ ₯ν•œλ‹€.
  • arr[row][col] = i++ ν›„μ˜ 증감 μ—°μ‚°μž(++)λ₯Ό μ‚¬μš©ν•΄μ„œ 값을 λ¨Όμ € λŒ€μž…ν•œ λ‹€μŒμ— μ¦κ°€ν•œλ‹€.
    • μ½”λ“œμ—μ„œ int i = 1으둜 iκ°€ 1λΆ€ν„° μ‹œμž‘ν•œλ‹€.

2차원 λ°°μ—΄ μ„ μ–Έ 뢀뢄인 new int[2][3]을 new[4][5]처럼 λ‹€λ₯Έ 숫자둜 변경해도 잘 λ™μž‘ν•˜λŠ” 것을 확인할 수 μžˆλ‹€.

 

ν–₯μƒλœ forλ¬Έ(Enhanced For Loop)

ν–₯μƒλœ for문을 μ΄ν•΄ν•˜λ €λ©΄ 배열을 λ¨Όμ € μ•Œμ•„μ•Ό ν•œλ‹€. 각각의 μš”μ†Œλ₯Ό νƒμƒ‰ν•œλ‹€λŠ” 의미둜 for-each문이라고도 많이 λΆ€λ₯Έλ‹€.
ν–₯μƒλœ for문은 배열을 μ‚¬μš©ν•  λ•Œ κΈ°μ‘΄ for문보닀 더 νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

ν–₯μƒλœ forλ¬Έ μ •μ˜

for (λ³€μˆ˜ : λ°°μ—΄ λ˜λŠ” μ»¬λ ‰μ…˜) {
  // λ°°μ—΄ λ˜λŠ” μ»¬λ ‰μ…˜μ˜ μš”μ†Œλ₯Ό μˆœν™”ν•˜λ©΄μ„œ μˆ˜ν–‰ν•  μž‘μ—…
}

EnhancedFor1

package array;

public class EnhancedFor1 {

    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};

        // 일반 for문
        for (int i = 0; i < numbers.length; i++) {
            int number = numbers[i];
            System.out.println(number);
        }

        // ν–₯μƒλœ forλ¬Έ, for-eachλ¬Έ
        for (int number : numbers) {
            System.out.println(number);
        }
    }
}

일반 for문

// 일반 for문
for (int i = 0; i < numbers.length; i++) {
    int number = numbers[i];
    System.out.println(number);
}

배열에 μžˆλŠ” 값을 μˆœμ„œλŒ€λ‘œ μ½μ–΄μ„œ number λ³€μˆ˜μ— λ„£κ³  좜λ ₯ν•œλ‹€.
배열은 μ²˜μŒλΆ€ν„° λκΉŒμ§€ μˆœμ„œλŒ€λ‘œ μ½μ–΄μ„œ μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€. 그런데 λ°°μ—΄μ˜ 값을 읽으렀면 int i와 같은 인덱슀λ₯Ό 탐색할 수 μžˆλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄μ•Ό ν•œλ‹€. 그리고 i < numbers.length와 같이 λ°°μ—΄μ˜ 끝 쑰건을 μ§€μ •ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ λ°°μ—΄μ˜ 값을 ν•˜λ‚˜ 읽을 λ•Œλ§ˆλ‹€ 인덱슀λ₯Ό ν•˜λ‚˜μ”© 증가해야 ν•œλ‹€.

개발자 μž…μž₯μ—μ„œλŠ” κ·Έλƒ₯ 배열을 μˆœμ„œλŒ€λ‘œ μ²˜μŒλΆ€ν„° λκΉŒμ§€ νƒμƒ‰ν•˜κ³  싢은데, λ„ˆλ¬΄ λ²ˆμž‘ν•œ 일을 ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€. κ·Έλž˜μ„œ ν–₯μƒλœ for문이 λ“±μž₯ν–ˆλ‹€.

ν–₯μƒλœ forλ¬Έ

// ν–₯μƒλœ forλ¬Έ, for-eachλ¬Έ
for (int number : numbers) {
    System.out.println(number);
}
  • μ•žμ„œ 일반 forλ¬Έκ³Ό λ™μΌν•˜κ²Œ μž‘λ™ν•œλ‹€.
  • ν–₯μƒλœ for문은 λ°°μ—΄μ˜ 인덱슀λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ , μ’…λ£Œ 쑰건을 μ£Όμ§€ μ•Šμ•„λ„ λœλ‹€. λ‹¨μˆœνžˆ ν•΄λ‹Ή 배열을 μ²˜μŒλΆ€ν„° λκΉŒμ§€ νƒμƒ‰ν•œλ‹€.
  • : 의 였λ₯Έμͺ½μ— numbers와 같이 탐색할 배열을 μ„ νƒν•˜κ³ , : 의 μ™Όμͺ½μ— int number와 같이 λ°˜λ³΅ν•  λ•Œλ§ˆλ‹€ 찾은 값을 μ €μž₯ν•  λ³€μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€. 그러면 λ°°μ—΄μ˜ 값을 ν•˜λ‚˜μ”© κΊΌλ‚΄μ„œ μ™Όμͺ½μ— μžˆλŠ” number에 λ‹΄κ³  for문을 μˆ˜ν–‰ν•œλ‹€. for문의 끝에 κ°€λ©΄ λ‹€μŒ 값을 κΊΌλ‚΄μ„œ number에 λ‹΄κ³  for문을 반볡 μˆ˜ν–‰ν•œλ‹€. numbers λ°°μ—΄μ˜ 끝에 λ„λ‹¬ν•΄μ„œ 더 값이 μ—†μœΌλ©΄ for문이 μ™„μ „νžˆ μ’…λ£Œλœλ‹€.
  • ν–₯μƒλœ for문은 λ°°μ—΄μ˜ 인덱슀λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ λ„ λ°°μ—΄μ˜ μš”μ†Œλ₯Ό μˆœνœ˜ν•  수 있기 λ•Œλ¬Έμ— μ½”λ“œκ°€ κ°„κ²°ν•˜κ³  가독성이 μ’‹λ‹€.

ν–₯μƒλœ for문을 μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λŠ” 경우
그런데 ν–₯μƒλœ for문을 μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€.

ν–₯μƒλœ forλ¬Έμ—λŠ” μ¦κ°€ν•˜λŠ” 인덱슀 값이 감좔어져 μžˆλ‹€. λ”°λΌμ„œ int i와 같은 인덱슀 값을 직접 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ—λŠ” ν–₯μƒλœ for문을 μ‚¬μš©ν•  수 μ—†λ‹€.

βœ”οΈ μ°Έκ³ 

ν–₯μƒλœ forλ¬Έ 단좕킀 : iter
// for-each문을 μ‚¬μš©ν•  수 μ—†λŠ” 경우, μ¦κ°€ν•˜λŠ” index 값이 ν•„μš”ν•  λ•Œ
for(int i = 0; i < numbers.length;i++) {
    System.out.println("number" + i + "번의 κ²°κ³ΌλŠ” : " + numbers[i]);
}

μ¦κ°€ν•˜λŠ” i값을 좜λ ₯ν•΄μ•Ό ν•˜λ―€λ‘œ ν–₯μƒλœ forλ¬Έ λŒ€μ‹ μ— 일반 for문을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

μ–΅μ§€μŠ€λŸ½κ²Œ ν–₯μƒλœ for문을 μ‚¬μš©ν•˜λŠ” 것이 κ°€λŠ₯ν•˜μ§€λ§Œ, 이런 경우 일반 for문을 μ‚¬μš©ν•˜λŠ” 것이 더 μ’‹λ‹€.

int i = 0;
for(int number : numbers) {
    System.out.println("number" + i + "번의 κ²°κ³ΌλŠ” : " + number);
    i++;
}

 

λ¬Έμ œμ™€ 풀이

문제 - 배열을 μ‚¬μš©ν•˜λ„λ‘ λ³€κ²½

λ‹€μŒ 문제λ₯Ό 배열을 μ‚¬μš©ν•΄μ„œ κ°œμ„ ν•˜μž.

package array.ex;

public class ArrayEx1 {
	public static void main(String[] args) {
        int student1 = 90;
        int student2 = 80;
        int student3 = 70;
        int student4 = 60;
        int student5 = 50;
        
        int total = student1 + student2 + student3 + student4 + student5; 
        double average = (double) total / 5;
        
        System.out.println("점수 총합: " + total); 
        System.out.println("점수 평균: " + average);
    } 
}

μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œ

점수 총합 : 350
점수 평균 : 70.0

μ •λ‹΅

package array.ex;

public class ArrayEx1 {

    public static void main(String[] args) {
        int[] students = {90, 80, 70, 60, 50};

        int total = 0;
        for (int student : students) {
            total = total + student;
        }
        double average = (double) total / 5;
        
        System.out.println("점수 총합: " + total);
        System.out.println("점수 평균: " + average);
    }
}

문제 - λ°°μ—΄μ˜ μž…λ ₯κ³Ό 좜λ ₯

μ‚¬μš©μžμ—κ²Œ 5개의 μ •μˆ˜λ₯Ό μž…λ ₯λ°›μ•„μ„œ 배열에 μ €μž₯ν•˜κ³  μž…λ ₯ μˆœμ„œλŒ€λ‘œ 좜λ ₯ν•˜μž.
좜λ ₯ μ‹œ 좜λ ₯ 포맷은 1, 2, 3, 4, 5와 같이 ,μ‰Όν‘œλ₯Ό μ‚¬μš©ν•΄μ„œ κ΅¬λΆ„ν•˜κ³ , λ§ˆμ§€λ§‰μ—λŠ” μ‰Όν‘œλ₯Ό λ„£μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œ

5개의 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” :
1
2
3
4
5
좜λ ₯
1, 2, 3, 4, 5

μ •λ‹΅

package array.ex;

import java.util.Scanner;

public class ArrayEx2 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[] numbers = new int[5];

        System.out.println("5개의 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” : ");

        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = scanner.nextInt();
        }

        System.out.println("좜λ ₯");

        for (int number : numbers) {
            System.out.print(number);

            if (number < numbers.length) {
                System.out.print(", ");
            }
        }
    }
}

문제 - λ°°μ—΄κ³Ό μ—­μˆœ 좜λ ₯

μ‚¬μš©μžμ—κ²Œ 5개의 μ •μˆ˜λ₯Ό μž…λ ₯λ°›μ•„μ„œ 배열에 μ €μž₯ν•˜κ³ , μž…λ ₯받은 μˆœμ„œμ˜ λ°˜λŒ€μΈ μ—­μˆœμœΌλ‘œ 좜λ ₯ν•˜μž.
좜λ ₯ μ‹œ 좜λ ₯ λͺ¨νŽ«μ€ 5, 4, 3, 2, 1κ³Ό 같이 ,μ‰Όν‘œλ₯Ό μ‚¬μš©ν•΄μ„œ κ΅¬λΆ„ν•˜κ³ , λ§ˆμ§€λ§‰μ—λŠ” μ‰Όν‘œλ₯Ό λ„£μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œ

5개의 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš”:
1
2
3
4
5
μž…λ ₯ν•œ μ •μˆ˜λ₯Ό μ—­μˆœμœΌλ‘œ 좜λ ₯ : 
5, 4, 3, 2, 1

μ •λ‹΅

package array.ex;

import java.util.Scanner;

public class ArrayEx3 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[] numbers = new int[5];

        System.out.println("5개의 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” : ");

        for (int i = numbers.length - 1; i >= 0; i--) {
            numbers[i] = scanner.nextInt();
        }

        System.out.println("μž…λ ₯ν•œ μ •μˆ˜λ₯Ό μ—­μˆœμœΌλ‘œ 좜λ ₯ : ");

        for (int i = 0; i < numbers.length; i++) {
            System.out.print(numbers[i]);

            if (i < numbers.length - 1) {
                System.out.print(", ");
            }
        }
    }
}

문제 - 합계와 평균

μ‚¬μš©μžμ—κ²Œ 5개의 μ •μˆ˜λ₯Ό μž…λ ₯λ°›μ•„μ„œ 이듀 μ •μˆ˜μ˜ 합계와 평균을 κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μž.

μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œ

5개의 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” : 
1
2
3
4
5
μž…λ ₯ν•œ μ •μˆ˜μ˜ 합계 : 15
μž…λ ₯ν•œ μ •μˆ˜μ˜ 평균 : 3.0

μ •λ‹΅

package array.ex;

import java.util.Scanner;

public class ArrayEx4 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[] numbers = new int[5];

        System.out.println("5개의 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” : ");

        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = scanner.nextInt();
        }

        int sum = 0;
        for (int number : numbers) {
            sum += number;
        }
         double average = (double) sum / numbers.length;

        System.out.println("μž…λ ₯ν•œ μ •μˆ˜μ˜ 합계 : " + sum);
        System.out.println("μž…λ ₯ν•œ μ •μˆ˜μ˜ 평균 : " + average);
    }
}

문제 - 합계와 평균 2

이전 λ¬Έμ œμ—μ„œ μž…λ ₯받을 숫자의 개수λ₯Ό μž…λ ₯받도둝 κ°œμ„ ν•˜μž.

μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œ 1

μž…λ ₯받을 숫자의 개수λ₯Ό μž…λ ₯ν•˜μ„Έμš” : 3
3개의 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” : 
1
2
3
μž…λ ₯ν•œ μ •μˆ˜μ˜ 합계 : 6
μž…λ ₯ν•œ μ •μˆ˜μ˜ 평균 : 2.0

μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œ 2

μž…λ ₯받을 숫자의 개수λ₯Ό μž…λ ₯ν•˜μ„Έμš” : 5
5개의 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” : 
1
2
3
4
5
μž…λ ₯ν•œ μ •μˆ˜μ˜ 합계 : 15
μž…λ ₯ν•œ μ •μˆ˜μ˜ 평균 : 3.0

μ •λ‹΅

package array.ex;

import java.util.Scanner;

public class ArrayEx5 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("μž…λ ₯받을 숫자의 개수λ₯Ό μž…λ ₯ν•˜μ„Έμš” : ");
        int num = scanner.nextInt();

        int[] numbers = new int[num];

        System.out.println(num + "개의 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” : ");

        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = scanner.nextInt();
        }

        int sum = 0;
        for (int number : numbers) {
            sum += number;
        }
         double average = (double) sum / numbers.length;

        System.out.println("μž…λ ₯ν•œ μ •μˆ˜μ˜ 합계 = " + sum);
        System.out.println("μž…λ ₯ν•œ μ •μˆ˜μ˜ 평균 = " + average);
    }
}

 

λ¬Έμ œμ™€ 풀이 2

문제 - κ°€μž₯ μž‘μ€ 수, 큰 수 μ°ΎκΈ°

μ‚¬μš©μžλ‘œλΆ€ν„° n개의 μ •μˆ˜λ₯Ό μž…λ ₯λ°›μ•„ 배열에 μ €μž₯ν•œ ν›„, λ°°μ—΄ λ‚΄μ—μ„œ κ°€μž₯ μž‘μ€ μˆ˜μ™€ κ°€μž₯ 큰 수λ₯Ό μ°Ύμ•„ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μž. μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œλ₯Ό μ°Έκ³ ν•˜μž.

μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œ

μž…λ ₯받을 숫자의 개수λ₯Ό μž…λ ₯ν•˜μ„Έμš” : 3
3개의 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” :
1
2
5
κ°€μž₯ μž‘μ€ μ •μˆ˜ : 1
κ°€μž₯ 큰 μ •μˆ˜ : 5

μ •λ‹΅

package array.ex;

import java.util.Scanner;

public class ArrayEx6 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("μž…λ ₯받을 숫자의 개수λ₯Ό μž…λ ₯ν•˜μ„Έμš” : ");
        int num = scanner.nextInt();

        int[] numbers = new int[num];

        System.out.println(num + "개의 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” : ");

        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = scanner.nextInt();
        }

        int minNum = numbers[0];
        int maxNum = numbers[0];

        for (int number : numbers) {
            if (number < minNum) {
                minNum = number;
            }

            if (number > maxNum) {
                maxNum = number;
            }
        }

        System.out.println("κ°€μž₯ μž‘μ€ μ •μˆ˜ : " + minNum);
        System.out.println("κ°€μž₯ 큰 μ •μˆ˜ : " + maxNum);
    }
}

문제 - 2차원 λ°°μ—΄ 1

μ‚¬μš©μžλ‘œλΆ€ν„° 4λͺ… ν•™μƒμ˜ κ΅­μ–΄, μˆ˜ν•™, μ˜μ–΄ 점수λ₯Ό μž…λ ₯λ°›μ•„ 각 ν•™μƒμ˜ 총점과 평균을 κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μž. 2차원 배열을 μ‚¬μš©ν•˜κ³ , μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œλ₯Ό μ°Έκ³ ν•˜μž.

μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œ

1번 ν•™μƒμ˜ 성적을 μž…λ ₯ν•˜μ„Έμš”:
κ΅­μ–΄ 점수:100
μ˜μ–΄ 점수:80
μˆ˜ν•™ 점수:70
2번 ν•™μƒμ˜ 성적을 μž…λ ₯ν•˜μ„Έμš”:
κ΅­μ–΄ 점수:30
μ˜μ–΄ 점수:40
μˆ˜ν•™ 점수:50
3번 ν•™μƒμ˜ 성적을 μž…λ ₯ν•˜μ„Έμš”:
κ΅­μ–΄ 점수:60
μ˜μ–΄ 점수:70
μˆ˜ν•™ 점수:50
4번 ν•™μƒμ˜ 성적을 μž…λ ₯ν•˜μ„Έμš”:
κ΅­μ–΄ 점수:90
μ˜μ–΄ 점수:100
μˆ˜ν•™ 점수:80
1번 ν•™μƒμ˜ 총점: 250, 평균: 83.33333333333333
2번 ν•™μƒμ˜ 총점: 120, 평균: 40.0
3번 ν•™μƒμ˜ 총점: 180, 평균: 60.0
4번 ν•™μƒμ˜ 총점: 270, 평균: 90.0

μ •λ‹΅

package array.ex;

import java.util.Scanner;

public class ArrayEx7 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[][] students = new int[4][3];

        for (int i = 0; i < 4; i++) {
            System.out.println((i + 1) + "번 ν•™μƒμ˜ 성적을 μž…λ ₯ν•˜μ„Έμš” : ");

            int j = 0;

            System.out.print("κ΅­μ–΄ 점수 : ");
            students[i][j] = scanner.nextInt();
            j++;

            System.out.print("μ˜μ–΄ 점수 : ");
            students[i][j] = scanner.nextInt();
            j++;

            System.out.print("μˆ˜ν•™ 점수 : ");
            students[i][j] = scanner.nextInt();
        }

        for (int row = 0; row < students.length; row++) {
            int sum = 0;
            double average = 0;

            for (int col = 0; col < students[row].length; col++) {

                sum += students[row][col];
            }
            average = (double) sum / students[row].length;

            System.out.println(row + "번 ν•™μƒμ˜ 총점 : " + sum + ", 평균 : " + average);
        }
    }
}
package array.ex;

import java.util.Scanner;

public class ArrayEx7 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[][] students = new int[4][3];
        String[] subjects = {"κ΅­μ–΄", "μ˜μ–΄", "μˆ˜ν•™"};

        for (int i = 0; i < 4; i++) {
            System.out.println((i + 1) + "번 ν•™μƒμ˜ 성적을 μž…λ ₯ν•˜μ„Έμš” : ");

            for (int j = 0; j < subjects.length; j++) {
                System.out.print(subjects[j] + "점수 : ");
                students[i][j] = scanner.nextInt();
            }
        }

        for (int row = 0; row < students.length; row++) {
            int sum = 0;
            double average = 0;

            for (int col = 0; col < students[row].length; col++) {
                sum += students[row][col];
            }
            average = (double) sum / students[row].length;

            System.out.println(row + "번 ν•™μƒμ˜ 총점 : " + sum + ", 평균 : " + average);
        }
    }
}

문제 - 2차원 λ°°μ—΄ 2

이전 λ¬Έμ œμ—μ„œ ν•™μƒμˆ˜λ₯Ό μž…λ ₯받도둝 κ°œμ„ ν•˜μž.

μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œ

학생 수λ₯Ό μž…λ ₯ν•˜μ„Έμš” : 3
1번 ν•™μƒμ˜ 성적을 μž…λ ₯ν•˜μ„Έμš”:
κ΅­μ–΄ 점수: 10
μ˜μ–΄ 점수: 20
μˆ˜ν•™ 점수: 30
2번 ν•™μƒμ˜ 성적을 μž…λ ₯ν•˜μ„Έμš”:
κ΅­μ–΄ 점수: 10
μ˜μ–΄ 점수: 10
μˆ˜ν•™ 점수: 10
3번 ν•™μƒμ˜ 성적을 μž…λ ₯ν•˜μ„Έμš”:
κ΅­μ–΄ 점수: 20
μ˜μ–΄ 점수: 20
μˆ˜ν•™ 점수: 20
1번 ν•™μƒμ˜ 총점: 60, 평균: 20.0
2번 ν•™μƒμ˜ 총점: 30, 평균: 10.0
3번 ν•™μƒμ˜ 총점: 60, 평균: 20.0

μ •λ‹΅

package array.ex;

import java.util.Scanner;

public class ArrayEx8 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("학생 수λ₯Ό μž…λ ₯ν•˜μ„Έμš” : ");
        int count = scanner.nextInt();

        int[][] students = new int[count][3];
        String[] subjects = {"κ΅­μ–΄", "μ˜μ–΄", "μˆ˜ν•™"};

        for (int i = 0; i < count; i++) {
            System.out.println((i + 1) + "번 ν•™μƒμ˜ 성적을 μž…λ ₯ν•˜μ„Έμš” : ");

            for (int j = 0; j < subjects.length; j++) {
                System.out.print(subjects[j] + " 점수 : ");
                students[i][j] = scanner.nextInt();
            }
        }

        for (int row = 0; row < students.length; row++) {
            int sum = 0;
            double average = 0;

            for (int col = 0; col < students[row].length; col++) {
                sum += students[row][col];
            }
            average = (double) sum / students[row].length;

            System.out.println(row + "번 ν•™μƒμ˜ 총점 : " + sum + ", 평균 : " + average);
        }
    }
}

 

λ¬Έμ œμ™€ 풀이 3

μƒν’ˆ 관리 ν”„λ‘œκ·Έλž¨ λ§Œλ“€κΈ°

μžλ°”λ₯Ό μ΄μš©ν•˜μ—¬ μƒν’ˆ 관리 ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄ 보자. 이 ν”„λ‘œκ·Έλž¨μ€ λ‹€μŒμ˜ κΈ°λŠ₯이 ν•„μš”ν•˜λ‹€.

  • μƒν’ˆ 등둝 : μƒν’ˆ 이름과 가격을 μž…λ ₯λ°›μ•„ μ €μž₯ν•œλ‹€.
  • μƒν’ˆ λͺ©λ‘ : μ§€κΈˆκΉŒμ§€ λ“±λ‘ν•œ λͺ¨λ“  μƒν’ˆμ˜ λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€.

λ‹€μŒκ³Ό 같이 λ™μž‘ν•΄μ•Ό ν•œλ‹€.

  • 첫 ν™”λ©΄μ—μ„œ μ‚¬μš©μžμ—κ²Œ μ„Έ κ°€μ§€ 선택을 μ œμ‹œν•œλ‹€ : "1. μƒν’ˆ 등둝", "2. μƒν’ˆ λͺ©λ‘", "μ’…λ£Œ"
  • "1. μƒν’ˆ 등둝"을 μ„ νƒν•˜λ©΄ , μ‚¬μš©μžλ‘œλΆ€ν„° μƒν’ˆ 이름과 가격을 μž…λ ₯λ°›μ•„ 배열에 μ €μž₯ν•œλ‹€.
  • "2. μƒν’ˆ λͺ©λ‘"을 μ„ νƒν•˜λ©΄, 배열에 μ €μž₯된 λͺ¨λ“  μƒν’ˆμ„ 좜λ ₯ν•œλ‹€.
  • "3. μ’…λ£Œ"λ₯Ό μ„ νƒν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•œλ‹€.

μ œμ•½ 쑰건
μƒν’ˆμ€ μ΅œλŒ€ 10κ°œκΉŒμ§€ 등둝할 수 μžˆλ‹€.


λ‹€μŒμ€ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” λ³€μˆ˜ 및 ꡬ쑰이닀.

  • Scanner scanner : μ‚¬μš©μž μž…λ ₯을 λ°›κΈ° μœ„ν•œ Scanner 선택
  • String[ ] productNames : μƒν’ˆ 이름을 μ €μž₯ν•  String λ°°μ—΄
  • int[ ] productPrices : μƒν’ˆ 가격을 μ €μž₯ν•  int λ°°μ—΄
  • int productCount : ν˜„μž¬ λ“±λ‘λœ μƒν’ˆμ˜ 개수λ₯Ό μ €μž₯ν•  int λ³€μˆ˜

μ‹€ν–‰ κ²°κ³Ό μ˜ˆμ‹œ

1. μƒν’ˆ 등둝 | 2. μƒν’ˆ λͺ©λ‘ | 3. μ’…λ£Œ 메뉴λ₯Ό μ„ νƒν•˜μ„Έμš”:1
μƒν’ˆ 이름을 μž…λ ₯ν•˜μ„Έμš”:JAVA
μƒν’ˆ 가격을 μž…λ ₯ν•˜μ„Έμš”:10000
1. μƒν’ˆ 등둝 | 2. μƒν’ˆ λͺ©λ‘ | 3. μ’…λ£Œ 메뉴λ₯Ό μ„ νƒν•˜μ„Έμš”:1
μƒν’ˆ 이름을 μž…λ ₯ν•˜μ„Έμš”:SPRING
μƒν’ˆ 가격을 μž…λ ₯ν•˜μ„Έμš”:20000
1. μƒν’ˆ 등둝 | 2. μƒν’ˆ λͺ©λ‘ | 3. μ’…λ£Œ 메뉴λ₯Ό μ„ νƒν•˜μ„Έμš”:2
JAVA: 10000원
SPRING: 20000원
1. μƒν’ˆ 등둝 | 2. μƒν’ˆ λͺ©λ‘ | 3. μ’…λ£Œ 메뉴λ₯Ό μ„ νƒν•˜μ„Έμš”:3
ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•©λ‹ˆλ‹€.

μƒν’ˆμ„ 더 등둝할 수 μ—†λŠ” 경우

1. μƒν’ˆ 등둝 | 2. μƒν’ˆ λͺ©λ‘ | 3. μ’…λ£Œ 
메뉴λ₯Ό μ„ νƒν•˜μ„Έμš”:1
더 이상 μƒν’ˆμ„ 등둝할 수 μ—†μŠ΅λ‹ˆλ‹€.

λ“±λ‘λœ μƒν’ˆμ΄ μ—†λŠ” 경우

1. μƒν’ˆ 등둝 | 2. μƒν’ˆ λͺ©λ‘ | 3. μ’…λ£Œ 
메뉴λ₯Ό μ„ νƒν•˜μ„Έμš”:2
λ“±λ‘λœ μƒν’ˆμ΄ μ—†μŠ΅λ‹ˆλ‹€.

μ •λ‹΅

package array.ex;

import java.util.Scanner;

public class ProductAdminEx {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int maxProductCount = 10;
        
        String[] productNames = new String[maxProductCount];
        int[] productPrices = new int[maxProductCount];

        int productCount = 0;

        while (true) {
            System.out.println("1. μƒν’ˆ 등둝 | 2. μƒν’ˆ λͺ©λ‘ | 3. μ’…λ£Œ");
            System.out.print("메뉴λ₯Ό μ„ νƒν•˜μ„Έμš” : ");
            int menu = scanner.nextInt();
            scanner.nextLine();

            if (menu == 1) {
                if (productCount >= maxProductCount) {
                    System.out.println("더 이상 μƒν’ˆμ„ 등둝할 수 μ—†μŠ΅λ‹ˆλ‹€.");
                }

                System.out.print("μƒν’ˆ 이름을 μž…λ ₯ν•˜μ„Έμš” : ");
                productNames[productCount] = scanner.nextLine();

                System.out.print("μƒν’ˆ 가격을 μž…λ ₯ν•˜μ„Έμš” : ");
                productPrices[productCount] = scanner.nextInt();

                productCount++;
            } else if (menu == 2) {
                if (productCount == 0) {
                    System.out.println("λ“±λ‘λœ μƒν’ˆμ΄ μ—†μŠ΅λ‹ˆλ‹€.");
                }

                for (int i = 0; i < productCount; i++) {
                    System.out.println(productNames[i] + ": " + productPrices[i] + "원");
                }
            } else if (menu == 3) {
                System.out.println("ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•©λ‹ˆλ‹€.");
                break;
            } else {
                System.out.println("잘λͺ»λœ 메뉴λ₯Ό μ„ νƒν•˜μ…¨μŠ΅λ‹ˆλ‹€. λ‹€μ‹œ μ„ νƒν•΄μ£Όμ„Έμš”.");
            }
        }

    }
}