1.์ ˆ์ฐจ์ง€ํ–ฅ(Procedual Programming)

  • ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์–ด๋–ค ์ˆœ์„œ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€์— ์ดˆ์ ์„ ๋งž์ถค, ์ปดํ“จํ„ฐ์˜ ์ฒ˜๋ฆฌ๊ตฌ์กฐ์™€ ์œ ์‚ฌ.
  • ์žฅ์  - ์ฒ˜๋ฆฌ์†๋„๊ฐ€ ๋น ๋ฆ„
  • ๋‹จ์  - ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€
            - ์—„๊ฒฉํ•œ ์‹คํ–‰์ˆœ์„œ๋กœ ์ธํ•œ ๋น„ํšจ์œจ
  • ์ ˆ์ฐจ์ง€ํ–ฅ ์–ธ์–ด์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋…์ด ๋“ฑ์žฅ

2.๊ฐ์ฒด์ง€ํ–ฅ(Object Oriented Programming)

2-1. ๊ฐ์ฒด์ง€ํ–ฅ ์ •์˜

  • ๊ฐ์ฒด๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ‘œํ˜„ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ
    ๊ฐ์ฒด ๋‚ด๋ถ€์— ์„ ์–ธ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹
  • ๊ฐ์ฒด : ํ”„๋กœ๊ทธ๋žจ์ƒ์—์„œ ๊ตฌํ˜„ํ•  ๋Œ€์ƒ
  • ํด๋ž˜์Šค : ๊ฐ์ฒด์˜ '์†์„ฑ'๊ณผ '๊ธฐ๋Šฅ'์„ ์ •์˜ํ•œ ์„ค๊ณ„๋„์™€ ๊ฐ™์€ ๊ฒƒ
  • ์ธ์Šคํ„ด์Šค : ํด๋ž˜์Šค์˜ ๋‚ด์šฉ๋Œ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ๊ตฌํ˜„๋  ์‹ค์žฌ(์ผ๋ฐ˜์ ์ธ ์˜๋ฏธ์˜ ๊ฐ์ฒด)

2-2. ๊ฐ์ฒด์ง€ํ–ฅ ํŠน์„ฑ

  • ์บก์Аํ™”
  • ์ƒ์†
  • ์ถ”์ƒํ™”
  • ๋‹คํ˜•์„ฑ
     ์ด ํŠน์ง•๋“ค์€ ๋ชจ๋‘ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฐœ๋…

2-2-1. ์บก์Аํ™”

  • ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ ๋ฐ ์ •๋ณด๋ฅผ ์บก์А์ฒ˜๋Ÿผ ํ•˜๋‚˜๋กœ ๊ฐ์‹ธ ์™ธ๋ถ€์—์„œ ๋ณผ ์ˆ˜ ์—†๊ฒŒ ์€๋‹‰ํ•˜์—ฌ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ
  • ์™„์„ฑ๋„ : ๋†’์€ ์‘์ง‘๋„(ํ•˜๋‚˜์˜ ์ฑ…์ž„์„ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๋“ค์ด ๋„ˆ๋ฌด ๋ถ„์‚ฐ๋˜์ง€ ์•Š๊ณ  ํ•œ ๊ฐ์ฒด์— ๋ชจ์—ฌ์žˆ๋Š” ์ •๋„)
  • ์ •๋ณด์€๋‹‰ : ๊ฐ์ฒด ์•ˆ์—์„œ ๋ฐ–์œผ๋กœ ๋˜๋Š” ๋ฐ–์—์„œ ์•ˆ์œผ๋กœ ์ •๋ณด์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์—†์Œ

 ๊ฐ์ฒด๋Š” ์Šค์Šค๋กœ ๋™์ž‘ ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ฐ€์ง€๊ณ (๋†’์€ ์‘์ง‘๋„),
     ์™ธ๋ถ€ ์˜์กด์„ ์ตœ์†Œํ™”(๋‚ฎ์€ ๊ฒฐํ•ฉ๋„)ํ•˜๊ณ  ์™ธ๋ถ€ ์นจ๋žต์„ ์ œํ•œ ํ•ด์•ผํ•จ

 

2-2-2. ์ƒ์†

  • ์ž์‹ํด๋ž˜์Šค(์„œ๋ธŒํด๋ž˜์„œ)๊ฐ€ ๋ถ€๋ชจํด๋ž˜์Šค(์Šˆํผํด๋ž˜์Šค)์˜ ์†์„ฑ์„ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ
  • ์ƒ์†์˜ ๋ชฉ์  : ์ถ”์ƒ๊ณผ ๊ตฌ์ฒดํ™”์˜ ๊ด€๊ณ„๋ฅผ ์œ„ํ•œ ๊ฒƒ(๊ณต์œ x)

2-2-3. ์ถ”์ƒํ™”

  • ์ถ”์ƒ์ฒด : ์ถ”์ƒํšŒ๋œ ๊ฐ์ฒด(์ƒ์œ„ ๊ฐ์ฒด)
  • ๊ตฌ์ƒ์ฒด : ๊ตฌ์ฒดํ™”๋œ ๊ฐ์ฒด(ํ•˜์œ„ ๊ฐ์ฒด)
  • ์ถ”์ƒํ™”๋Š” ์ƒ๋Œ€์ ์ธ ๊ฒƒ  ์ƒ์œ„๊ฐ์ฒด๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜์œ„๊ฐ์ฒด๋ณด๋‹ค ์ถ”์ƒ์ ์ด์—ฌ์•ผํ•จ

