Post

โ›“๏ธ Java Design-Pattern โ…ฆ - Prototype

โ›“๏ธ Java Design-Pattern โ…ฆ - Prototype

๐Ÿ“— ใ€ŽJAVA ์–ธ์–ด๋กœ ๋ฐฐ์šฐ๋Š” ๋””์ž์ธ ํŒจํ„ด : ์‰ฝ๊ฒŒ ๋ฐฐ์šฐ๋Š” GoF์˜ 23๊ฐ€์ง€ ๋””์ž์ธ ํŒจํ„ดใ€๋ฅผ ์ฝ๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

Prototype ํŒจํ„ด์ด๋ž€?

  • ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœย newย ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ํด๋ž˜์Šค ๋ช…์„ ๋ฐ˜๋“œ์‹œ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋„ ์žˆ๋‹ค.

โ€œ์ข…๋ฅ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„ ํด๋ž˜์Šค๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐโ€
โ€œํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์ด ์–ด๋ ค์šด ๊ฒฝ์šฐโ€
โ€œํ”„๋ ˆ์ž„์›Œํฌ์™€ ์ƒ์„ฑํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐโ€

  • ์ฒซ ๋ฒˆ์งธ๋Š” ์ทจ๊ธ‰ํ•  ์˜ค๋ธŒ์ ํŠธ ์ข…๋ฅ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค๋ฉด ์†Œ์Šค ํŒŒ์ผ์„ ๋งŽ์ด ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.
  • ๋‘ ๋ฒˆ์งธ๋Š” ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณต์žกํ•œ ๊ณผ์ •์„ ๊ฑฐ์ณ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์œผ๋กœ, ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ์ด๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค๋ฉด ๊ทธ๋ž˜ํ”ฝ ์—๋””ํ„ฐ ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์šฐ์Šค๋กœ ๊ทธ๋ฆฐ ๋„ํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ธ์Šคํ„ด์Šค ๊ฐ™์ด ์‚ฌ์šฉ์ž ์กฐ์ž‘์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•ด๋‹น๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ธ ๋ฒˆ์งธ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํŠน์ • ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์ด๋‹ค.
  • ์ด ๊ฒฝ์šฐ์—๋Š” ๋ฏธ๋ฆฌ ์›ํ˜•์ด ๋  ์ธ์Šคํ„ด์Šค๋ฅผ ๋“ฑ๋กํ•ด๋‘๊ณ , ๋“ฑ๋ก๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ์ด์ฒ˜๋Ÿผย Prototypeย ํŒจํ„ด์€ ์›ํ˜•์ด ๋˜๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ํŒจํ„ด์ด๋‹ค.ย 
  • Java์—์„œ๋Š” ๋ณต์ œํ•˜๋Š” ์กฐ์ž‘์„ย clone์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ,ย Cloneableย ์ธํ„ฐํŽ˜์ด์Šค์™€ ํ•จ๊ป˜ ์“ฐ์ธ๋‹ค.

์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ

  • ๋‹ค์Œ ํ”„๋กœ๊ทธ๋žจ์€ ๋ฌธ์ž์—ด์„ ํ…Œ๋‘๋ฆฌ๋กœ ๊ฐ์‹ธ์„œ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ๋ฐ‘์ค„์„ ๊ทธ์–ด ํ‘œ์‹œํ•œ๋‹ค.
  • framework์— ํฌํ•จ๋œย Product,ย Managerย ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์ œํ•œ๋‹ค.
  • Managerย ํด๋ž˜์Šค๋Š”ย createCopy๋ฅผ ํ˜ธ์ถœํ•˜์ง€๋งŒย Productย ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์ด๊ธฐ๋งŒ ํ•˜๋ฉด ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋А ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์ œํ• ์ง€ ๊ด€์—ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • MessageBox,ย UnderlinePenย ํด๋ž˜์Šค๋Š” ๋ชจ๋‘ย Productย ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์ด๋‹ค.

Productย ์ธํ„ฐํŽ˜์ด์Šค

1
2
3
4
5
6
package framework;

public interface Product extends Cloneable {
	public abstract void use(String s);
    public abstract Product createCopy();
}
  • Clonableย ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•œย Productย ์ธํ„ฐํŽ˜์ด์Šค๋Š”ย clone()์„ ํ†ตํ•ด ๋ณต์ œ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.
  • use,ย createCopyย ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค.

Managerย ํด๋ž˜์Šค

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package framework;

import java.util.HashMap;
import java.util.Map;

public class Manager {
	private Map<String, Product> showcase = new HashMap<>();
    
    public void register(String name, Product prototype) {
    	showcase.put(name, prototype);
    }
    
    public Product create(String prototypeName) {
    	Product p = showcase.get(prototypeName);
        return p.createCopy();
    }
}
  • Productย ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์ œํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.
  • Productย ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ย Managerย ํด๋ž˜์Šค ์†Œ์Šค ์ฝ”๋“œ์—๋Š” ๊ตฌํ˜„ ํด๋ž˜์Šค ๋ช…์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ๊ทธ๋ ‡๊ธฐ์— ๊ตฌํ˜„ ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ด๋Š” ๊ตฌํ˜„ ํด๋ž˜์Šค์™€๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.
  • Manager์—๋Š”ย Product๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ํฌํ•จ๋˜์–ด ์žˆ๋Š”๋ฐ, ๊ทธ๋ ‡๊ธฐ์— ์ด ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์ดย Managerย ํด๋ž˜์Šค์™€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋‹ค๋ฆฌ๊ฐ€ ๋œ๋‹ค.

MessageBoxย ํด๋ž˜์Šค

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
import framework.Product;

public class MessageBox implements Product {
	private char decochar;
    
    public MessageBox(char decochar) {
    	this.decochar = decochar;
    }
    
    @Override
    public void use(String s) {
    	int decolen = 1 + s.length() + 1;
        for (int i = 0; i < decolen; i++) {
        	System.out.print(decochar);
        }
        System.out.println();
        System.out.println(decochar + s + decochar);
    	for (int i = 0; i < decolen; i++) {
        	System.out.print(decochar);
        }
        System.out.println();
    }
    
    @Override
    public Product createCopy() {
    	Product p = null;
        try {
        	p = (Product) clone();
        } catch (CloneNotSupportedException e) {
			e.printStackTrace();
        }
        return p;
    }
}
  • ํ•ด๋‹น ํด๋ž˜์Šค์˜ย useย ๋ฉ”์†Œ๋“œ๋Š”ย decocharย ํ•„๋“œ๋กœ ๋ฌธ์ž์—ด์„ ๊ฐ์‹ผ๋‹ค.
  • createCopy๋Š” ์ž๊ธฐ ์ž์‹ ์„ ๋ณต์ œํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.
  • ๋ณต์ œํ•  ๋•Œ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ€์ง„ ํ•„๋“œ ๊ฐ’๋„ ๊ทธ๋Œ€๋กœ ์ƒˆ ์ธ์Šคํ„ด์Šค์— ๋ณต์‚ฌ๋œ๋‹ค.
  • cloneย ๋ฉ”์†Œ๋“œ๋กœ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ย java.lang.Cloneableย ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค ๋ฟ์ด๋‹ค.
  • ๋งŒ์•ฝ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๊ฐ€ย cloneย ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ณต์ œ๋ฅผ ์‹œ๋„ํ•˜๋ฉดย CloneNotSupportedExceptionย ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœย try ... catch๋ฌธ์œผ๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • MessageBoxย ํด๋ž˜์Šค๋Š”ย Cloneableย ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ•œย Productย ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • Cloneableย ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹จ์ˆœํ•œ ํ‘œ์‹œ๋กœ ์ด์šฉ๋˜๋Š” ๋งˆ์ปค ์ธํ„ฐํŽ˜์ด์Šค์ผ ๋ฟ, ๋”ฐ๋กœ ์„ ์–ธ๋œ ๋ฉ”์†Œ๋“œ๋Š” ์—†๋‹ค.
  • cloneย ๋ฉ”์†Œ๋“œ๋Š” ์ž์‹ ์˜ ํด๋ž˜์Šค ๋˜๋Š” ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์š”์ฒญ์œผ๋กœ ๋ณต์ œํ•  ๊ฒฝ์šฐ์—๋Š”ย createCopy์™€ ๊ฐ™์€ ๋ณ„๋„์˜ ๋ฉ”์†Œ๋“œ๋กœย clone์„ ๊ฐ์‹ธ์•ผ ํ•œ๋‹ค.

UnderlinePenย ํด๋ž˜์Šค

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
import framework.Product;

public class UnderlinePen implements Product {
	private char ulchar;
    
    public UnderlinePen(char ulchar) {
    	this.ulchar = ulchar;
    }
    
    @Override
    public void use(String s) {
    	int ulen = s.length();
        for (int i = 0; i < ulen; i++) {
        	System.out.print(ulchar);
        }
        System.out.println();
    }
    
    @Override
    public Product createCopy() {
    	Product p = null;
        try {
        	p = (Product) clone();
        } catch (CloneNotSupportedException e) {
			e.printStackTrace();
        }
        return p;
    }
}
  • MessageBoxย ํด๋ž˜์Šค์™€ ๊ฑฐ์˜ ๊ฐ™์€ ๋™์ž‘์„ ํ•˜๋Š”๋ฐ,ย ulcharย ํ•„๋“œ๊ฐ€ ๋ฐ‘์ค„๋กœ ์‚ฌ์šฉ๋  ๋ฟ์ด๋‹ค.

Mainย ํด๋ž˜์Šค

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import framework.Manager;
import framework.Product;

public class Main {
	// ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”
	Manager manager = new Manager();
    UnderlinePen upen = new UnderlinePen('-');
    MessageBox mbox = new MessageBox('*');
    MessageBox sbox = new MessageBox('/');
    
    // ๋“ฑ๋ก
    manager.register("strong message", upen);
    manager.register("warning box", mbox);
    manager.register("slash box", sbox);
    
    Product p1 = manager.create("strong message");
    p1.use("Hello, world!");
    
    Product p2 = manager.create("warning box");
    p2.use("Hello, world!");
    
    Product p3 = manager.create("slash box");
    p3.use("Hello, world!");
}
  • Managerย ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ ย Productย ๊ตฌํ˜„์ฒด๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋™์ž‘ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์ด๋‹ค.

Prototypeย ํŒจํ„ด์˜ ๋“ฑ์žฅ์ธ๋ฌผ

Productย ์ธํ„ฐํŽ˜์ด์Šค

  • ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์›ํ˜•ย Prototypeย ์—ญํ• ์„ ํ•œ๋‹ค.

MessageBox,ย UnderlinePenย ํด๋ž˜์Šค

  • ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ตฌ์ฒด์ ์ธ ์›ํ˜• ์—ญํ• ์„ ํ•œ๋‹ค.

Managerย ํด๋ž˜์Šค

  • Productย ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ด์šฉ์žย Clientย ์—ญํ• ์„ ํ•œ๋‹ค.

์ฑ…์—์„œ ์ œ์‹œํ•˜๋Š” ํžŒํŠธ

