CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /Java์—์„œ ๊ฐ์ฒด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

Java์—์„œ ๊ฐ์ฒด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
๊ฐœ์ฒด ๊ตํ™˜์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ž‘์—… ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์ •๋ ฌ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์Šค์™€ํ•‘์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ๊ฐ’์„ ๊ตํ™˜ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— Java์—์„œ ๊ฐ์ฒด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค . ํ•˜๋‚˜๋Š” ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๊ฒƒ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ชฉ๋ก ๋˜๋Š” ๋ฐฐ์—ด์˜ ๋‘ ๊ฐ์ฒด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋จผ์ € ๋…๋ฆฝ ๊ฐœ์ฒด ๊ตํ™˜์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.Java์—์„œ ๊ฐ์ฒด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?  - 1

๊ฐ์ฒด ๊ตํ™˜์€ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์œ ํ˜• ๊ตํ™˜๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฐ’์„ ๊ตํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” ์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 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;
        }
    }
}
๊ฒฐ๊ณผ: Java์—์„œ ๊ฐ์ฒด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?  - 2์Šค์™€ํ•‘์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค! 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์—์„œ ๊ฐ์ฒด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?  - ์‚ผ

Java์˜ ๋‚ด์žฅ swap() ๋ฉ”์„œ๋“œ

Java Collections Framework์˜ ํด๋ž˜์Šค ์—๋Š” swap() ์ด๋ผ๋Š” ์š”์†Œ๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋‚ด์žฅ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . java.util์€ Collection ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชฉ๋ก๊ณผ ๊ฐ™์€ ์š”์†Œ์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ •์  ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์Šค์™‘ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•ž์—์„œ ๋…ผ์˜ํ•œ ์˜ˆ๋ณด๋‹ค ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค. swap () ๋ฉ”์„œ๋“œ๋Š” ์ •์  ๋ฉ”์„œ๋“œ์ด๋ฏ€๋กœ ํด๋ž˜์Šค ์ด๋ฆ„์„ Collections.swap() ์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค . swap() ๋ฉ”์„œ๋“œ ์˜ ๋ฐ˜ํ™˜ ์œ ํ˜•์€ void์ด๋ฏ€๋กœ ์•„๋ฌด ๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. swap() ๋ฉ”์„œ๋“œ ์— ์„ธ ๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . ์•„๋ž˜ ์ฐธ๊ณ  ์‚ฌํ•ญ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

swap(List<?> list, int a, int b)
๋งค๊ฐœ๋ณ€์ˆ˜:
  • ๋ชฉ๋ก โ€” ๋ชฉ๋ก์—๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ตํ™˜ํ•˜๋Š” ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • a โ€” ๊ตํ™˜ํ•  ์š”์†Œ ์˜ ์ธ๋ฑ์Šค .
  • b โ€” ๊ต์ฒดํ•  ๋‹ค๋ฅธ ์š”์†Œ ์˜ ์ธ๋ฑ์Šค .
a ๋˜๋Š” b๊ฐ€ ๋ชฉ๋ก ํฌ๊ธฐ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ์ด ๋ฉ”์„œ๋“œ๋Š” IndexOutOfBoundsException์„ throwํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก์˜ ์ตœ๋Œ€ ์ƒ‰์ธ์€ ๋ชฉ๋ก ํฌ๊ธฐ๋ณด๋‹ค ํ•˜๋‚˜ ์ž‘์Šต๋‹ˆ๋‹ค. ๊ทธ๋ณด๋‹ค ํฐ ์ธ๋ฑ์Šค ๊ฐ’์€ IndexOutOfBoundsException์„ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ArrayList์—์„œ ์Šค์™‘ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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์ด๋ฏ€๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Java์—์„œ ๊ฐ์ฒด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?  - 4

Collections.swap(fruits, 2, 8);
์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.Java์—์„œ ๊ฐ์ฒด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?  - 5

๊ฒฐ๋ก 

์ด ์ž์Šต์„œ์—์„œ๋Š” Java์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ตํ™˜ ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” ๋ž˜ํผ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” Collection.swap() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฏ€๋กœ swap() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค .
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION