Adapter ํŒจํ„ด์œผ๋กœ ์•Œ๋ ค์ ธ์žˆ๋Š” Wrapper ํŒจํ„ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

์ด๋ฆ„์˜ ๋ฌธ์ œ

Wrapper

  • ์–ด๋–ค ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‚ด์ฒ˜๊ฐ€ ๋ง˜์— ๋“ค์ง€ ์•Š์„ ๋•Œ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ
  • ๋‹จ, ๊ทธ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‚ด์ฒ˜๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ
    • ๊ทธ ํด๋ž˜์Šค์˜ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ์Œ - ๋‚จ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ
    • ๊ทธ ํด๋ž˜์Šค์— ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์Œ - ๋ณ€๊ฒฝ์„ ์›์น˜ ์•Š์Œ
  • ๊ทธ ๋Œ€์‹  ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ๊ฐ์‹ธ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ

Wrapper ํŒจํ„ด ์ดํ•ด ๋ฐฉ๋ฒ•

  1. Wrap
    • ํŠน์ • ํด๋ž˜์Šค๋ฅผ ๊ฐ์‹ธ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‚ด์ณ๋กœ ๋ฐ”๊ฟ”์„œ ์‚ฌ์šฉ
    • ์„ ๋ฌผ ํฌ์žฅ์ง€
  2. Adapt
    • ํŠน์ • ํด๋ž˜์Šค์™€ ๋‹ค๋ฅธ ํด๋ž˜์Šค ์‚ฌ์ด๋ฅผ ์ด์–ด์ฃผ๋Š” ์—ญํ• ๋กœ ์‚ฌ์šฉ
    • ์ง„์งœ ์ฝ˜์„ผํŠธ ์‚ฌ์ด์— ๊ผฝ๋Š” 110v ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‚ด์ฒ˜๋ฅผ ๋ฐ”๊พธ๋ ค๋Š” ์ด์œ 

  1. ์ถ”ํ›„ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐ”๊ฟ€ ๋•Œ, ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด
  2. ๊ทธ๋ƒฅ ์‚ฌ์šฉ์ค‘์ธ ๋ฉ”์„œ๋“œ๊ฐ€ ํ‘œ์ค€์— ๋งž์ง€ ์•Š์•„์„œ
  3. ๊ธฐ์กด ํด๋ž˜์Šค์— ์—†๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด
  4. ํ™•์žฅ๋œ ์šฉ๋„: ๋‚ด๋ถ€ ๊ฐœ์ฒด๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ธฐ ์œ„ํ•ด
    • ํŠน์ • ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ์ฒด A๊ฐ€ ์žˆ๋‹ค๊ณ ํ•˜์ž.
    • ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฑธ ๋ฐ”๊นฅ์ชฝ์—์„œ ์‚ฌ์šฉํ•  ์ด์œ ๊ฐ€ ์ƒ๊ฒผ๋‹ค.
    • ๊ทธ๋Ÿฐ๋ฐ ๋ชจ๋“  ๊ฐ’์„ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†๋‹ค.
    • ์ด๋Ÿด ๊ฒฝ์šฐ ๊ฐ์‹ธ์„œ ๋ฐ–์œผ๋กœ ์ „๋‹ฌํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฐ’์—๋งŒ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๋„๋ก ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์‹ค์ œ ์˜ˆ

  • ์œˆ๋„์šฐ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ 3D ๊ทธ๋ž˜ํ”ฝ API๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‘๊ฐœ์ž„
    • Direct X
    • Open GL
  • ๋‘ API ๋ชจ๋‘ ์ปดํ“จํ„ฐ์— ์„ค์น˜๋œ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๋ฅผ ์ด์šฉ
  • ๋”ฐ๋ผ์„œ ๋‘ API์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋งค์šฐ ๋น„์Šทํ•จ
    • Open GL: clearScreen(float, float, float, float)
    • DirectX: clear(int, int, int, int)
  • signature๊ฐ€ ๋‹ค๋ฅด์ง€๋งŒ ํ•˜๋Š” ๋™์ž‘์€ ๊ฐ™์Œ
    • float - [0.0, 1.0] : %๋กœ ๋ฐ›์Œ
    • int - [0, 255]

ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ

this.graphics.clearScreen(1.f, 0.f, 0.f, 0.f); // argb
 
this.graphics.clear(0, 0, 0, 255) // rgba
  • OpenGL์„ DirectX๋กœ ๋ฐ”๊พธ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค๋ฉด ๋ชจ๋“  ๊ณณ์„ ์ฐพ์•„์„œ ๊ณ ์ณ์•ผ ํ•œ๋‹ค.
  • ์‹ฌ์ง€์–ด ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆœ์„œ๋„ ๋‹ค๋ฅด๋‹ค.
  • ๋ฉ”์„œ๋“œ ์ด๋ฆ„, ์ˆœ์„œ, ๊ฐ’๋„ ๋ฐ”๋€๋‹ค.
  • ์ˆ˜์ •ํ•  ์ฝ”๋“œ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์‹ค์ˆ˜ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.
  • ์ด๋Ÿด ๋•Œ Wrapper class๋ฅผ ๋งŒ๋“ค๋ฉด ์‹ค์ˆ˜ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.

Wrapper Class ์‚ฌ์šฉ

public final class Graphics {
    private OpenGL gl;
 
    public void clear(float r, float g, float b, float a) {
        this.gl.clearScreen(a, r, g, b);
    }
}
// Client
 
Graphics graphics;
 
this.graphics.clear(0.f, 0.f, 0.f, 1.f);
  • Graphics ๊ฐœ์ฒด์˜ ๋ฉ”์„œ๋“œ๋งŒ ํ˜ธ์ถœํ•ด์ค€๋‹ค.
  • ๋งŒ์•ฝ ์—ฌ๊ธฐ์„œ DirectX๋กœ ๋ฐ”๋€๋‹ค๋ฉด? Graphics์˜ signature๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋‚ด๋ถ€๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค.
public final class Graphics {
    private DirectX dx;
 
    public void clear(float r, float g, float b, float a) {
        this.dx.clear((int) (r * 255), (int) (g * 255), (int) (b * 255), (int) (a * 255));
    }
}

Wrapper์™€ DTO

  • DataBase์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ ๊ทธ ์†์„ฑ์˜ ์ˆ˜๊ฐ€ ๋งค์šฐ ๋งŽ์„ ๊ฒƒ์ด๋‹ค.
  • ๊ทธ์™€ ๋ฐ˜ํ•ด ํ™”๋ฉด์—์„œ ์‹ค์งˆ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ์ดํ„ฐ ์†์„ฑ์˜ ์ˆ˜๋Š” ์ ๋‹ค.
  • ์ด๋Ÿด ๊ฒฝ์šฐ Database์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ์ˆ˜๋Š” ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋‹ค์Œ์˜ ์ ์—์„œ ์ข‹์ง€ ์•Š๋‹ค.
    • ํ•„์š”์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•จ
    • ๋ฏผ๊ฐํ•œ ์ •๋ณด ํฌํ•จ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ
  • ์ฆ‰, ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๊ธฐ ์œ„ํ•œ ์ •๋ณด๋งŒ์„ ์ •์‚ฌ์˜ํ•œ ๋ชจ๋ธ์ด ํ•„์š”ํ•˜๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์ •๋ณด๋งŒ์„ ๋ฐ˜ํ™˜
  • ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์ „์†ก์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ์ฒด๋ฅผ DTO(Data Transfer Object)๋ผ๊ณ  ํ•œ๋‹ค.

์—„๋ฐ€ํ•˜๊ฒŒ Wrapper๋Š” ์•„๋‹ˆ๋‹ค.

  • ๊ฐ์‹ธ๋Š” ํ˜•ํƒœ๋Š” ์•„๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ Adapt ์ธก๋ฉด์—์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ํƒ€ ํด๋ž˜์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด ํ•„์š”์— ๋งž๊ฒŒ ๋ฐ”๊พผ๋‹ค๋Š” ์ ์—์„œ ๋น„์Šทํ•˜๋‹ค.
    • A์—์„œ B๋กœ adpatํ•˜์—ฌ ์ „๋‹ฌ

Reference