2-2-4. ๋‹คํ˜•์„ฑ

  • ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ค๋ฅธ ํ˜•ํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ
  • Overriding(์˜ค๋ฒ„๋ผ์ด๋”ฉ) : ๋ถ€๋ชจํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
  • Overloading(์˜ค๋ฒ„๋กœ๋”ฉ) : ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์€ ๋™์ผ, ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด๋‚˜, ๊ฐฏ์ˆ˜๋ฅผ ๋‹ฌ๋ฆฌํ•˜์—ฌ ์ค‘๋ณต ์ •์˜ํ•จ
                                              ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ํŠน์ • ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋˜๋Š” ๊ฒƒ

 

2-3. ๊ฐ์ฒด์ง€ํ–ฅ์˜ 5๊ฐ€์ง€ ์„ค๊ณ„์›์น™( SOLID์›์น™)

  • Simple Responsibility Principle(SRP, ๋‹จ์ผ์ฑ…์ž„์›์น™)
    ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผํ•œ๋‹ค
  • Open/ Closed Principle(OCP, ๊ฐœ๋ฐฉํ์‡„์›์น™)
    : ํด๋ž˜์Šค๋Š” ํ™•์žฅ์— ๋Œ€ํ•ด ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜๊ณ  ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค
  • Liskov Substitution Principle(LSP, ๋ฆฌ์Šค์ฝ”ํ”„์น˜ํ™˜์›์น™)
    : ํŒŒ์ƒ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋Š” ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋Œ€์ฒดํ•˜์—ฌ ์‚ฌ์šฉ ๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค
  • Interface Segregation Principle(ISP, ์ธํ„ฐํŽ˜์ด์Šค๋ถ„๋ฆฌ์›์น™)
    : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์†Œ๋“œ์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค
  • Dependency Inversion Principle(DIP, ์˜์กด์—ญ์ „์›์น™)
    : ์ถ”์ƒํ™”๋œ๊ฒƒ์€ ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค
    (์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์— ์˜์กดํ•˜์ง€ ๋ง๊ณ  ์ถ”์ƒํ™”๋œ๊ฒƒ์„ ์ฐธ์กฐ)

3. ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ VS ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    • ๋ฌผ์ด ์œ„์—์„œ ์•„๋ž˜๋กœ ํ๋ฅด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ˆœ์ฐจ์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘์š”์‹œํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ด๋‹ค.
    • ์ปดํ“จํ„ฐ์˜ ์ฒ˜๋ฆฌ๊ตฌ์กฐ์™€ ์œ ์‚ฌํ•ด ์‹คํ–‰์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
    • ์ฝ”๋“œ์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
    • C, FORTRAN, COBOL,PASCAL, BASIC
  • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    • ์‹ค์ œ ์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ๋“ค์„ ๊ฐ์ฒด๋กœ ๋ชจ๋ธ๋งํ•˜์—ฌ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•
    • ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์–ธ์–ด๋กœ Java๊ฐ€ ์žˆ๋‹ค.
    • ์บก์Аํ™”, ์ƒ์†, ๋‹คํ˜•์„ฑ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋ฒ•์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
    • ์ ˆ์น˜์ง€ํ–ฅ ์–ธ์–ด๋ณด๋‹ค ์‹คํ–‰์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.
    • JAVA, Object-C, Swift,C++,Python

 

์ฐธ๊ณ ) https://mangkyu.tistory.com/88

 

[๊ธฐ์ˆ ๋ฉด์ ‘] CS ๊ธฐ์ˆ ๋ฉด์ ‘ ์งˆ๋ฌธ - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณตํ†ต (1/8)

1. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณตํ†ต [ OOP๋ž€ ] OOP๋Š” ํ˜„์‹ค ์„ธ๊ณ„๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์˜ฎ๊ฒจ์™€ ํ˜„์‹ค ์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ๋“ค์„ ๊ฐ์ฒด๋กœ ๋ณด๊ณ , ๊ทธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๊ฐœ๋ฐœํ•˜๊ณ ์ž ํ•˜๋Š” ํŠน์ง•๊ณผ ๊ธฐ๋Šฅ์„ ๋ฝ‘์•„์™€ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. OOP

mangkyu.tistory.com

 

์ฐธ๊ณ ) https://zwzwzw123-daily-daily.tistory.com/95

 

[CS์ง€์‹ - ๊ฐœ๋ฐœ ์ƒ์‹] ์ ˆ์ฐจ์ง€ํ–ฅ(PP) vs ๊ฐ์ฒด์ง€ํ–ฅ(OOP)

