[Effective Java] item 03. private ์ƒ์„ฑ์ž๋‚˜ ์—ด๊ฑฐ ํƒ€์ž…์œผ๋กœ ์‹ฑ๊ธ€ํ„ด์ž„์„ ๋ณด์ฆํ•˜๋ผ

2024. 6. 8. 16:15ยท ๋„์„œ ๐Ÿ“š/Effective Java
๋ชฉ์ฐจ
  1. Item 3. private ์ƒ์„ฑ์ž๋‚˜ ์—ด๊ฑฐ ํƒ€์ž…์œผ๋กœ ์‹ฑ๊ธ€ํ„ด์ž„์„ ๋ณด์ฆํ•˜๋ผ
  2. 1. ์‹ฑ๊ธ€ํ„ด(Singleton)์ด๋ž€?
  3. 2. ์‹ฑ๊ธ€ํ„ด์„ ๋งŒ๋“œ๋Š” ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•
  4. 1๏ธโƒฃ `public static` ๋ฉค๋ฒ„๊ฐ€ `final` ํ•„๋“œ์ธ ๋ฐฉ์‹
  5. 2๏ธโƒฃ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ public static ๋ฉค๋ฒ„๋กœ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹
  6. 3๏ธโƒฃ ์—ด๊ฑฐ ํƒ€์ž…(Enum)์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  7. 3. ์‹ฑ๊ธ€ํ„ด ํด๋ž˜์Šค๋ฅผ ์ง๋ ฌํ™”(Serialize)ํ•˜๋Š” ๋ฐฉ๋ฒ•
728x90

Item 3. private ์ƒ์„ฑ์ž๋‚˜ ์—ด๊ฑฐ ํƒ€์ž…์œผ๋กœ ์‹ฑ๊ธ€ํ„ด์ž„์„ ๋ณด์ฆํ•˜๋ผ

1. ์‹ฑ๊ธ€ํ„ด(Singleton)์ด๋ž€?

์‹ฑ๊ธ€ํ„ด(singleton)์ด๋ž€ ์ธ์Šคํ„ด์Šค๋ฅผ ์˜ค์ง ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งํ•œ๋‹ค.

 

์‹ฑ๊ธ€ํ„ด์˜ ์ „ํ˜•์ ์ธ ์˜ˆ๋กœ๋Š” ์„ค๊ณ„ ์ƒ ์œ ์ผํ•ด์•ผ ํ•˜๋Š” ์‹œ์Šคํ…œ ์ปดํฌ๋„ŒํŠธ๋‚˜ ๋ฌด์ƒํƒœ(stateless) ๊ฐ์ฒด(Spring bean component)๊ฐ€ ์žˆ๋‹ค.
์‹ฑ๊ธ€ํ„ด ๊ฐ์ฒด์—๋„ ๋‹จ์ ์ด ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ ์‹ฑ๊ธ€ํ„ด ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

 

๋งŒ์ผ ํ•ด๋‹น ํƒ€์ž…์„ interface๋กœ ์ •์˜ํ•œ ๋‹ค์Œ ๊ทธ interface ๊ตฌํ˜„ํ•ด์„œ ๋งŒ๋“  ์‹ฑ๊ธ€ํ„ด์ธ ๊ฒฝ์šฐ,
์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค๋ฅผ mock(๊ฐ€์งœ ๊ฐ์ฒด)์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ํ…Œ์ŠคํŠธ ํ•˜๋Š”๋ฐ์— ์–ด๋ ค์›€์„ ๊ฒช์„ ์ˆ˜ ์žˆ๋‹ค.

 


2. ์‹ฑ๊ธ€ํ„ด์„ ๋งŒ๋“œ๋Š” ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

์‹ฑ๊ธ€ํ„ด์„ ๋งŒ๋“œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘, ์ƒ์„ฑ์ž๋Š” private๋กœ ๊ฐ์ถฐ์ฃผ๊ณ , public static๋ฉค๋ฒ„๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

1๏ธโƒฃ public static ๋ฉค๋ฒ„๊ฐ€ final ํ•„๋“œ์ธ ๋ฐฉ์‹

public class Bean {
    public static final Bean INSTANCE = new Bean();

    private Bean() { }

    ...
}

public์ด๋‚˜ protected ์ƒ์„ฑ์ž๊ฐ€ ์—†๊ณ  private ์ƒ์„ฑ์ž๋งŒ ์กด์žฌํ•˜๋ฉฐ, private ์ƒ์„ฑ์ž๋Š” public static final ํ•„๋“œ์ธ Bean.INSTANCE๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ๋”ฑ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋œ๋‹ค.

๋”ฐ๋ผ์„œ Bean ํด๋ž˜์Šค๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๋ฉฐ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹จ ํ•˜๋‚˜๋ฟ์ž„์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์˜ ์žฅ์ ์€ ๋ฐ‘๊ณผ ๊ฐ™๋‹ค.

  1. ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์‹ฑ๊ธ€ํ„ด(singleton)์ž„์ด API์— ๋ช…๋ฐฑํžˆ ๋“œ๋Ÿฌ๋‚œ๋‹ค๋Š” ๊ฒƒ
    public static ํ•„๋“œ๊ฐ€ final์ด๋ฏ€๋กœ ์ ˆ๋Œ€๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.
  2. ๋ณ„๋„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋”ฐ๋กœ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๊ฒฐํ•˜๋‹ค

โš ๏ธ ํ•˜์ง€๋งŒ ์˜ˆ์™ธ๋„ ํ•˜๋‚˜ ์กด์žฌํ•˜๋Š”๋ฐ, ๊ถŒํ•œ์ด ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ Reflection API์ธ AccssibleObject.setAccessible()์„ ์‚ฌ์šฉํ•ด private ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฌํ•œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด, ์ƒ์„ฑ์ž๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋‘ ๋ฒˆ์งธ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ คํ•  ๋•Œ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค.

 

 

2๏ธโƒฃ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ public static ๋ฉค๋ฒ„๋กœ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹

public class Bean {
    private static final Bean INSTANCE = new Bean();

    private Bean() { }

    public static Bean getInstance() {
        return INSTANCE;
    }
    ...
}

์šฐ๋ฆฌ๋Š” Item 1์—์„œ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค.

'์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ๊ธฐ ํž˜๋“ค๋‹ค'๋ผ๋Š” ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ช… ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ ์ค‘, getInstance()๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ช…๋ฒ•์ธ๋ฐ, ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ํ•ญ์ƒ ๊ฐ™์€ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹จ ํ•˜๋‚˜ ๋ฟ์ž„์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ, ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™์ด Reflection์„ ์‚ฌ์šฉํ•˜์—ฌ private ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋ฏ€๋กœ, ์ถ”๊ฐ€์ ์ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์˜ ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1. ๋งŒ์ผ, ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋”์ด์ƒ ์‹ฑ๊ธ€ํ„ด์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, API๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๊ณ ๋„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

public class Bean { 
	private Bean instance; 
	private Bean() { } 
    
	// ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋งŒ ์ ์šฉ 
	public static Bean from() { return new Bean(); } 
}

 

2. ์ •์  ํŒฉํ„ฐ๋ฆฌ๋ฅผ ์ œ๋„ˆ๋ฆญ ์‹ฑ๊ธ€ํ„ด ํŒฉํ„ฐ๋ฆฌ(Generic Singleton factory); item 30๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

public class Bean { 
    private static final Bean INSTANCE = new Bean(); 
    
    private Bean() { } 
    
    public static Bean getInstance() { return (Bean) INSTANCE; } 
    public void say(T t) { System.out.println(t); } 
}

 

 

3. ์ •์  ํŒฉํ„ฐ๋ฆฌ์˜ ๋ฉ”์„œ๋“œ ์ฐธ์กฐ๋ฅผ Supplier๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

public class Bean { 
    private static final Bean INSTANCE = new Bean(); 
    private Bean() { } 
    public static Bean getInstance() { return INSTANCE; } 
}

public static void main(String[] args) { 
	Supplier supplier = Bean::getInstance; 
    Bean bean = supplier.get(); 
    // ์ดํ›„์—๋Š” bean์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ 
}

 

๋งŒ์ผ ์œ„์˜ ์žฅ์ ์„ ํ™œ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋ฉด, ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•(public ํ•„๋“œ ๋ฐฉ์‹)์ด ๋” ์ข‹๋‹ค.

 

 

3๏ธโƒฃ ์—ด๊ฑฐ ํƒ€์ž…(Enum)์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

public enum Bean {
    INSTANCE;

    //๋ฐ‘์— ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ ๊ตฌํ˜„
}

1๋ฒˆ ๋ฐฉ์‹(public static final ํ•„๋“œ)๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ถ”๊ฐ€์ ์ธ ๊ตฌํ˜„์—†์ด ์ง๋ ฌํ™”(Serialize)๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
์‹ฌ์ง€์–ด ์•„์ฃผ ๋ณต์žกํ•œ ์ง๋ ฌํ™” ์ƒํ™ฉ์ด๋‚˜, Reflection ๊ณต๊ฒฉ์—๋„ ์ œ 2์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ๊ธฐ๋Š” ์ผ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋ง‰์•„์ค€๋‹ค.

๋ถ€์ž์—ฐ์Šค๋Ÿฌ์›Œ ๋ณด์ผ ์ˆ˜ ์žˆ์œผ๋‚˜, ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ๋Š” ์›์†Œ๊ฐ€ ํ•˜๋‚˜ ๋ฟ์ธ ์—ด๊ฑฐ ํƒ€์ž…์ด ์‹ฑ๊ธ€ํ„ด์„ ๋งŒ๋“œ๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์—๋„ ํ•œ ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ๋‹ค.
์‹ฑ๊ธ€ํ„ด์ด Enum ์™ธ์— Concrete class๋ฅผ ์ƒ์†(extends)์„ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋งŒ์ผ ํŠน์ • ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ด ๋ฐฉ๋ฒ•์€์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

 


