Skip to content
This repository was archived by the owner on Jan 13, 2021. It is now read-only.

Latest commit

ย 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 

README.md

์ŠคํŠธ๋ ˆํ‹ฐ์ง€(์ „๋žต) ํŒจํ„ด

์ •์˜

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฐ(familiy)์„ ์ •์˜ํ•˜๊ณ  ๊ฐ๊ฐ์„ ์บก์Аํ™”(encapsulate)ํ•˜์—ฌ ๊ตํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝํ•  ํ•„์š”์—†์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ

์ปดํ“จํ„ฐ ๋ณธ์ฒด ํ˜น์€ ๋…ธํŠธ๋ถ์— ๋ชจ๋‹ˆํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค. ๋ณดํ†ต ๋ณธ์ฒด์˜ ์˜์ƒ ์ž…๋ ฅ ๋‹จ์ž(vga, dvi, hdmi, c type ๋ฉ€ํ‹ฐํฌํŠธ, usb 3.0 ๋“ฑ์˜ ํฌ๋งท)์—์„œ ๋ชจ๋‹ˆํ„ฐ ์ถœ๋ ฅ ๋‹จ์ž(์—ญ์‹œ vga, dvi, hdmi, dp ๋“ฑ์˜ ํ˜•์‹)๋กœ ์—ฐ๊ฒฐํ•˜๊ฒŒ ๋œ๋‹ค.

์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ปจ๋ฒ„ํ„ฐ๊ฐ€ ์žˆ๋‹ค.

  • HDMI to HDMI
  • HDMI to VGA
  • USB 3.0 type to HDMI
  • c type to HDMI

์ปจ๋ฒ„ํ„ฐ๋ฅผ ์ด์นญํ•˜๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

abstract class Converter {
  abstract fun input()
  abstract fun output()
}

case by case๋กœ Converter class๋ฅผ implements ํ•˜์—ฌ ์ƒ์†ํ•˜๋ฉด ์ฝ”๋“œ ์ค‘๋ณต์„ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค. Converver class์˜ ๊ตฌํ˜„์ฒด์ธ HDMIToHDMIConverter์™€ CTypeToHDMIConverter๋Š” ๊ฐ™์€ ๊ณ„์ธต(hirarchy)์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ธ๋‹ต์‹œ๊ณ  ๊ฐ™์€ ๊ณ„์ธต์˜ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋ฉด UML ๊ด€๊ณ„๋„๊ฐ€ ๋‚œ์žกํ•ด ์งˆ ๊ฒƒ์ด๋‹ค.

class HDMIToHDMIConverter : Converter {
  override fun input(){
    println("HDMI ์ธํ’‹ ์‹ ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜")
  }

  override fun output(){
    println("HDMI ์•„์›ƒํ’‹ ์‹ ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜")
  }
}

class CTypeToHDMIConverter : Converter {
  override fun input(){
    println("C Type ์ธํ’‹ ์‹ ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜")
  }

  override fun output(){
    println("HDMI ์•„์›ƒํ’‹ ์‹ ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜")
  }
}

๋จผ์ € ๋ณ€๊ฒฝ๋  ์†Œ์ง€๊ฐ€ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•ด๋ณด์ž. ์ผ๋‹จ input, output์˜ ๊ธฐ๋Šฅ์€ ๊ณตํ†ต์ ์œผ๋กœ ๊ฐ–๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ input, output์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. input๊ณผ output ๋ฉ”์†Œ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šคํ™” ํ•œ๋‹ค.

interface IInput {
  fun input()
}

interface IOutput {
  fun output()
}

๋ฌผ๋ก  ๊ณตํ†ต Interface๋กœ ๋ฌถ์–ด์„œ ํ•œ๋ฒˆ์— Input, Output์„ ํ†ต์นญํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์œผ๋‚˜ ์ดํ•ด๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด IInput, IOutput์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•˜๊ฒ ๋‹ค. (์ฝ”ํ‹€๋ฆฐ์ด๋‚˜ ์ž๋ฐ” 8 ์ด์ƒ์—์„œ๋Š” Lambda๋กœ ๊ตฌํ˜„ํ•ด๋„ ๋œ๋‹ค.)