1. ์ ˆ์ฐจ์ง€ํ–ฅ(PP) ๊ธฐ๋Šฅ์ค‘์‹ฌ์œผ๋กœ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉ์‹ ์–ด๋–ค๊ธฐ๋Šฅ์„ ์–ด๋–ค ์ˆœ์„œ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€์— ์ดˆ์ ์„ ๋งž์ถค ๋‹จ์  - ์œ ์ง€๋ณด์ˆ˜์˜ ์–ด๋ ค์Œ - ์—„๊ฒฉํ•œ ์‹คํ–‰์ˆœ์„œ๋กœ ์ธํ•œ ๋น„ํšจ์œจ์  → ์ ˆ์ฐจ์ง€ํ–ฅ์–ธ์–ด์˜ ๋‹จ์ ์„ ๋ณด์•ˆํ•˜

zwzwzw123-daily-daily.tistory.com

 

1. ๋””์ž์ธ ํŒจํ„ด

  • ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ๊ณผ์ •์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค์— ๋Œ€ํ•œ ์ „ํ˜•์ ์ธ ํ•ด๊ฒฐ์ฑ…
    → SW์—์„œ ์„ค๊ณ„์  ๊ด€์ ์œผ๋กœ ์ข€ ๋” ์‰ฝ๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•(ํŒจํ„ด)
  • ์‹œ์Šคํ…œ์˜ ์œ ์ง€๋ณด์ˆ˜, ์„ค๊ณ„์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜๊ฐ€๋Šฅ
  • MVCํŒจํ„ด ๋˜ํ•œ ๋””์ž์ธํŒจํ„ด์˜ ํ•œ ์ข…๋ฅ˜

2. MVC ํŒจํ„ด ์ •์˜

  • Model, View, Controller์˜ ์•ฝ์ž → ํ”„๋กœ์ ํŠธ(๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์„ธ๊ฐ€์ง€์˜ ์—ญํ• ๋กœ ๊ตฌ๋ถ„ํ•œ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก 
  • ์‚ฌ์šฉ์ž๊ฐ€ Controller ์กฐ์ž‘ → Model์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ด → View์—์„œ ์ œ์–ดํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ

2-1.  Model ๋ชจ๋ธ

  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋™์ž‘ํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(๋ฐ์ดํ„ฐ)์ฒ˜๋ฆฌ / ํ”„๋กœ์ ํŠธ(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)์˜ ์ •๋ณด, ๋ฐ์ดํ„ฐ
  • ๊ทœ์น™ - ์‚ฌ์šฉ์ž๊ฐ€ ํŽธ์ง‘ํ•˜๊ธธ ์›ํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค
            - View๋‚˜ Controller์— ๋Œ€ํ•ด์„œ ์–ด๋–ค ์ •๋ณด๋„ ์•Œ์ง€ ๋ง์•„์•ผํ•œ๋‹ค
            - ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด, ๋ณ€๊ฒฝ ํ†ต์ง€์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด์•ผ๋งŒ ํ•œ๋‹ค
       

2-2. View ๋ทฐ

  • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„, User Interfaca(UI) / ๋ฐ์ดํ„ฐ ๋ฐ ๊ฐ์ฒด์˜ ์ž…๋ ฅ, ์ถœ๋ ฅ 
  • ๊ทœ์น™ - ๋ชจ๋ธ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค
            - ๋ชจ๋ธ์ด๋‚˜ ์ปจํŠธ๋กค๋Ÿฌ์™€ ๊ฐ™์ด ๋‹ค๋ฅธ ๊ตฌ์„ฑ์š”์†Œ๋“ค์„ ๋ชฐ๋ผ์•ผ ํ•œ๋‹ค
            - ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด ๋ณ€๊ฒฝํ†ต์ง€์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด์•ผ๋งŒ ํ•œ๋‹ค

2-3. Contoller ์ปจํŠธ๋กค๋Ÿฌ

  • Model(๋ฐ์ดํ„ฐ)๊ณผ View(์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค)์˜ ์‚ฌ์ด๋ฅผ ์ด์–ด์ฃผ๋Š” ๋‹ค๋ฆฌ์—ญํ• 
  • ๊ทœ์น™ - ๋ชจ๋ธ์ด๋‚˜ ๋ทฐ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค
            - ๋ชจ๋ธ์ด๋‚˜ ๋ทฐ์˜ ๋ณ€๊ฒฝ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•ด์•ผํ•œ๋‹ค

3. MVC ํŒจํ„ด ์‚ฌ์šฉ์ด์œ 

  •  ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง๊ณผ UI๋กœ์ง์„ ๋ถ„๋ฆฌ   ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์Œ
  • ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์Œ
  • Model, View๊ฐ€ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค์— ์ข…์†๋˜์ง€ ์•Š์•„ ํ™•์žฅ์„ฑ, ์œ ์—ฐ์„ฑ์— ์œ ๋ฆฌ
  • ๊ธฐ๋Šฅ๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌ → ๊ฐ€๋…์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๊ฐ€

 

4. MVC ํŒจํ„ด ํ•œ๊ณ„

  • ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค์ง€๋Š” ํ˜„์ƒ ๋ฐœ์ƒ
  • ์ปจํŠธ๋กค๋Ÿฌ์— ๋‹ค์ˆ˜์˜ model๊ณผ view๊ฐ€ ๋ณต์žกํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜๋Š” ์ƒํ™ฉ ๋ฐœ์ƒ๊ฐ€๋Šฅ

 

5. MVC ํŒจํ„ด์˜ ์˜ˆ

  • Google์˜ Angular JS
  • PHP์˜ CODEIGNITER
  • Python์˜ django
  • Facebook์˜ React๋“ฑ

 

์ฐธ๊ณ ) https://readystory.tistory.com/114

 

