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

ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด


VSCode๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜(.py, .java, .kt ๋“ฑ)์˜ ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ํ…์ŠคํŠธ ์—๋””ํ„ฐ์˜ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์€ VSCode ์™ธ์—๋„ NotePad++, SublimeText ๋“ฑ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ๋‹ค.

  • ํ…์ŠคํŠธ ์—๋””ํ„ฐ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ TextEditor ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์ •์˜ํ•˜์ž.
  • ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด ์ง€์›ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฌธ์„œ ํฌ๋งท์„ ์ธํ„ฐํŽ˜์ด์Šค Document ํด๋ž˜์Šค๋กœ ์ •์˜ํ•˜์ž.
abstract class TextEditor {
  protected abstract fun createDocument(type: DocumentType): Document // ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ
 
  fun create(type: DocumentType): Document {
    return createDocument(type)
  }
}
 
interface Document {
  fun open()
  fun close()
  fun save()
  fun revert()
}

์ถ”์ƒ ํด๋ž˜์Šค์ธ TextEditor๋Š” VSCode, NotePad++, SublimeText, ์‹ฌ์ง€์–ด MS Word ๋“ฑ์˜ ๋Œ€ํ‘œ๊ฒฉ์ด๋‹ค. ์–ด๋–ค ์ข…๋ฅ˜์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์„ ํƒํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๊ทธ์— ์ข…์†๋˜๋Š” ๋ฌธ์„œ์˜ ์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด MS Word๋ฅผ ์„ ํƒํ•ด์„œ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด, ์ด์— ์ข…์†๋˜๋Š” ๋ฌธ์„œ๊ฐ€ .docx ํฌ๋งท์ด ๋  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, .cpp ํฌ๋งท์ด ๋˜์ง€๋Š” ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ TextEditor ํด๋ž˜์Šค๋Š” ์–ธ์ œ Document์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”์ง€๋งŒ ์•Œ๊ณ  ์žˆ์„ ๋ฟ(create() ๋ฉ”์†Œ๋“œ), ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š”์ง€ ์‚ฌ์ „์— ์•Œ์ง€ ๋ชปํ•œ๋‹ค.

ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค ๋ฐ–์— ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ์ถ”์ƒ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šคํ™” ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ํŒจํ„ด์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„ ์ฝ”๋“œ์—์„œ createDocument()๋กœ ์ •์˜๋œ ๋ฉ”์†Œ๋“œ๋Š” ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ๋ผ ์นญํ•œ๋‹ค. createDocument()์— ๋„˜๊ธด ๋งค๊ฐœ๋ณ€์ˆ˜ type: DocumentType์— ๊ทผ๊ฑฐํ•˜์—ฌ ์–ด๋–ค ์ข…๋ฅ˜์˜ Document๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ธ๊ฐ€๋ฅผ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ createDocument()๋Š” Document์˜ ์„œ๋ธŒํด๋ž˜์Šค ์ค‘ ์–ด๋А ๊ฒƒ์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์€๋‹‰ํ•˜์—ฌ ํ”„๋ ˆ์ž„์›Œํฌ ๋‹จ์—์„œ ์•Œ ์ˆ˜ ์—†๋„๋ก ํ•œ๋‹ค.

TextEditor ํด๋ž˜์Šค์˜ ์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ VSCode๋ผ๋ฉด VSCode๋Š” createDocument()๋ฅผ ์žฌ์ •์˜ํ•˜์—ฌ, VSCode๊ฐ€ ์ง€์›ํ•˜๋Š” ํฌ๋งท์˜ Document ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์ด๋‹ค.

abstract class TextEditor {
  protected abstract fun createDocument(type: DocumentType): Document
 
  fun create(type: DocumentType): Document {
    return createDocument(type)
  }
}
 
interface Document {
  fun open()
  fun close()
  fun save()
  fun revert()
}

ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • ์•ž์„  ์˜ˆ์‹œ์ฒ˜๋Ÿผ Creator(TextEditor)๋ฅผ ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์ •์˜ํ•˜๊ณ , ์ •์˜ํ•œ ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ. ์ •์˜ํ•œ ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ์—ญ์‹œ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋กœ ์ง€์ •ํ•œ๋‹ค.
  • Creator(TextEditor)๋ฅผ ๊ตฌ์ฒด ํด๋ž˜์Šค๋กœ ์ •์˜ํ•˜๊ณ , ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ์˜ ๋””ํดํŠธ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ
    • ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™” ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
// type: DocumentType ์ด๋ผ๋Š” Enum ๋ณ€์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ธฐ๋ฉด ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„์„œ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ œํ’ˆ์„ ์ƒ์„ฑํ• ์ง€ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ œ๊ณต ๋ฌธ์„œ๋ฅผ Java, Kotlin, Cpp๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ •์˜ํ•˜์˜€๋Š”๋ฐ, TextEditor์˜ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ์ด๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์—ฌ ๋ฌธ์„œ ์ƒ์„ฑ์— ๋Œ€ํ•œ ๋กœ์ง์„ ๋” ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
class TextEditor {
  protected fun createDocument(type: DocumentType): Document {
    when(type){
      DocumentType.JAVA -> JavaDocument()
      DocumentType.KOTLIN -> KotlinDocument()
      DocumentType.CPP -> CppDocument()
    }
  }
}

ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์“ฐ๋ฉด Document ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค ํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋ธŒํด๋ž˜์‹ฑ์„ ํ•ด์•ผํ•œ๋‹ค. MSWordTextEditor๋Š” .docx ํฌ๋งท์˜ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. DocxDocument() ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์ด๋ฅผ ๋ฐ˜ํ™˜๋ฐ›์œผ๋ ค๋Š” TextEditor์˜ ์„œ๋ธŒ ํด๋ž˜์Šค์ธ MSWordTextEditor๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ์ด ๊ณผ์ •์€ ๋ฐ˜๋ณต์ ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”ผํ•ด์•ผ ํ•œ๋‹ค.

abstract class TextEditor {
  protected abstract fun createDocument(): Document
 
  fun create(): Document {
    return createDocument()
  }
}

// TextEditor์„ ์ƒ์†ํ•œ๋‹ค.
class MSWordTextEditor: TextEditor {
  override fun createDocument(): Document {
    return DocxDocument()
  }
}

์ •๋ฆฌ


ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ํŒจํ„ด์„ ์ด์šฉํ•  ๊ฒฝ์šฐ

  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ํ”„๋ ˆ์ž„์›Œํฌ ๋ ˆ๋ฒจ์—์„œ ๊ตฌ์ฒด ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์€๋‹‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋™์‹œ์— ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๋‹จ์ ๋„ ํ•ด๊ฒฐํ•œ๋‹ค.