Grind75
문제로
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| /**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode result = new ListNode();
ListNode dummy = result;
// list를 비교하여 dummy에 적재한다.
while(list1 != null && list2 != null) {
if(list1.val > list2.val) {
dummy.next = list2;
list2 = list2.next;
} else {
dummy.next = list1;
list1 = list1.next;
}
dummy = dummy.next;
}
// 두 리스트 중 하나가 null이 되었으므로 남은 lsit를 next에 적재한다.
if(list1 == null) dummy.next = list2;
else dummy.next = list1;
return result.next; // 초기값은 null이므로 next부터 반환한다.
}
}
|

Java에서 객체를 복사할 때 얕은 복사(shallow copy)와 깊은 복사(deep copy)의 개념은 매우 중요합니다. 이 두 가지 복사 방법의 차이를 이해하면 객체의 데이터가 어떻게 복사되고, 두 객체가 어떻게 상호작용하는지를 알 수 있습니다.
- 얕은 복사 (Shallow Copy)
- 얕은 복사는 객체의 모든 필드를 그대로 복사하지만, 객체가 참조하고 있는 다른 객체들은 복사하지 않습니다. 따라서 원본 객체와 복사된 객체는 동일한 참조를 공유하게 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
class ShallowCopyExample {
public static void main(String[] args) {
Person original = new Person("Alice", 30);
Person shallowCopy = original; // 얕은 복사
System.out.println(original.name); // Alice
System.out.println(shallowCopy.name); // Alice
shallowCopy.name = "Bob";
System.out.println(original.name); // Bob (변경됨)
System.out.println(shallowCopy.name); // Bob
}
}
|
- 깊은 복사 (Deep Copy)
- 깊은 복사는 객체의 모든 필드뿐만 아니라, 객체가 참조하고 있는 다른 객체들까지 모두 새롭게 복사합니다. 따라서 원본 객체와 복사된 객체는 독립적인 상태를 유지합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
// 깊은 복사를 위한 생성자
Person(Person person) {
this.name = person.name;
this.age = person.age;
}
}
class DeepCopyExample {
public static void main(String[] args) {
Person original = new Person("Alice", 30);
Person deepCopy = new Person(original); // 깊은 복사
System.out.println(original.name); // Alice
System.out.println(deepCopy.name); // Alice
deepCopy.name = "Bob";
System.out.println(original.name); // Alice (변경되지 않음)
System.out.println(deepCopy.name); // Bob
}
}
|