๋””์ž์ธ ํŒจํ„ด(Design Pattern)์ด๋ž€?

๊ฐ์ฒด์ง€ํ–ฅ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ '์ž˜' ์„ค๊ณ„ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์‰ฌ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋” ํž˜๋“ญ๋‹ˆ๋‹ค. ์„ค๊ณ„๋ฅผ ํ•  ๋•Œ์—๋Š” ์ง€๊ธˆ ๋‹น์žฅ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด

readystory.tistory.com

 

์ฐธ๊ณ ) https://cocoon1787.tistory.com/733

 

[๊ฐœ๋ฐœ์ƒ์‹] MVC ํŒจํ„ด์ด๋ž€? (Model-View-Controller)

๐Ÿš€ ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ๊ฐœ๋ฐœ์ž ๋ฉด์ ‘์—์„œ ์ž์ฃผ ๋‚˜์˜ค๋Š” ์งˆ๋ฌธ ์ค‘์˜ ํ•˜๋‚˜์ธ "MVCํŒจํ„ด"์— ๋Œ€ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. MVCํŒจํ„ด์˜ ์˜๋ฏธ์™€ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ , ์‚ฌ์šฉ ์˜ˆ์‹œ ๋“ฑ๋“ฑ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ’ก MVC ํŒจํ„ด์ด๋ž€?

cocoon1787.tistory.com

 

์ฐธ๊ณ ) https://zwzwzw123-daily-daily.tistory.com/94

 

[CS์ง€์‹ - ๊ฐœ๋ฐœ ์ƒ์‹] MVC ํŒจํ„ด

1. ๋””์ž์ธ ํŒจํ„ด ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ๊ณผ์ •์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค์— ๋Œ€ํ•œ ์ „ํ˜•์ ์ธ ํ•ด๊ฒฐ์ฑ… →SW์—์„œ ์„ค๊ณ„์  ๊ด€์ ์œผ๋กœ ์ข€ ๋” ์‰ฝ๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•(ํŒจํ„ด) MVCํŒจํ„ด ๋˜ํ•œ ๋””์ž์ธํŒจํ„ด์˜ ํ•œ ์ข…

zwzwzw123-daily-daily.tistory.com

 

1. Git

  • Version Control System(VCS)๋กœ ๋กœ์ปฌ์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๋ฒ„์ „๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ
  • ์†Œ์Šค์ฝ”๋“œ ์ˆ˜์ •์— ๋‹ค๋ฅธ ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์‹œ์Šคํ…œ

* VCS : ํŒŒ์ผ ๋ณ€ํ™”๋ฅผ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๊ธฐ๋กํ–ˆ๋‹ค๊ฐ€ ํŠน์ • ์‹œ์ ์˜ ๋ฒ„์ „์„ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ

  • ์ฝ”๋“œ์™€ ์ˆ˜์ •๋‚ด์—ญ์„ ๊ธฐ๋ก/๊ด€๋ฆฌํ•˜๋„๋ก ๋•๋Š” ๋ฒ„์ „๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ
  • ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑ/๋ณต๊ตฌ/์‚ญ์ œ/๋ณ‘ํ•ฉ ๊ฐ€๋Šฅ
  • ํ˜ผ์ž ์ž‘์—…ํ•˜๊ฑฐ๋‚˜ ํ์‡„์ ์ธ ๋ฒ”์œ„์˜ ํ˜‘์—…
  • ๊ฐœ๋ฐœ์ž์™€ ์‹ค์‹œ๊ฐ„ ์ž‘์—…๊ณต์œ  ๋ถˆ๊ฐ€๋Šฅ(๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ)

 

2. Github

  • ํด๋ผ์šฐ๋“œ ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๋ฒ„์ „๊ด€๋ฆฌ ์‹œ์Šคํ…œ
  • Git Repository๋ฅผ ์œ„ํ•œ ์›น๊ธฐ๋ฐ˜ ํ˜ธ์ŠคํŒ…์„œ๋น„์Šค
  • ํด๋ผ์šฐ๋“œ ์„œ๋ฒ„(์ž์ฒด๊ตฌ์ถ•x)๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ์ปฌ์—์„œ ๋ฒ„์ „๊ด€๋ฆฌํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์—…๋กœ๋“œํ•˜์—ฌ ๊ณต์œ ๊ฐ€๋Šฅ
  • ์ €์žฅ์†Œ๋ฅผ ๊นƒํ—ˆ๋ธŒ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ํด๋ผ์šฐ๋“œ ์„œ๋ฒ„๋ฅผ ์ด์šฉ
  • ํ˜‘์—…์‹œ ์˜คํ”ˆ์†Œ์Šค ๊ณต์œ ๊ฐ€๋Šฅ

 