ํด๋ž˜์Šค ์ด๋ฆ„์€ ์†๋ฐ•์ธ๊ฐ€?

  • ์†Œ์Šค ์ฝ”๋“œ ์•ˆ์— ํด๋ž˜์Šค ์ด๋ฆ„์„ ์“ฐ๋Š”๊ฒŒ ์™œ ๋ฌธ์ œ๊ฐ€ ๋ ๊นŒ?
  • ์—ฌ๊ธฐ์„œ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜๊ฐ€ โ€˜๋ถ€ํ’ˆ์œผ๋กœ์„œ์˜ ์žฌ์‚ฌ์šฉโ€™์ด๋ผ๋Š” ์ ์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ƒ๊ธฐํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
  • ์†Œ์Šค ์ฝ”๋“œ ์•ˆ์— ํด๋ž˜์Šค ์ด๋ฆ„์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค์™€ ๋ถ„๋ฆฌํ•ด์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.
  • ๋ฌผ๋ก  ์†Œ์Šค ์ฝ”๋“œ ๋‚ด ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ˆ˜์ •ํ•˜๋ฉด ๋˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์žฌ์‚ฌ์šฉ์ด๋ž€ ์†Œ์Šค ์ฝ”๋“œ์˜ ์ˆ˜์ •์€ ๋ฐฐ์ œํ•œ๋‹ค.
  • ์ฆ‰ย .javaย ํŒŒ์ผ ์—†์ดย .classย ํŒŒ์ผ๋งŒ์œผ๋กœ ๊ทธ ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.
  • ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉํ•ด์•ผ ํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ด ์†Œ์Šค ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฑด ๋‹น์—ฐํ•˜์ง€๋งŒ ๋ถ€ํ’ˆ์œผ๋กœ ๋…๋ฆฝ์‹œ์ผœ์•ผ ํ•˜๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์ด ์†Œ์Šค ๋‚ด ์žˆ๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

cloneย ๋ฉ”์†Œ๋“œ์™€ย java.lang.Cloneableย ์ธํ„ฐํŽ˜์ด์Šค

  • java.langย ํŒจํ‚ค์ง€๋Š” ์•”๋ฌต์ ์œผ๋กœย importย ๋˜์–ด ์žˆ์–ด ๊ฐ„๋‹จํžˆย Cloneable๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
  • cloneย ๋ฉ”์†Œ๋“œ๋Š”ย java.lang.Objectย ํด๋ž˜์Šค์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.ย 
  • Objectย ํด๋ž˜์Šค๋Š”ย Javaย ํด๋ž˜์Šค ๊ณ„์ธต์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ด๋ฏ€๋กœ ๋ชจ๋“  ํด๋ž˜์Šค์—์„œย cloneย ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†ํ•˜๊ฒŒ ๋œ๋‹ค.
  • cloneย ๋ฉ”์†Œ๋“œ๋Š” ์–•์€ ๋ณต์‚ฌ๋ฅผ ํ•œ๋‹ค.ย 
  • cloneย ๋ฉ”์†Œ๋“œ์˜ ๋™์ž‘์€ ํ•„๋“œ ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ํ•„๋“œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ธ์Šคํ„ด์Šค์˜ ๋‚ด์šฉ๊นŒ์ง€๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ฐ€๋ น ํ•„๋“œ์— ๋ฐฐ์—ด์ด ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด ๊ทธ ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋งŒ ๋ณต์‚ฌ๋˜๊ณ  ๋ฐฐ์—ด ์š”์†Œ ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ๋ณต์‚ฌ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.
  • ์ด๋Ÿฌํ•œ ํ•„๋“œ ๋Œ€ ํ•„๋“œ์˜ ๋ณต์‚ฌ๋ฅผ ์–•์€ ๋ณต์‚ฌ๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋งŒ์•ฝ ์–•์€ ๋ณต์‚ฌ๋กœ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋ฉดย cloneย ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ด์„œย super.clone()์œผ๋กœ ์ƒ์œ„ ํด๋ž˜์Šค์˜ย cloneย ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.

clone์€ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

  • java.lang.Objectย ํด๋ž˜์Šค์˜ย cloneย ๋ฉ”์†Œ๋“œ๊ฐ€ย protected๋กœ ์ง€์ •๋˜์–ด ์žˆ์–ด ์ƒ์† ๊ด€๊ณ„๊ฐ€ ์—†๋Š” ํด๋ž˜์Šค์˜ย cloneย ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค.
  • ์‹ค์ œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์ œํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒฝ์šฐย cloneย ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋ณต์‚ฌ ์ƒ์„ฑ์ž๋‚˜ ๋ณต์‚ฌ ํŒฉํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค.
This post is licensed under CC BY 4.0 by the author.