[Java 풀스택 과정 강의] 1월 29일

부트캠프 일지/Java 풀스택 과정 강의
2026.02.05
※ TIL와는 별개로 적는 개인 개발 일지라서 말은 좀 편하게하는 페이지입니다.
일지이기 때문에 일기의 성격이 더 강합니다.

 

 

이어서 29일차의 일지를 작성한다. 마찬가지로 js와 비슷해서 크게 문제될 것은 없다.

 

While&Do While

JS와 비슷하다. 다만 조건이 boolean 타입이어야 한다는 규제가 있다. 

    while (x > 0) { ... }   // O
    while (1) { ... }       // X (컴파일 에러)

 

 

Math.Random

JS와 동일하게 Math.random() 메서드를 사용한다. 다만 결과 값이 double이므로 형변환을 하는 게 좋다.

 

 

배열 및 복사

배열

java에서의 배열은 다음과 같은 형태로 선언한다.

 

package ch05.sec01;

import java.util.Arrays;

public class ArrayRulesSample {
    public static void main(String[] args) {
        // 1. 선언
        int[] arr1;
        int arr2[];

        // 2. 할당 (크기 고정)
        arr1 = new int[5];

        // 3. 기본값
        int[] a = new int[3];       // 0, 0, 0
        String[] s = new String[2]; // null, null

        // 4. 선언 + 초기화
        int[] i1 = { 1, 2, 3 };
        int[] i2 = new int[] { 10, 20, 30 };

        // 5. 나중에 초기화
        int[] later;
        later = new int[] { 7, 8, 9 };

        // 6. 길이 0
        int[] empty = new int[0];
        int[] empty2 = {};
    }
}

 

주의점으로는

1. 배열 또한 타입을 선언해야함.

2. 선언할 때 크기를 넣으면 안 됨. (int[5] arr; 같은 경우 불가능)

3. {}로 초기화는 선언과 같은 줄에서만 가능.

4. new 타입[개수]{ ... } 처럼 사용하는 건 불가능하다. 초기화 진행시에는 개수 지정이 불가능.

5. 한 번 정한 길이는 바꿀 수 없다.

6. 할당만 하고 값을 안 넣으면, 정수 0, 실수 0.0, boolean false, 참조형 null 등 기본값이 들어 있음.

 

 

length

배열.length를 통해 배열의 길이를 알 수 있다. length는 메서드가 아니라 필드임에 주의.

 

 

Arrays.toString(배열)

배열에 print문을 사용하면 참조 주소가 나오므로, 배열의 값 전체를 보려면 Arrays.toString(배열)을 사용해야한다. 사용하기 위해서는 import java.util.Arrays;가 선행되어야 한다. 

 

복사

배열의 복사를 다룬다. js처럼 얕은 복사가 있고 깊은 복사가 있다. 얕은 복사의 경우 참조주소가 같으므로 수정하면 서로 수정되지만, 깊은 복사는 참조주소가 다르기 때문에 한쪽을 수정해도 다른 쪽을 수정할 필요가 없다.

 

얕은 복사

// 1) 대입 (같은 참조)
int[] a = { 1, 2, 3 };
int[] b = a;           // 얕은 복사
b[0] = 99;             // a[0]도 99

// 2) 배열 clone() - 배열은 새로 생기지만, 요소가 참조형이면 같은 객체를 가리킴
String[] s1 = { "a", "b" };
String[] s2 = s1.clone();
s2[0] = "x";           // s1[0]도 "x" (같은 String 객체 아님 but String은 불변이라 여기선 새 참조)
// 참조형 요소가 mutable이면:
// int[][] arr2 = arr1.clone(); → arr2[i]와 arr1[i]가 같은 1차원 배열을 가리킴

// 3) System.arraycopy - 복사본 배열은 새로 만들지만, 요소는 참조만 복사
int[] src = { 1, 2, 3 };
int[] dest = new int[3];
System.arraycopy(src, 0, dest, 0, 3);  // 기본형이면 값 복사라 서로 독립
// 참조형 배열이면 dest의 요소들이 src와 같은 객체들을 가리킴 → 얕은 복사

 

 

깊은 복사

// 1) 기본형 1차원 배열 - Arrays.copyOf / clone() / 반복문
int[] a = { 1, 2, 3 };

int[] b1 = Arrays.copyOf(a, a.length); //Arrays.copyOf
int[] b2 = a.clone(); //clone()
int[] b3 = new int[a.length]; 
for (int i = 0; i < a.length; i++) { //반복문
    b3[i] = a[i];
}
b1[0] = 99;  // a[0]는 그대로 1

// 2) 참조형 1차원 배열 - 요소마다 새 객체 생성
class Item {
    int val;
    Item(int val) { this.val = val; }
}
Item[] items1 = { new Item(1), new Item(2) };
Item[] items2 = new Item[items1.length];
for (int i = 0; i < items1.length; i++) {
    items2[i] = new Item(items1[i].val);  // 새 Item 생성
}
items2[0].val = 99;  // items1[0].val은 그대로 1

 

 

기타

for (int i = 0; i < scores.length; i++) {
    System.out.printf("scores[%d]: %d%n", i, scores[i]);
 }

 

배열의 경우 이런식으로 printf문을 사용한 순회가 가능하다.

printf(형식, 나오는 값1, 나오는값2) 형태다. printf의 지시자 정리를 했다.

 

지시자 의미
%d 10진 정수 (int, long)
%s 문자열 (String)
%f 실수 (float, double)
%c 문자 하나 (char)
%b boolean
%n 줄바꿈