interface ISignal {
  // input, output ์ž‘์—…์„ ํ†ต์นญ
  fun invoke()
}

IInput์„ ์ƒ์†ํ•œ ๊ตฌํ˜„์ฒด๋“ค์€ **์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฐ(family)**์„ ์ด๋ฃจ๊ฒŒ ๋œ๋‹ค.

class HDMIInput : IInput {
  override fun input(){
    println("HDMI ์ธํ’‹ ์‹ ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜")
  }
}

class CTypeInput : IInput {
  override fun input(){
    println("C type ์ธํ’‹ ์‹ ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜")
  }
}

class USB3.0Input : IInput {
  override fun input(){
    println("USB 3.0 ์ธํ’‹ ์‹ ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜")
  }
}

class VGAInput : IInput {
  override fun input(){
    println("VGA ์ธํ’‹ ์‹ ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜")
  }
}

IOutput์„ ์ƒ์†ํ•œ ๊ตฌํ˜„์ฒด๋“ค๋„ ์—ญ์‹œ **์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฐ(family)**์„ ์ด๋ฃจ๊ฒŒ ๋œ๋‹ค. ์ฝ”๋“œ๋Š” ๋น„์Šทํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์ƒ๋žตํ•˜๊ธฐ๋กœ ํ•˜๊ฒ ๋‹ค.

์ด๋ ‡๊ฒŒ ๋‚ด๋ถ€ ๊ตฌํ˜„์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ๋ถ€๋ถ„๋งŒ ์ถ”๋ ค์„œ ์ธํ„ฐํŽ˜์ด์Šคํ™” ์‹œํ‚ค๋ฉด, Converter ์ถ”์ƒ ํด๋ž˜์Šค ์ „์ฒด๋ฅผ ์ƒ์†๋ฐ›์ง€ ์•Š์•„๋„ ๋œ๋‹ค. (composition over inheritance ๋ผ๊ณ  ํ•œ๋‹ค.) ์ฆ‰ ์ƒ๋‹จ์— ๋งŒ๋“ค์–ด ๋†“์•˜๋˜ HDMIToHDMIConverter ํด๋ž˜์Šค์™€ CTypeToHDMIConverter ํด๋ž˜์Šค๋Š” ๋” ์ด์ƒ ํ•„์š”์—†๊ฒŒ ๋œ๋‹ค.

๊ธฐ์กด abstract class ์˜€๋˜ Converterํด๋ž˜์Šค์˜ abstract ์ง€์‹œ์–ด๋ฅผ ์‚ญ์ œํ•œ ํ›„, ์ƒ์„ฑ์ž์— IInput, IOutput ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด๋ฅผ DI(Dependency Injection) ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ด๋ณด์ž.

class Converter(private val iInput: IInput, private val iOutput: IOutput) {
  fun input(){
    // ์บก์Аํ™” --> ๋ฌด์Šจ IInput ๊ตฌํ˜„์ฒด๊ฐ€ ๋“ค์–ด์˜ฌ ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
    iInput.input()
  }

  fun output(){
    // ์บก์Аํ™” --> ๋ฌด์Šจ IOutput ๊ตฌํ˜„์ฒด๊ฐ€ ๋“ค์–ด์˜ฌ ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
    iOutput.output()
  }
}

์ •๋ฆฌ

  • Client ์ฝ”๋“œ์˜ "๋‚ด๋ถ€ ๊ตฌํ˜„์ด ๋‹ฌ๋ผ์ง€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜"์€ ์บก์Аํ™”๋˜์–ด ํ–ฅํ›„ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์–ด๋„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ์ „๋žต ํŒจํ„ด์—์„œ๋Š” Composition(์กฐํ•ฉ)์ด Inheritance(์ƒ์†)๋ณด๋‹ค ์œ ๋ฆฌํ•˜๋‹ค. (์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์žฌ์‚ฌ์šฉ ์ธก๋ฉด, SOLID OCP - ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™์— ๋ถ€ํ•ฉ)