3. Git ๊ด€๋ จ ์šฉ์–ด

  • ๋กœ์ปฌ ์ €์žฅ์†Œ(local repository) : ๋‚ด PC์—์„œ ๊ด€๋ฆฌํ•˜๋Š” git์ €์žฅ์†Œ
  • ์›๊ฒฉ ์ €์žฅ์†Œ(remote repository) : ๋กœ์ปฌ์ €์žฅ์†Œ๋ฅผ ์—…๋กœ๋“œ ํ•˜๋Š” ๊ณณ (ex. GitHub, Bitbucket,GitLab ๋“ฑ)
  • Staging Area(Index) : ์ž‘์—… ํด๋”์—์„œ ์ž‘์—…ํ•œ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๋Š” ๊ณณ(git์ €์žฅ์†Œ์— commitํ•˜๊ธฐ ์ „ ์˜ฌ๋ ค๋‘๋Š” ๊ณต๊ฐ„) 
  • ์ปค๋ฐ‹(commit) : Git(๋กœ์ปฌ ์ €์žฅ์†Œ)์— ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ €์žฅํ•˜๋Š” ์ž‘์—…
  • ํ‘ธ์‰ฌ(push) : Github(๋˜๋Š” ์›๊ฒฉ ์ €์žฅ์†Œ)์— ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ €์žฅํ•˜๋Š” ์ž‘์—…
  • ํ’€(pull) : Github(๋˜๋Š” ์›๊ฒฉ ์ €์žฅ์†Œ)์— ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ์ž‘์—…
  • ๋จธ์ง€(merge) : ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ

 

3-1. commit type

  • feat : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • fix : ๋ฒ„๊ทธ ์ˆ˜์ •
  • docs : ๋ฌธ์„œ ์ˆ˜์ •
  • style : ์ฝ”๋“œ ํฌ๋งทํŒ…, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ, ์ฝ”๋“œ๋ณ€๊ฒฝ์ด ์—†๋Š” ๊ฒฝ์šฐ
  • refector : ์ฝ”๋“œ ๋ฆฌํŽ™ํ† ๋ง
  • test : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ๋ฆฌํŽ™ํ† ๋ง ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€
  • chore : ๋นŒ๋“œ์—…๋ฌด ์ˆ˜์ •, ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ˆ˜์ •

 

4. Git์˜ 3๊ฐ€์ง€ ์˜์—ญ

  • Working Directory : ๋‚ด๊ฐ€ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋””๋ ‰ํ† ๋ฆฌ
  • Staging Area : ์ปค๋ฐ‹ํ•˜๊ธฐ ์œ„ํ•ด $git add ๋ช…๋ น์–ด๋กœ ์ถ”๊ฐ€ํ•œ ํŒŒ์ผ๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ๊ณต๊ฐ„ 
  • Repository : ์ปค๋ฐ‹๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ์ €์žฅ์†Œ

 

5. Staging Area

์–ด๋–ค ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ €์žฅ์†Œ์— ์ปค๋ฐ‹๋˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ๊ฑฐ์ณ์•ผํ•˜๋Š” ์ค‘๊ฐ„๋‹จ๊ณ„์ด๋‹ค.

Staging Area์— ์ถ”๊ฐ€ํ•œ ํŒŒ์ผ๋“ค์„ commit ํ•˜๋ฉด ์ตœ์ข…์ ์œผ๋กœ ์ €์žฅ์†Œ(Repository)์— ์ €์žฅ๋œ๋‹ค.

 

 

6. ์ •๋ฆฌ

Git์€ ๋ฒ„์ „๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์ด๊ณ 

Github๋Š” ๋ฒ„์ „๊ด€๋ฆฌ, ์†Œ์Šค์ฝ”๋“œ ๊ณต์œ , ๋ถ„์‚ฐ๋ฒ„์ „์ œ์–ด ๋“ฑ์ด ๊ฐ€๋Šฅํ•œ ์›๊ฒฉ ์ €์žฅ์†Œ๋‹ค.

1. TDD (Test Driven Development) ๋ž€?

TDD๋Š” 'ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ'๋กœ ์ž‘์€ ๋‹จ์œ„์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ์ž˜๋ชป๋˜์—ˆ์Œ์„ ์ฆ๋ช…ํ•˜๊ณ ,

์ด๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด์„œ ๋ชฉํ‘œ์— ๋ถ€ํ•ฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณต ๊ตฌํ˜„ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค.

 

์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ๋ฐฉ์‹์€ '์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„ > ์„ค๊ณ„ > ๊ฐœ๋ฐœ > ํ…Œ์ŠคํŠธ > ๋ฐฐํฌ'์˜ ํ˜•ํƒœ.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ๋А๋ฆฌ๊ฒŒ ํ•˜๋Š” ์ž ์žฌ์  ์œ„ํ—˜ ์กด์žฌ

์ž‘์€ ๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ ์ˆ˜์ •์—๋„ ๋ชจ๋“  ๋ถ€๋ถ„์„ ํ…Œ์ŠคํŠธํ•ด์•ผํ•˜๋ฏ€๋กœ ์ „์ฒด ๋ฒ„๊ทธ ๊ฒ€์ถœ์ด ์–ด๋ ค์›Œ์ง

 

TDD์˜ ๋Œ€ํ‘œ์ ์ธ Tool 'JUnit'์€ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” Java ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

