๊ฐ์ฒด ๊ตํ์ ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์์
์ค ํ๋์
๋๋ค. ํนํ ์ ๋ ฌ์ ์ ์ฉํฉ๋๋ค. ์ค์ํ์์ ๋ฐ์ํ๋ ๊ฒ์ ๊ฐ์ ๊ตํํ๋ ๋ ๊ฐ์ ๋ณ์์
๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ Java์์ ๊ฐ์ฒด๋ฅผ ๊ตํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค . ํ๋๋ ๋
๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ฅผ ๊ตํํ๋ ๊ฒ์ด๊ณ ๋ค๋ฅธ ํ๋๋ ๋ชฉ๋ก ๋๋ ๋ฐฐ์ด์ ๋ ๊ฐ์ฒด๋ฅผ ๊ตํํ๋ ๊ฒ์
๋๋ค. ๋จผ์ ๋
๋ฆฝ ๊ฐ์ฒด ๊ตํ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฒด ๊ตํ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ํ ๊ตํ๊ณผ ๋ค๋ฆ ๋๋ค.
๊ธฐ๋ณธ ๊ฐ์ ๊ตํํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋๋ ์์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ Java๋ ๋ฉ์๋์ ๋งค๊ฐ ๋ณ์๋ฅผ ์ ๋ฌํ ๋ "๊ฐ์ผ๋ก ์ ๋ฌ"์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ฒด ๊ตํ์ ์ด ๋ฐฉ๋ฒ์ผ๋ก ์์ํ ๋๋ก ์๋ํ์ง ์์ต๋๋ค. ๋ค์ ์์ ์์ ์ด๋ฅผ ๋ณด์ฌ์ค๋๋ค.
public class ObjectSwapper {
public static void main(String[] args) {
InnerClass obj1 = new InnerClass(12345);
InnerClass obj2 = new InnerClass(11111);
swap(obj1, obj2);
System.out.println("Obj1 ID value : " + obj1.id + "\n" + "Obj2 ID value : " + obj2.id);
}
static void swap(InnerClass x, InnerClass y) {
InnerClass temp;
temp = x;
x = y;
y = temp;
}
static class InnerClass {
public int id;
public InnerClass(int Id) {
this.id = Id;
}
}
}
๊ฒฐ๊ณผ: ์ค์ํ์ด ์์์ต๋๋ค! swap ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ ๋ ๋ชจ๋ ์์ฑ ๊ฐ๊ณผ ํจ๊ป ๊ฐ์ฒด์ ๋ณต์ฌ๋ณธ์ ์ ๋ฌํฉ๋๋ค. ์ด๊ฒ์ด "๊ฐ์น์ ์ํ ์ ๋ฌ"์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ด์ ์
๋๋ค. ๊ตํ ๋ฐฉ๋ฒ์ ์ค์ ๋ก ์๋ณธ ๊ฐ์ฒด์ ์ฌ๋ณธ์๋ง ์ํฅ์ ๋ฏธ์น๋ ๊ฐ์ฒด๋ฅผ ๊ตํํฉ๋๋ค. ๋ฐ๋ผ์ ์๋ณธ ๊ฐ์ฒด๋ ๋ณ๊ฒฝ๋์ง ์์ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. ์ด์ ๋ํ ํด๊ฒฐ์ฑ
์ ๋ํผ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ฒด๋ฅผ ๋ํํ๋ ๊ฒ์
๋๋ค.
๋ํผ ํด๋์ค๋ก ๊ฐ์ฒด ๊ตํ
public class ObjectSwapper {
public static void main(String[] args) {
InnerClass obj1 = new InnerClass(12345);
InnerClass obj2 = new InnerClass(11111);
objectWrapper wrapperObj1 = new objectWrapper(obj1);
objectWrapper wrapperObj2 = new objectWrapper(obj2);
// Values before swapping
System.out.println("WrapperObj1 InncerClass ID value : " + wrapperObj1.innerObject.id + "\n" + "WrapperObj2 InncerClass ID value : "
+ wrapperObj2.innerObject.id + "\n");
swap(wrapperObj1, wrapperObj2);
// Values after swapping
System.out.println("WrapperObj1 InncerClass ID value : " + wrapperObj1.innerObject.id + "\n" + "WrapperObj2 InncerClass ID value : "
+ wrapperObj2.innerObject.id);
}
static void swap(objectWrapper wrapperObj1, objectWrapper wrapperObj2) {
InnerClass temp;
temp = wrapperObj1.innerObject;
wrapperObj1.innerObject = wrapperObj2.innerObject;
wrapperObj2.innerObject = temp;
}
static class InnerClass {
public int id;
public InnerClass(int Id) {
id = Id;
}
}
static class objectWrapper {
InnerClass innerObject;
public objectWrapper(InnerClass objInnner) {
this.innerObject = objInnner;
}
}
}
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๊ต์ฒดํด์ผ ํ๋ ๊ฐ์ฒด ์ ํ์ ์์ฑ์ด ์๋ ๋ํผ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๊ฐ๋จํ ๊ต์ฒด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ํผ ํด๋์ค ๊ฐ์ฒด์ InnerClass ๊ฐ์ฒด ๋ด์ฉ์ ๊ต์ฒดํฉ๋๋ค. ๊ต์ฒด๋ InnerClass ๊ฐ์ฒด์ ์ถ๊ฐ ๊ตฌํ์ ์ํด ๊ทธ์ ๋ฐ๋ผ wrapperObj1.xyz ๋ฐ wrapperObj2.xyz๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ถ๋ ฅ:
Java์ ๋ด์ฅ swap() ๋ฉ์๋
Java Collections Framework์ ํด๋์ค ์๋ swap() ์ด๋ผ๋ ์์๋ฅผ ๊ตํํ๋ ๋ด์ฅ ๋ฉ์๋๊ฐ ์์ต๋๋ค . java.util์ Collection ์ธํฐํ์ด์ค์ ๋ชฉ๋ก๊ณผ ๊ฐ์ ์์์์ ์๋ํ ์ ์๋ ์ ์ ๋ฉ์๋๋ฅผ ํฌํจํ๋ ์ ํธ๋ฆฌํฐ ํด๋์ค์ ๋๋ค. ์ค์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ์์์ ๋ ผ์ํ ์๋ณด๋ค ํจ์ฌ ์ฝ์ต๋๋ค. swap () ๋ฉ์๋๋ ์ ์ ๋ฉ์๋์ด๋ฏ๋ก ํด๋์ค ์ด๋ฆ์ Collections.swap() ์ผ๋ก ํธ์ถํฉ๋๋ค . swap() ๋ฉ์๋ ์ ๋ฐํ ์ ํ์ void์ด๋ฏ๋ก ์๋ฌด ๊ฒ๋ ๋ฐํํ์ง ์์ต๋๋ค. swap() ๋ฉ์๋ ์ ์ธ ๊ฐ์ ์ธ์๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค . ์๋ ์ฐธ๊ณ ์ฌํญ์ ํ์ธํ์ญ์์ค.
swap(List<?> list, int a, int b)
๋งค๊ฐ๋ณ์:
- ๋ชฉ๋ก โ ๋ชฉ๋ก์๋ ์ฐ๋ฆฌ๊ฐ ๊ตํํ๋ ์์๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
- a โ ๊ตํํ ์์ ์ ์ธ๋ฑ์ค .
- b โ ๊ต์ฒดํ ๋ค๋ฅธ ์์ ์ ์ธ๋ฑ์ค .
ArrayList์ swap() ๋ฉ์๋
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListSwapper {
public static void main(String[] args) {
try {
List fruits = new ArrayList();
fruits.add("Mango");
fruits.add("Papaya");
fruits.add("Apple");
fruits.add("Orange");
fruits.add("Watermelon");
fruits.add("Bael");
System.out.println("Before swapping : " + fruits);
//using Collection.swap() method
Collections.swap(fruits, 2, 5);
System.out.println("After swapping : " + fruits);
} catch (IndexOutOfBoundsException e) {
System.out.println("Index Out of Bound Exception thrown : " + e);
}
}
}
๊ณผ์ผ์ ArrayList์๋ 6๊ฐ์ ์์๊ฐ ์์ต๋๋ค. ํจ์ swap() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ 2 ๋ฒ์งธ ์์ ์ 5 ๋ฒ์งธ ์์๋ฅผ ๊ตํํฉ๋๋ค . ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฐํ์์ IndexOutOfBoundsException์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก try-catch ๋ธ๋ก ๋ด์ swap() ๋ฉ์๋๋ฅผ ์์ฑํ๋ ๊ฒ์
๋๋ค. ์ถ๋ ฅ: ์ธ๋ฑ์ค๋ก '2' ๋ฐ '8'์ ์ ๋ฌํ๋ฉด ๋ชฉ๋ก์ ํฌ๊ธฐ๊ฐ 6์ด๋ฏ๋ก ์์ฉ ํ๋ก๊ทธ๋จ์์ ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
Collections.swap(fruits, 2, 8);
์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
GO TO FULL VERSION