배열은 값이 아니라 주소를 저장하기 때문에 얕은 복사와 깊은 복사의 차이를 정확히 이해함.
int[] a = {1, 2, 3};
int[] b = a; // 같은 주소 공유
b[0] = 99;
System.out.println(a[0]); // 99
int[] a = {1, 2, 3};
int[] b = Arrays.copyOf(a, a.length);
b[0] = 99;
System.out.println(a[0]); // 1
int[] arr = {3, 1, 5, 2};
System.out.println(Arrays.toString(arr)); // [3,1,5,2]
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [1,2,3,5]
int[] b = Arrays.copyOf(arr, arr.length);
System.out.println(Arrays.equals(arr, b)); // true
int[][] score = {
{90, 80, 70},
{88, 75, 92},
{100, 95, 90}
};
System.out.println(score[0][1]); // 80
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score[i].length; j++) {
System.out.print(score[i][j] + " ");
}
System.out.println();
}
int n = 3;
int[][] magic = new int[n][n];
int row = 0;
int col = n / 2;
for (int num = 1; num <= n * n; num++) {
magic[row][col] = num;
int nextRow = (row - 1 + n) % n;
int nextCol = (col + 1) % n;
if (magic[nextRow][nextCol] != 0) {
row = (row + 1) % n;
} else {
row = nextRow;
col = nextCol;
}
}
class Student {
String name;
int age;
void study() {
System.out.println(name + " 공부중");
}
}
class Counter {
static int count = 0;
Counter() {
count++;
}
}
new Counter();
new Counter();
new Counter();
System.out.println(Counter.count); // 3
class Student {
private int age;
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
class Student {
String name;
int age;
Student() {}
Student(String name) {
this.name = name;
}
Student(String name, int age) {
this(name);
this.age = age;
}
}
int[][] std = new int[3][3];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < std.length; i++) {
System.out.print("국어: ");
std[i][0] = sc.nextInt();
System.out.print("영어: ");
std[i][1] = sc.nextInt();
System.out.print("수학: ");
std[i][2] = sc.nextInt();
}
for (int i = 0; i < std.length; i++) {
System.out.println(Arrays.toString(std[i]));
}
class Student {
String name;
int age;
Student() {}
Student(String name) {
this.name = name;
}
Student(String name, int age) {
this(name);
this.age = age;
}
void print() {
System.out.println(name + " / " + age);
}
}
public class Main {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student("철수");
Student s3 = new Student("영희", 22);
s3.print();
}
}
오늘은 배열 → 구조화 → 객체 설계까지 연결되는 흐름을 제대로 잡은 날이었다. 2차원 배열과 클래스 개념이 연결되면서 프로그램이 단순 명령이 아닌 ‘구조적 사고’로 보이기 시작했다.