์ตœ๊ทผ์—๋Š” ๋™์ž‘ ํ…Œ์ŠคํŠธ ๋ฟ๋งŒ์•„๋‹ˆ๋ผ jenkins(๋นŒ๋“œ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ) ๋“ฑ์˜ ci ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์„ฑ๊ณต์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด pr์„ ํ†ต๊ณผ์‹œํ‚ค๊ฑฐ๋‚˜ ์šด์˜๋ธŒ๋žœ์น˜๋กœ merge ์‹œํ‚ค๋Š” ๋“ฑ์˜ ์ถ”๊ฐ€๋™์ž‘์—๋„ ๋งŽ์ด ํ™œ์šฉ๋œ๋‹ค.

 

 

2. TDD ๊ฐœ๋ฐœ์ฃผ๊ธฐ

- RED : ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

- GREEN : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์„ฑ๊ณต์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ

- BLUE : ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ, ์ผ๋ฐ˜ํ™” ๋“ฑ์˜ ๋ฆฌํŒฉํ† ๋ง ์ˆ˜ํ–‰- 

 

- TDD ์„ธ๋ถ€ํ”„๋กœ์„ธ์Šค

๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ > ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰ > ์šด์˜ ์ฝ”๋“œ ์ž‘์„ฑ > ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰ > ์„ค๊ณ„ ๊ฐœ์„ (๋ฆฌํŒฉํ† ๋ง) > ๋‹จ์œ„ํ…Œ์ŠคํŠธ ...๋ฐ˜๋ณต

 

 

3. ์–ด๋–ค ์ƒํ™ฉ์—์„œ TDD๋ฅผ ํ•ด์•ผํ• ๊นŒ?

TDD๋Š” ์‚ฌ์šฉ์„ค๋ช…์„œ์ด์ž ์˜์‚ฌ์†Œํ†ต์˜ ์ˆ˜๋‹จ์ด ๋˜๋ฏ€๋กœ ํ”ผ๋“œ๋ฐฑ๊ณผ ํ˜‘๋ ฅ์ด ์ฆ์ง„๋˜์–ด, ๋ถˆํ™•์‹ค์„ฑ์— ๋Œ€๋น„๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

์ฒ˜์Œ ํ•ด๋ณด๋Š” ํ”„๋กœ๊ทธ๋žจ ์ฃผ์ œ์ด๊ฑฐ๋‚˜(๋‚ด๋ถ€์˜ ๋ถˆํ™•์‹ค์„ฑ), ๊ณ ๊ฐ ์š”๊ตฌ์กฐ๊ฑด์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ(์™ธ๋ถ€์˜ ๋ถˆํ™•์‹ค์„ฑ),

๋ˆ„๊ฐ€ ์œ ์ง€๋ณด์ˆ˜ํ•  ์ง€ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ ๋“ฑ์˜ ์ƒํ™ฉ์— ์ ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

 

 

4. TDD ์žฅ์ 

- ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๋Œ€๋กœ ๋กœ์ง์ด ๋™์ž‘ํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋‹ค. (๊ฐœ๋ฐœ์˜ ๋ฐฉํ–ฅ์„ฑ์„ ์žƒ์ง€ ์•Š๊ฒŒ ์œ ์ง€)

- ์ž ์žฌ์  ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์–ดํ•˜์—ฌ ๋””๋ฒ„๊น… ์‹œ๊ฐ„๊ณผ ์žฌ์„ค๊ณ„ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๋กœ์ง ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์˜ํ–ฅ๋„๋ฅผ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๊ณ , ์ถ”๊ฐ€ ๊ตฌํ˜„์ด ์šฉ์ดํ•˜๋‹ค.

 

 

5. TDD ๋‹จ์ 

- ์ƒ์‚ฐ์„ฑ์˜ ์ €ํ•˜

(SI ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ๋ณด๋‹ค ๋‚ฉ๊ธฐ์ผ ์ค€์ˆ˜๊ฐ€ ์ค‘์š”ํ•˜๋ฏ€๋กœ TDD ๋ฐฉ์‹์„ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ)

- ๊ธฐ์กด์˜ ๊ฐœ๋ฐœ๋ฐฉ์‹์„ ๋งŽ์ด ๋ฐ”๊พธ์–ด์•ผํ•จ

- ๊ตฌ์กฐ์— ์–ฝ๋งค์ธ๋‹ค.

1. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„

- ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ „์ฒด์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์„ ๋งํ•จ

- ๋Œ€ํ‘œ์ ์œผ๋กœ ์ ˆ์ฐจ์ , ๊ฐ์ฒด์ง€ํ–ฅ, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์กด์žฌํ•œ๋‹ค.

- ํฌ๊ฒŒ ๋ถ„๋ฅ˜ํ•˜๋ฉด ๋ช…๋ นํ˜• / ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

 

1-1. ๋ช…๋ นํ˜•(Imperative)ํ”„๋กœ๊ทธ๋ž˜๋ฐ

: ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ƒํƒœ์™€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ๊ตฌ๋ฌธ์˜ ๊ด€์ ์—์„œ์˜ ์—ฐ์‚ฐ์„ ์„ค๋ช…

