์ „๋žต ํŒจํ„ด์œผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๊ธฐ

2025. 11. 25. 00:13ยท๐Ÿ“— ๊ธฐ๋ก/๊ธฐํƒ€
728x90

์š”์ฆ˜์€ ์ฝ”๋”ฉํ•  ๋•Œ ์ฒ˜์Œ๋ถ€ํ„ฐ AIํ•œํ…Œ ๋ฌผ์–ด๋ณด๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ์—์ด์ „ํŠธ๋„ ์—„์ฒญ ๋งŽ์•„์กŒ๋‹ค. ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋‚ด๊ฐ€ AI๋ฅผ ์ฒ˜์Œ ์จ๋ดค์„ ๋•Œ๋Š” ์ข€ ์กฐ์‹ฌ์Šค๋Ÿฝ๊ณ  ์ œํ•œ์ ์œผ๋กœ ์ผ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์งœ๋‹ฌ๋ผ๊ณ  ํ•˜๊ธฐ๋ณด๋‹จ ์ด๋ฏธ ์ง  ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง ํ•ด๋‹ฌ๋ผ๋Š” ์š”์ฒญ์ด ํ›จ์”ฌ ๋งŽ์•˜๋‹ค. ๊ทธ๋ž˜์„œ AI์˜ ํšจ์œจ์„ฑ๋ณด๋‹ค๋Š” ๊ฐœ๋… ํ•™์Šต ๋„๊ตฌ์˜ ์šฉ๋„๋กœ ํ™œ์šฉํ–ˆ๋”๋žฌ๋‹ค. ๊ณต๋ถ€ํ•˜๋Š” ๊ทธ ๊ณผ์ •์ด ๊ฝค ์žฌ๋ฐŒ์–ด์„œ ๊ทธ๋•Œ ๋ฐ›์•˜๋˜ ๋‹ต๋ณ€๋“ค์„ ๊ธ€๋กœ ์ •๋ฆฌํ•ด๋ดค๋‹ค.

 

๊ธฐ๋Šฅ ๋ฐ ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ 

์› ๊ธฐ๋Šฅ์€ id์— ๋Œ€ํ•œ Vo ๋˜๋Š” TypeCode์„ ๊ฐ๊ฐ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. id์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ์•„์•ผ ํ•˜๋ฏ€๋กœ DB ์กฐํšŒ๋Š” ๋‘˜ ๋‹ค ๊ฐ™์€ ์‹œํ€€์Šค๋ฅผ ๊ฑฐ์นœ๋‹ค. ๊ทธ๋ž˜์„œ Type์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋Š” Vo๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋‘ ๊ฐœ๊ฐ€ ์„œ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด์„œ ์ข…๋ฅ˜๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์œ ์‚ฌํ•œ ์ž‘์—…์„ ๊ฐ ํ•จ์ˆ˜๋งˆ๋‹ค ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค.

์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์กฐํšŒ ๊ตฌ๋ฌธ์„ ์•„์˜ˆ ๋”ฐ๋กœ ๋งŒ๋“ค๊ฑฐ๋‚˜, getType… ํ•จ์ˆ˜๋ฅผ ์—†์• ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ•ด๋ด๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

private getVoById(int id) {
		MyVo vo = mapper.selectTypeA(id);
		if(vo != null) { doSomething(vo); return vo;}
		
		vo = mapper.selectTypeB(id);
		if(vo != null) { doSomething(vo); return vo;}

		// ....๋ฐ˜๋ณต

    throw new Exception(..., ...);
}

private TypeCode getTypeById(int id) {
		MyVo vo = getVoById(id);
		if(vo instanceof MyVoA) return TypeCode.A;
		if(vo instanceof MyVoB) return TypeCode.B;		

	// .. ๋ฐ˜๋ณต

    throw new Exception(..., ...);
}

 

๋ฆฌํŒฉํ† ๋ง ๋ฐฉํ–ฅ

  • ์ „๋žต ํŒจํ„ด๊ณผ ๋งคํ•‘ ํ…Œ์ด๋ธ” ํ™œ์šฉ: TypeCode๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ํ•˜๋‚˜์˜ ์ „๋žต์œผ๋กœ ๊ตฌ์„ฑํ–ˆ๋‹ค.
  • ๋žŒ๋‹ค/ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ํ™œ์šฉ: ๋งŽ์ด ๋ฐ˜๋ณต๋˜๋Š” if-return ๋ถ„๊ธฐ์˜ ๊ฐ€๋…์„ฑ์„ ๊ฐœ์„ ํ–ˆ๋‹ค. ๋žŒ๋‹คํ˜•์œผ๋กœ ๋ฐ”๋กœ ์งœ๋Š” ๊ฒŒ ์ต์ˆ™์ง€ ์•Š์€๋ฐ ๊ฐœ์„ ๋œ ์ฝ”๋“œ ๋•๋ถ„์— ๊ณต๋ถ€๊ฐ€ ๋งŽ์ด ๋˜์—ˆ๋‹ค.
// 1. Type๋ณ„ ์กฐํšŒ ์ „๋žต ์ •์˜
private static class MyStrategy{
    final Function<Integer, MyVo> finder;
    final Function<MyVo, MyVo> postProcess;
    final TypeCode typeCode;

    TypeStrategy(Function<Integer, MyVo> finder, Function<MyVo , MyVo > postProcess, TypeCode typeCode) {
        this.finder = finder;
        this.postProcess = postProcess;
        this.typeCode = typeCode;
    }
}