3. ์‹ฑ๊ธ€ํ„ด ํด๋ž˜์Šค๋ฅผ ์ง๋ ฌํ™”(Serialize)ํ•˜๋Š” ๋ฐฉ๋ฒ•

1๋ฒˆ ๋ฐฉ๋ฒ•(public static final ํ•„๋“œ)๋‚˜ 2๋ฒˆ ๋ฐฉ๋ฒ•(์ •์  ํŒฉํ„ฐ๋ฆฌ ์ ์šฉ)์œผ๋กœ ๋งŒ๋“  ์‹ฑ๊ธ€ํ„ด ํด๋ž˜์Šค๋ฅผ ์ง๋ ฌํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”
Serialize interface๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•˜๋‹ค.

๋ชจ๋“  ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋ฅผ ์ผ์‹œ์ (transient)๋ผ๊ณ  ์„ ์–ธํ•˜๊ณ , readResolve ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.
๋งŒ์ผ ์ œ๊ณตํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์ง๋ ฌํ™”ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์—ญ์ง๋ ฌํ™”ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

public class Bean implements Serializable{
    private static final Bean INSTANCE = new Bean();

    private Bean() { }

    public static Bean getInstance() {
        return INSTANCE;
    }

    private Object readResolve() {
        return INSTANCE;
    }
}
728x90
  1. Item 3. private ์ƒ์„ฑ์ž๋‚˜ ์—ด๊ฑฐ ํƒ€์ž…์œผ๋กœ ์‹ฑ๊ธ€ํ„ด์ž„์„ ๋ณด์ฆํ•˜๋ผ
  2. 1. ์‹ฑ๊ธ€ํ„ด(Singleton)์ด๋ž€?
  3. 2. ์‹ฑ๊ธ€ํ„ด์„ ๋งŒ๋“œ๋Š” ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•
  4. 1๏ธโƒฃ `public static` ๋ฉค๋ฒ„๊ฐ€ `final` ํ•„๋“œ์ธ ๋ฐฉ์‹
  5. 2๏ธโƒฃ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ public static ๋ฉค๋ฒ„๋กœ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹
  6. 3๏ธโƒฃ ์—ด๊ฑฐ ํƒ€์ž…(Enum)์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  7. 3. ์‹ฑ๊ธ€ํ„ด ํด๋ž˜์Šค๋ฅผ ์ง๋ ฌํ™”(Serialize)ํ•˜๋Š” ๋ฐฉ๋ฒ•
'๋„์„œ ๐Ÿ“š/Effective Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Effective Java] item 02. ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋นŒ๋”๋ฅผ ๊ณ ๋ คํ•˜๋ผ
  • [Effective Java] Item 01. ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ
HEY__
HEY__
์•ˆ๋…•ํ•˜์„ธ์š” :) ๊ณต๋ถ€ํ•˜๋ฉฐ ๋ฐฐ์šด ๊ฒƒ๋“ค์„ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•œ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค. ๋„์›€์ด ๋˜์‹œ๊ธธ ๋ฐ”๋ผ๋ฉฐ ํ˜น์‹œ ์ž˜๋ชป๋œ ์ ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค! :D
250x250
HEY__
while(true) { continue; }
HEY__
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (164)
    • Spring Boot (45)
      • ์Šคํ”„๋ง ์ž…๋ฌธ ๊ฐ•์˜ (18)
    • AWS (8)
    • ํ”„๋กœ์ ํŠธ (6)
    • Network (21)
    • Operating System (8)
    • Database (4)
    • ETC (2)
    • Java (3)
    • C++ (7)
    • Python (1)
    • ๋„์„œ ๐Ÿ“š (3)
      • Effective Java (3)
    • Coding test (50)
      • Baekjoon (30)
      • Leet Code (18)
      • Programmers (2)
    • Algorithm (C++) (5)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํƒœ๊ทธ
  • Github
  • ๊ธ€์“ฐ๊ธฐ
  • ๋ธ”๋กœ๊ทธ๊ด€๋ฆฌ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • Java
  • programmers
  • OS
  • Spring
  • dispatcher servlet
  • kotlin
  • Baekjoon
  • HTTP
  • Algorithm
  • STL
  • slack
  • C++
  • Cloudfront
  • coding test
  • CPP
  • leetcode
  • Network
  • spring boot
  • aws
  • Servlet Container

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.0
HEY__
[Effective Java] item 03. private ์ƒ์„ฑ์ž๋‚˜ ์—ด๊ฑฐ ํƒ€์ž…์œผ๋กœ ์‹ฑ๊ธ€ํ„ด์ž„์„ ๋ณด์ฆํ•˜๋ผ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.