(์ปดํ“จํ„ฐ๊ฐ€ ์ˆ˜ํ–‰ํ•  ๋ช…๋ น๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์จ๋†“์€๊ฒƒ)

- ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

- ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด: C, C++, Java, Pascal, Ruby 

 

1-2. ์„ ์–ธํ˜•(Declarative)ํ”„๋กœ๊ทธ๋ž˜๋ฐ

: ํ•„์š”ํ•œ ๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ๊ธฐ์ˆ ํ•˜๊ธฐ๋ณด๋‹ค ํ•„์š”ํ•œ ๊ฒƒ์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” ๊ฒƒ์— ์ดˆ์ ์„ ๋งž์ถ”๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌ์กฐ

: ๋ชฉํ‘œ๋ฅผ ๋ช…์‹œํ•˜๊ณ , ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ '๋ฌด์—‡'์— ์ง‘์ค‘ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ('์–ด๋–ป๊ฒŒ'์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ์ถ”์ƒํ™”)

- ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ : 

- ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด : HTML, Lisp, Haskell, Prolog, SQL, XML 


2. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

- ์ž๋ฃŒ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ•™์  ํ•จ์ˆ˜์˜ ๊ณ„์‚ฐ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ , ์ƒํƒœ์™€ ๊ฐ€๋ณ€๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„.

- ์ˆœ์ˆ˜ํ•จ์ˆ˜๋ฅผ ์กฐํ•ฉํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

- ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด 3๋Œ€์žฅ : Clojure, Scala(์‹ค๋ฌด์— ๋„์ž…ํ•˜๊ธฐ ์ข‹์Œ), Haskell(ํ•™๊ณ„ ์ •ํ†ตํŒŒ ์ˆœ์ˆ˜ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด) 

- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, ์ฝ”ํ‹€๋ฆฐ, ํŒŒ์ด์ฌ ๋“ฑ์—๋„ ์ตœ๊ทผ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ๋ฒ•์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

- ์™ธ๋ถ€ํ™˜๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ์ . ์ฃผ์–ด์ง„ ์ž‘์—…๋งŒ ํ•œ๋‹ค.

 

์ˆ˜ํ•™์˜ ์›๋ฆฌ์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€. ๋งค์šฐ๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ณ  ๋‚œํ•ด..

๊ทธ๋ž˜์„œ ์‚ฌ๋žŒ์˜ ์‚ฌ๊ณ ๋ฐฉ์‹๊ณผ ๊ฐ€๊นŒ์šด ์ ˆ์ฐจ์ง€ํ–ฅ, ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋” ๋ณดํŽธ์ ์œผ๋กœ ๋งŽ์ด ์“ฐ์—ฌ์ง€๊ณ  ์žˆ์Œ.

 

๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ณ„์‚ฐํ•ด์„œ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์˜ ์ค‘์š”์„ฑ์ด ๋ถ€๊ฐ๋˜๋ฉด์„œ

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๋‹ค์‹œ ์ฃผ๋ชฉ์„ ๋ฐ›๊ธฐ ์‹œ์ž‘ํ•œ๊ฒƒ.


3. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง•

3-1. ์ˆœ์ˆ˜ํ•จ์ˆ˜ Pure function

- ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ํ•จ์ˆ˜

- ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ธ์ž์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๊ทธ๋žจ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” side effect ๊ฐ€ ์—†๋Š” ๊ฒƒ.

- ํ•จ์ˆ˜์—์„œ ์™ธ๋ถ€์˜ ์ƒํƒœ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๋˜๋Š” ์™ธ๋ถ€์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์ˆœ์ˆ˜ํ•จ์ˆ˜๋ผ ๋ณผ ์ˆ˜ ์—†๋‹ค!

- ๋™์ผํ•œ ์ธ์ž๋ฅผ ๋„ฃ์—ˆ์„ ๋•Œ ํ•ญ์ƒ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์–ธ์ œ ์„ ์–ธ๋˜์—ˆ๋Š”์ง€ ์™ธ๋ถ€์— ์˜ํ–ฅ๋ฐ›์ง€ ์•Š๋„๋ก ์ž‘์„ฑํ•ด์•ผํ•œ.

 

3-2. ๋น„์ƒํƒœ Stateless , ๋ถˆ๋ณ€์„ฑ Immutability

- ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค.

- ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์›๋ณธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ,

๊ทธ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด ๊ทธ ์ผ๋ถ€๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ณ€๊ฒฝํ•œ ๋ณต์‚ฌ๋ณธ์„ ์‚ฌ์šฉํ•ด ์ž‘์—…์„ ์ง„ํ–‰

(์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ์ƒˆ๋กœ์šด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•ด์•ผํ•จ)

- ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ์œผ๋กœ์„œ ๋ถ€์ž‘์šฉ(ํ•จ์ˆ˜ํ˜ธ์ถœ์‹œ ์™ธ๋ถ€์ƒํƒœ๋ณ€๊ฒฝ, ์˜ˆ์ƒ์น˜๋ชปํ•œ ์—๋Ÿฌ๋ฐœ์ƒ ๋“ฑ)์„ ๋งŒ๋“ค์ง€ ์•Š์Œ