// 2. ์ „๋žต ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™” (์ƒ์„ฑ์ž๋‚˜ static ๋ธ”๋ก์—์„œ)
private final List<MyStrategy> myStrategies = Arrays.asList(
    new MyStrategy(
        mapper::selectTypeA
        vo -> { ((MyVoA)vo).doSomething; return vo; },
        TypeCode.A
    ),
    new MyStrategy(
	    mapper::selectTypeB,
      vo -> { ((MyVoB)vo).doSomething; return vo; },
	    TypeCode.B
	  )
	  
    // ... ๋‚˜๋จธ์ง€ ํƒ€์ž…๋„ ๋™์ผํ•˜๊ฒŒ ์ถ”๊ฐ€
    
);

// 3. refactoring
private MyVo getVoById(int id) {
    for (MyStrategy strategy : myStrategies) {
        MyVo vo = strategy.finder.apply(id);
        if (vo != null) {
            return strategy.postProcess.apply(vo);
        }
    }
    throw new Exception(..., "์—ฐ๊ฒฐ๋œ Vo๊ฐ€ ์—†์Œ", ...);
}

// 4. refactoring
private TypeCode getTypeById(int id) {
    for (MyStrategy strategy : myStrategies) {
        MyVo vo = strategy.finder.apply(id);
        if (vo != null) {
            return strategy.typeCode;
        }
    }
    throw new Exception(..., "๊ฐ์ฒด๊ฐ€ ์—†์Œ", ...);
}

 

๋ฆฌํŒฉํ† ๋ง ํšจ๊ณผ

  • ๊ฐ€๋…์„ฑ: Type๋ณ„ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ํ•œ ๊ณณ์— ๋ชจ์—ฌ ์žˆ์–ด ํ•œ๋ˆˆ์— ํŒŒ์•… ๊ฐ€๋Šฅ. TypeCode๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ํ•˜๋‚˜์˜ ์ „๋žต์œผ๋กœ ๊ตฌ์„ฑํ•œ ๋•๋ถ„์ด๋‹ค. ์™œ ์ฒ˜์Œ ๋งŒ๋“ค ๋•Œ ์ด ์ƒ๊ฐ์„ ์•ˆํ–ˆ์„๊นŒ.
  • ํ™•์žฅ์„ฑ: ์ƒˆ๋กœ์šด Type์ด ์ถ”๊ฐ€๋  ๋•Œ, if ๊ตฌ๋ฌธ ๋ฐ˜๋ณต์ด ์•„๋‹ˆ๋ผ ์ „๋žต ๋ฆฌ์ŠคํŠธ์—๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋จ
  • ์œ ์ง€๋ณด์ˆ˜์„ฑ: ์ค‘๋ณต ์ฝ”๋“œ ์ตœ์†Œํ™”
  • OCP ์ค€์ˆ˜: ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ์ „๋žต๋งŒ ์ถ”๊ฐ€
  • ์ด ์™ธ์—๋„ AI๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ผ์›ํ™” ๊ฐ™์€ ๊ฒƒ์ด ์žฅ์ ์ด๋ผ๊ณ  ๋‹ต๋ณ€์„ ํ•ด์ฃผ์—ˆ์œผ๋‚˜, ๊ทธ๊ฑด ์›๋ž˜ ์ฝ”๋“œ์—์„œ ์ด๋ฏธ ํ•œ ๊ฑฐ์ž–์•„…
728x90

'๐Ÿ“— ๊ธฐ๋ก > ๊ธฐํƒ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํŒŒ์›Œํฌ์ธํŠธ ๊ธ€๊ผด ํ™”์งˆ๊ตฌ๋ฆฌ ๊ฐœ์„ ๋ฐฉ๋ฒ•  (0) 2026.01.20
Git Stash  (0) 2022.03.02
MySQL Workbench์—์„œ Server Status๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ  (0) 2022.01.16
'๐Ÿ“— ๊ธฐ๋ก/๊ธฐํƒ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํŒŒ์›Œํฌ์ธํŠธ ๊ธ€๊ผด ํ™”์งˆ๊ตฌ๋ฆฌ ๊ฐœ์„ ๋ฐฉ๋ฒ•
  • Git Stash
  • MySQL Workbench์—์„œ Server Status๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
cliche-2
cliche-2
๋•Œ๋•Œ๋กœ ์“ฐ๋Š” ๊ฐœ๋ฐœ ๋ฉ”๋ชจ์žฅ
  • cliche-2
    ๐™ฏ๐™š๐™ฅ๐™ฉ๐™œ๐™ข๐™ 
    cliche-2
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (13)
      • ๐Ÿ“ฆ ์ด๊ฒƒ์ €๊ฒƒ (0)
      • ๐Ÿ“— ๊ธฐ๋ก (12)
        • Unity (5)
        • Web (1)
        • GIS (2)
        • ๊ธฐํƒ€ (4)
      • ๐Ÿ“š ํ”„๋กœ์ ํŠธ (1)
        • 2021-06 (1)
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    CesiumJS
    ์‚ฌ์—…์•„์ดํ…œ
    wrtn
    Unreal
    ๋ฉ”ํƒ€๋ฒ„์Šค
    ์›น ํ† ์ด ํ”„๋กœ์ ํŠธ
    ๊ธฐํš
    ์ƒ์„ฑํ˜•AI
    ๋คผํŠผ
    ๋ณด์•ˆ
    ๋น„์ฆˆ๋‹ˆ์Šค
    ์–ธ๋ฆฌ์–ผ
    ๊ฐœ์ธ์ •๋ณด๋ณดํ˜ธ์œ„์›ํšŒ
    ๊ด€๊ด‘ ์›น
    ์–ธ๋ฆฌ์–ผํŽ˜์ŠคํŠธ
    ์•„์ด๋””์–ด
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
cliche-2
์ „๋žต ํŒจํ„ด์œผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

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