- ๋ฉ€์“ฐ๋ ˆ๋”ฉ ํ™˜๊ฒฝ(์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ํ•˜๋‚˜์˜ ์ž์›์„ ๊ณต์œ ํ•˜๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๊ฐ™์€ ์ž์›์„ ๋‘๊ณ  ๊ฒฝ์Ÿ์ƒํƒœ์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ)์—์„œ๋„ ์•ˆ์ •์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

3-3. ์„ ์–ธํ˜• ํ•จ์ˆ˜ Expressions

- ์„ ์–ธํ˜•์€ "๋ฌด์—‡"์„ ํ•  ๊ฒƒ์ธ๊ฐ€์— ์ฃผ๋ชฉ / ๋ช…๋ นํ˜•์€ ๋ฌด์—‡์„ "์–ด๋–ป๊ฒŒ"ํ•  ๊ฒƒ์ธ๊ฐ€์— ์ฃผ๋ชฉ 

- if, for, switch์™€ ๊ฐ™์€ ๋ช…๋ น๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค.

 

3-4. 1๊ธ‰ ๊ฐ์ฒด์™€ ๊ณ ์ฐจํ•จ์ˆ˜ First-class, Higher-order functions

- 1๊ธ‰๊ฐ์ฒด์˜ ํŠน์ง• : ๋ณ€์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์•ˆ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ• ๋‹น๋œ ์ด๋ฆ„๊ณผ ๊ด€๊ณ„์—†์ด ๊ณ ์œ ํ•œ ๊ตฌ๋ณ„์ด ๊ฐ€๋Šฅ, ๋™์ ์œผ๋กœ ํ”„๋กœํผํ‹ฐ ํ• ๋‹น ๊ฐ€๋Šฅ.

- ๊ณ ์ฐจํ•จ์ˆ˜์˜ ํŠน์ง• : ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ์จ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค. ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ๋˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


4. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฅ์ 

- ๋†’์€ ์ˆ˜์ค€์˜ ์ถ”์ƒํ™” ์ œ๊ณต(๋ณต์žกํ•œ ์ž๋ฃŒ, ๋ชจ๋“ˆ, ์‹œ์Šคํ…œ ๋“ฑ์œผ๋กœ๋ถ€ํ„ฐ ํ•ต์‹ฌ ๊ฐœ๋…, ๊ธฐ๋Šฅ์„ ๊ฐ„์ถ”๋ ค๋ƒ„)

  * ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ์›์น™ 'ํ•จ์ˆ˜๋Š” ํ•œ๊ฐ€์ง€ ๋™์ž‘๋งŒ ํ•ด์•ผํ•จ' => ์—ฌ๋Ÿฌ ๋™์ž‘์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋ฉด, ๋‹ค๋ฅธ ํ•จ์ˆ˜, ๋ชจ๋“ˆ๊ณผ์˜ ์ข…์†์„ฑ์ด ์ปค์ ธ        ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง.

- ํ•จ์ˆ˜ ๋‹จ์œ„์˜ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ์ˆ˜์›”

-. ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ–ฅํ•˜๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋žจ ๋™์ž‘ ์˜ˆ์ธก์ด ์‰ฝ๋‹ค

 

5. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋‹จ์ 

- ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

- ๋ฐ˜๋ณต์„ for๋ฌธ์ด ์•„๋‹Œ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ(deep copy), ์žฌ๊ท€์  ์ฝ”๋“œ์Šคํƒ€์ผ์€ ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์งˆ ์ˆ˜ ์žˆ๋‹ค.

* ์žฌ๊ท€ํ•จ์ˆ˜ : ํ•จ์ˆ˜ ์•ˆ์— ์ž์‹ ์˜ ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜. ์ž์‹ ์˜ ๋กœ์ง์„ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ์ผ์ • ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋ฉด

ํ•จ์ˆ˜๋ฅผ ์ดํƒˆํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•œ๋‹ค.

- ์ˆœ์ˆ˜ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ์€ ์‰ฌ์šธ ์ˆ˜ ์žˆ์œผ๋‚˜, ์กฐํ•ฉ์€ ์‰ฝ์ง€ ์•Š๋‹ค.


6. ์ •๋ฆฌ

ui ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํŠน์„ฑ์ƒ ๋งŽ์€ ์ƒํƒœ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๋ฏ€๋กœ ์ˆœ์ˆ˜ํ•จ์ˆ˜ํ˜•ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋งŒ์„ ์ด์šฉํ•ด์„œ๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ ํ•จ.

๋”ฐ๋ผ์„œ 'ํ•จ์ˆ˜ํ˜• ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ'์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜, ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•จ์ˆ˜ํ˜•ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง•์„

๊ฒฐํ•ฉํ•ด ์•ˆ์ •์ ์ธ ํ”„๋กœ๊ทธ๋žจ์„ ํ•˜๋Š” ์‹์œผ๋กœ ํ™œ์šฉ. 

์›ํ•˜๋Š” ๋ชฉํ‘œ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๊ฒƒ์„ ์ž˜ ๊ณจ๋ผ ์‚ฌ์šฉํ•ดํ•˜๊ณ , ์—ฌ๋Ÿฌ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ๋‘๋ฃจ ์•Œ์•„์•ผ ํ•œ๋‹ค.

+ Recent posts