Computer/Computer Science

[System Engineering] (iOS) ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„ / ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° (feat. swift μ½”λ“œλ‘œ λΉ„κ΅ν•˜λ©° μ•Œμ•„λ³΄κΈ°)

감자 πŸ₯” 2022. 9. 20. 17:12
λ°˜μ‘ν˜•

μŠ€ν„°λ””λ₯Ό μš΄μ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή repository에 κ°€λ©΄ 더 λ§Žμ€ 정보λ₯Ό 보싀 수 μžˆμŠ΅λ‹ˆλ‹€!
특히 close 된 PR을 λ³΄μ‹œλ©΄, μ–΄λ–€ 뢀뢄에 λŒ€ν•΄μ„œ κ³ λ―Όν•˜κ³  μŠ€ν„°λ””μ›λ“€κ³Ό μ΄μ•ΌκΈ°λ‚˜λˆ΄λŠ”μ§€ 보싀 수 μžˆμŠ΅λ‹ˆλ‹€ 

https://github.com/JulSaMo/CS-start

 

GitHub - JulSaMo/CS-start: πŸ“ CS 지식 λŒ€λ°±κ³Ό ✨

πŸ“ CS 지식 λŒ€λ°±κ³Ό ✨. Contribute to JulSaMo/CS-start development by creating an account on GitHub.

github.com

 


 

🟠 ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„ (Programming Paradigm)

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ€ ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ ν”„λ‘œκ·Έλž˜λ°μ˜ κ΄€μ μœΌ λ½μ ν•˜κ³  μ½”λ“œλ₯Ό μ–΄λ–»κ²Œ μž‘μ„±ν•  지 κ²°μ •ν•˜λŠ” 역할을 ν•œλ‹€. μƒˆλ‘œμš΄ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ„ ν†΅ν•΄μ„œ μƒˆλ‘œμš΄ λ°©μ‹μœΌλ‘œ μƒκ°ν•˜λŠ” 법을 배우게 되고, 이λ₯Ό λ°”νƒ•μœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ²Œ λœλ‹€.

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ€ μ•„λž˜μ™€ 같이 ꡬ별할 수 μžˆλ‹€.

πŸ”Έ λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°

무엇(what)을 ν•  것인지 λ‚˜νƒ€λ‚΄κΈ°λ³΄λ‹€ μ–΄λ–»κ²Œ(How) ν•  것인지λ₯Ό μ„€λͺ…ν•˜λŠ” 방식
ν”„λ‘œκ·Έλž˜λ°μ˜ μƒνƒœ, μƒνƒœλ₯Ό λ³€κ²½μ‹œν‚€λŠ” ꡬ문의 κ΄€μ μ—μ„œ 연산을 μ„€λͺ…ν•œλ‹€.
  • μ ˆμ°¨μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°
    • μˆ˜ν–‰λ˜μ–΄μ•Όν•  순차적인 처리 과정을 ν¬ν•¨ν•˜λŠ” 방식 (C, C++)
  • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°
    • κ°μ²΄λ“€μ˜ μ§‘ν•©μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ˜ μƒν˜Έμž‘μš©μ„ ν‘œν˜„ (C++, Java, C#)

πŸ”Έ μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°

μ–΄λ–»κ²Œ 할건지(HOW)λ³΄λ‹€λŠ” 무엇을 (WHAT)을 ν•  건지 μ„€λͺ…ν•˜λŠ” 방식
  • ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°
    • 순수 ν•¨μˆ˜λ₯Ό μ‘°ν•©ν•˜κ³  μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ§Œλ“œλŠ” 방식 (ν΄λ‘œμ €, ν•˜μŠ€μΌˆ, λ¦¬μŠ€ν”„)

🦁 이해λ₯Ό λ•κΈ°μœ„ν•œ μ„ μ–Έν˜•κ³Ό λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ 차이점!

<λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°> How 에 집쀑
- μžλ¦¬μ—μ„œ μΌμ–΄λ‚œλ‹€
- λΆ€μ—ŒμœΌλ‘œ μ΄λ™ν•œλ‹€
- μ»΅κ³Ό 물을 μ°ΎλŠ”λ‹€
- 컡에 물을 λΆ€μ–΄ λ§ˆμ‹ λ‹€

<μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°> What에 집쀑
- 물을 μ°Ύμ•„ λ§ˆμ…”λ³΄μž!

🟠 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°

  • λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ κ°œλ°œν•˜λ˜ κ°œλ°œμžλ“€μ€ μ†Œν”„νŠΈμ›¨μ–΄μ˜ 크기가 점점 컀짐에 따라 λ³΅μž‘ν•˜κ²Œ μ—‰μΌœμžˆλŠ” μ½”λ“œλ₯Ό μœ μ§€λ³΄μˆ˜ν•˜κΈ° νž˜λ“€λ‹€λŠ” 것을 λŠλ‚Œ
  • μ΄λŸ¬ν•œ 단점을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ μ‚¬μš©ν•˜κ²Œλ¨.
  • ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 거의 λͺ¨λ“  것을 μˆœμˆ˜ν•¨μˆ˜λ‘œ λ‚˜λˆ„μ–΄ 문제λ₯Ό ν•΄κ²°ν•˜λ―€λ‘œ, μž‘μ€ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜μ—¬ κ°€λ…성을 높이고 μœ μ§€λ³΄μˆ˜λ₯Ό μš©μ΄ν•˜κ²Œ ν•΄μ€Œ
  • κ°’μ΄λ‚˜ μƒνƒœ λ³€ν™” λ³΄λ‹€λŠ” ν•¨μˆ˜ 자체의 μ‘μš©μ„ μ€‘μš”ν•˜κ²Œ μ—¬κΈ΄λ‹€
  • ν”„λ‘œκ·Έλž¨ λ™μž‘ κ³Όμ •μ—μ„œ μƒνƒœκ°€ λ³€ν•˜μ§€ μ•ŠμœΌλ©΄ ν™€μˆ˜ 호좜이 각각 μƒν˜Έ κ°„μ„­ 없이 μ‹€ν–‰λ˜λ―€λ‘œ λ³‘λ ¬μ²˜λ¦¬λ₯Ό ν•  λ•Œ λΆ€μž‘μš©μ΄ 거의 μ—†λ‹€λŠ” μž₯점이 있음.

 

πŸ”Έ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•œ 이해

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ μž‘μ€ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ ν•¨μˆ˜λ₯Ό μž‘μ„±ν•œλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” nκΉŒμ§€ λ°˜λ³΅λ¬Έμ„ λŒλ©΄μ„œ 숫자λ₯Ό 좜λ ₯ν•˜κ³  μ‹Άμ„λ•Œ, μ•„λž˜μ™€ 같이 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€. (μ•„λž˜ process μ½”λ“œλŠ” 이해λ₯Ό λ•κΈ°μœ„ν•œ μˆ˜λ„μ½”λ“œμ΄λ‹€.)

process(10, print(num))

첫번째 μΈμžλŠ” λͺ‡ 번 iteration을 돌 것인지 λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•˜κ³ , λ‘λ²ˆμ§Έ 인자둜 전달받은 값을 좜λ ₯ν•˜λΌλŠ” ν•¨μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›κ³  μžˆλ‹€. 즉, 좜λ ₯ν•˜λŠ” ν•¨μˆ˜λ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ„˜κ²Όλ‹€λŠ” 뜻인데, μ΄λ ‡κ²Œ λ„˜κΈΈ 수 μžˆλŠ” μ΄μœ λŠ” 'ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ 기본원리, ν•¨μˆ˜λŠ” 1κΈ‰κ°μ²΄λ‘œ μ·¨κΈ‰ν•œλ‹€'λΌλŠ” νŠΉμ§• λ•Œλ¬Έμ΄λ‹€. (이 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•œ μ„€λͺ…은 λ’€μ—μ„œ μΆ”κ°€λ‘œ 더 μžˆμ–΄μ—Ό)

🦁 λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°κ³Ό λ‹€λ₯Έμ 

λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ 상황에 따라 λ‚΄λΆ€μ˜ 값이 λ°”λ€” 수 μžˆλ‹€. μš°λ¦¬κ°€ κ°œλ°œν•œ ν•¨μˆ˜ λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜μ˜ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœ 값이 λ°”λ€ŒλŠ” λ“±μ˜ λ³€ν™”κ°€ 일어날 수 있기 λ•Œλ¬Έμ΄λ‹€.

ν•˜μ§€λ§Œ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ λ©”λͺ¨λ¦¬μ— ν•œ 번 ν• λ‹Ήλœ 값은 μƒˆλ‘œμš΄ κ°’μœΌλ‘œ λ³€ν•  수 μ—†λ‹€. 즉, μ½”λ“œ 이해와 μ‹€ν–‰κ²°κ³Όμ˜ κ΄€μ μ—μ„œ μˆœμˆ˜ν•˜κ²Œ ν•¨μˆ˜μ— μ „λ‹¬λœ 인자 κ°’λ§Œ 결과에 영ν–₯을 μ£Όλ―€λ‘œ, λ‹€λ₯Έ μƒνƒœκ°’μ„ 갖지 μ•Šκ³  μˆœμˆ˜ν•˜κ²Œ ν•¨μˆ˜λ§ŒμœΌλ‘œ λ™μž‘ν•˜μ—¬ μ–Έμ œλ‚˜ μΌμ •ν•œ 결과값을 λ„μΆœν•œλ‹€.

 

 

πŸ”Έ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§•

✨ λΆ€μˆ˜νš¨κ³Ό (side Effect)κ°€ μ—†λŠ” 순수 ν•¨μˆ˜λ₯Ό 1κΈ‰ 객체 (first-class object)둜 κ°„μ£Όν•˜μ—¬ νŒŒλΌλ―Έν„°λ‚˜ λ°˜ν™˜κ°’μœΌλ‘œ μ‚¬μš©ν•  수 있으며, μ°Έμ‘° 투λͺ…성을 지킬 수 μžˆλ‹€.

🦁 λΆ€μˆ˜νš¨κ³Ό (Side Effect) λž€

λΆ€μˆ˜νš¨κ³Όλž€, λ‹€μŒκ³Ό 같은 λ³€ν™” λ˜λŠ” λ³€ν™”κ°€ λ°œμƒν•˜λŠ” μž‘μ—…μ„ μ˜λ―Έν•œλ‹€.

  • λ³€μˆ˜μ˜ 값이 변경됨
  • 자료ꡬ쑰λ₯Ό μ œμžλ¦¬μ—μ„œ μˆ˜μ •ν•¨
  • μ½˜μ†” λ˜λŠ” I/Oκ°€ λ°œμƒν•¨

μ§€κΈˆμ€ λΆ€μˆ˜νš¨κ³Όκ°€ 이해가 μ•ˆκ°ˆ 수 μžˆλ‹€. μˆœμˆ˜ν•¨μˆ˜λž‘ λΆ€μˆ˜νš¨κ³Όλ₯Ό ν•¨κ»˜ μ΄ν•΄ν•΄λ³΄μž.

🦁 μˆœμˆ˜ν•¨μˆ˜ (Pure Function) λž€

μœ„μ˜ λΆ€μˆ˜νš¨κ³Όλ“€μ„ μ œκ±°ν•œ ν•¨μˆ˜λ“€μ„ μˆœμˆ˜ν•¨μˆ˜λΌκ³  ν•œλ‹€. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ΄μš©ν•˜λŠ” ν•¨μˆ˜λŠ” μ΄λŸ¬ν•œ μˆœμˆ˜ν•¨μˆ˜μ΄λ‹€! 즉, λΆ€μˆ˜νš¨κ³Όκ°€ μ—†λŠ” 것이 μˆœμˆ˜ν•¨μˆ˜μ΄λ―€λ‘œ, λ“€μ–΄μ˜¨ μΈμžκ°€ κ°™μœΌλ©΄ κ²°κ³Όκ°€ 항상 같은 ν•¨μˆ˜

πŸ’¬ μ˜ˆμ‹œλ₯Ό 톡해 μ•Œμ•„λ³΄μž.

var testName = "hello world"

func getName -> String {
    return testName
}
μœ„ ν•¨μˆ˜λŠ” μˆœμˆ˜ν•¨μˆ˜μΌκΉŒ? ❌
- getNameν•¨μˆ˜λŠ” 외뢀에 μžˆλŠ” name에 영ν–₯을 λ°›λŠ”λ‹€.
- name이 var둜 μ„ μ–Έλ˜μ–΄ μžˆμ–΄μ„œ side-effectκ°€ μ‘΄μž¬ν•  κ°€λŠ₯성이 λ†’κΈ° λ•Œλ¬Έμ— μˆœμˆ˜ν•¨μˆ˜κ°€ μ•„λ‹ˆλ‹€.

그럼 μœ„ ν•¨μˆ˜λ₯Ό μˆœμˆ˜ν•¨μˆ˜λ‘œ λ°”κΏ”λ³΄μž.

func getName(_ name: String) -> String {
    return name
}
μ΄λ ‡κ²Œ λ°”κΎΈλ©΄ μˆœμˆ˜ν•¨μˆ˜μ΄λ‹€. βœ…
- ν•¨μˆ˜ μžμ²΄μ— νŒŒλΌλ―Έν„°λ‘œ 받은 name의 λ°μ΄ν„°λ‘œλ§Œ κ²°μ •λ˜κΈ° λ•Œλ¬Έμ— 
μ™ΈλΆ€μ˜ 영ν–₯을 μ „ν˜€ 받지 μ•Šκ³  νŒŒλΌλ―Έν„°μ˜ μž…λ ₯에 λŒ€ν•΄μ„œλŠ” λ™μΌν•œ κ²°κ³Όλ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

ν•˜μ§€λ§Œ!!! μœ„μ—μ„œ var λ‘œ μ„ μ–Έλ˜μ–΄ side effectκ°€ λ°œμƒν•  κ°€λŠ₯성이 μ‘΄μž¬ν•œλ‹€κ³  ν–ˆμž–μŒ?

let testName = "hello world"

func getName -> String {
    return testName
}
μ΄λ ‡κ²Œ 바꿔도 μˆœμˆ˜ν•¨μˆ˜μ΄λ‹€!! βœ…

πŸ’¬ μˆœμˆ˜ν•¨μˆ˜μ˜ μž₯점을 μ•Œμ•„λ³΄μž

  • ν•¨μˆ˜ μžμ²΄κ°€ 독립적이며 side-effectκ°€ μ—†κΈ° λ•Œλ¬Έμ— Thread에 μ•ˆμ „μ„±μ„ 보μž₯받을 수 μžˆλ‹€. (μˆœμˆ˜ν•¨μˆ˜λŠ” λ©”λͺ¨λ¦¬, I/O의 κ΄€μ μ—μ„œ side effectκ°€ μ—†κΈ° λ•Œλ¬Έμ— μ•ˆμ „μ„±μ„ 보μž₯λ°›λŠ” 것이닀.)
  • Thread에 μ•ˆμ „μ„±μ„ 보μž₯λ°›μ•„ λ³‘λ ¬μ²˜λ¦¬λ₯Ό 동기화없이 진행할 수 μžˆλ‹€.

🦁 1급객체 (first class object)λž€

1κΈ‰ κ°μ²΄λŠ” λ‹€μŒκ³Ό 같은 쑰건을 λ§Œμ‘±ν•˜λŠ” 것듀이 1급객체가 될 수 μžˆλ‹€.

- λ³€μˆ˜λ‚˜ 데이터 ꡬ쑰 μ•ˆμ— 담을 수 μžˆλ‹€.
- νŒŒλΌλ―Έν„°λ‘œ 전달 ν•  수 μžˆλ‹€.
- λ°˜ν™˜κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.
- 할당에 μ‚¬μš©λœ 이름과 λ¬΄κ΄€ν•˜κ²Œ κ³ μœ ν•œ ꡬ별이 κ°€λŠ₯ν•˜λ‹€.

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν•¨μˆ˜λŠ” 1κΈ‰κ°μ²΄λ‘œ μ·¨κΈ‰λ°›κΈ° λ•Œλ¬Έμ— μœ„ μ˜ˆμ œμ—μ„œ λ³Έ process(10, print(num)) μ²˜λŸΌ ν•¨μˆ˜λ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ„˜κΈ°λŠ” λ“±μ˜ μž‘μ—…μ΄ κ°€λŠ₯ν•œ 것이닀.

🦁 μ°Έμ‘° 투λͺ…μ„± (Referential Transparency)

- λ™μΌν•œ μΈμžμ— λŒ€ν•΄ 항상 λ™μΌν•œ κ²°κ³Όλ₯Ό λ°›μ•„μ•Ό ν•œλ‹€.
- μ°Έμ‘° 투λͺ…성을 톡해 기쑴의 값은 λ³€κ²½λ˜μ§€ μ•Šκ³  μœ μ§€λœλ‹€.

λͺ…령평 ν”„λ‘œκ·Έλž˜λ°κ³Ό ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜λŠ” side effect의 유무 μ— 따라 차이가 μžˆλ‹€. 이에 λ”°λΌμ„œ ν•¨μˆ˜κ°€ 참쑰에 투λͺ…ν•œμ§€ μ•ˆν•œμ§€ λ‚˜λˆ μ§€λŠ”λ°, 참쑰에 투λͺ…ν•˜λ‹€λŠ” 것은 말 κ·ΈλŒ€λ‘œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜μ—¬λ„ μ–΄λ– ν•œ μƒνƒœ λ³€ν™” 없이 항상 λ™μΌν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜μ—¬ ν•­λ‹Ή λ™μΌν•˜κ²Œ(투λͺ…ν•˜κ²Œ) μ‹€ν–‰ κ²°κ³Όλ₯Ό μ°Έμ‘°(예츑)ν•  수 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

 

πŸ”Έ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ μž₯점을 μ•Œμ•„λ³΄μž!

  • μ—¬λŸ¬κ°€μ§€ μ—°μ‚° 처리 μž‘μ—…μ΄ λ™μ‹œμ— μΌμ–΄λ‚˜λŠ” ν”„λ‘œκ·Έλž¨μ„ 짜기 쉽닀.
  • λ©€ν‹°μ½”μ–΄ ν˜Ήμ€ μ—¬λŸ¬ μ—°μ‚° ν”„λ‘œμ„Έμ„œλ₯Ό μ‚¬μš©ν•˜λŠ” μ‹œμŠ€ν…œμ—μ„œ 효율적인 ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€κΈ° 쉽닀.
  • μƒνƒœλ³€ν™”μ— λ”°λ₯Έ λΆ€μž‘μš©μ—μ„œ μžμœ λ‘œμ›Œμ§€λ―€λ‘œ μˆœμˆ˜ν•˜κ²Œ κΈ°λŠ₯ κ΅¬ν˜„μ— μ΄ˆμ μ„ 맞좰 섀계가 κ°€λŠ₯ν•˜λ‹€.

 


 

🟠 λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°κ³Ό ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° μ½”λ“œλ‘œ 비ꡐ해보기

doSomething ν•¨μˆ˜μ™€ doAnotherThing ν•¨μˆ˜λ₯Ό λ™μ‹œμ— μ‹€ν–‰ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν–ˆλ‹€κ³  치자.

// βœ… λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°
class CommandProgramming {
    func doSomething() {
        print("doSomething")
    }
    
    func doAnotherThing() {
        print("doAnotherThing")
    }
    
    func executeAll() {
        doSomething()
        doAnotherThing()
    }
}

// 호좜
excuteAll()
// βœ… ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°
class CommandProgramming {
    func doSomething() {
        print("doSomething")
    }
    
    func doAnotherThing() {
        print("doAnotherThing")
    }
    
    func executeAll(tasks: [() -> Void)) {
        for task in tasks {
            task()
        }
    }
}

// 호좜
excute(tasks: [doAnotherThing, doSomething])

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° μ•ˆμ—μ„œλŠ” ν•¨μˆ˜κ°€ 일급객체 μ΄λ―€λ‘œ, ν•¨μˆ˜λ₯Ό μ „λ‹¬μΈμž λ˜λŠ” λ°˜ν™˜κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€. 차이점을 ν‘œλ‘œ 보면 λ‹€μŒκ³Ό κ°™λ‹€.

 


 

πŸ“– REFERENCE

https://borabong.tistory.com/5

 

[Swift] ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄λž€?

μ•ˆλ…•ν•˜μ„Έμš”πŸ’œ λ³΄λΌλ΄‰μž…λ‹ˆλ‹€ :) μ˜€λŠ˜μ€ μŠ€μœ„ν”„νŠΈ μ–Έμ–΄μ˜ νŠΉμ§• 쀑 ν•˜λ‚˜μΈ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€ γ…Žγ…Ž!! μŠ€μœ„ν”„νŠΈλŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ„ 지ν–₯ν•©λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄, λŒ€

borabong.tistory.com

https://mangkyu.tistory.com/111

 

[ν”„λ‘œκ·Έλž˜λ°] ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(Functional Programming) μ΄λž€?

1. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(Functional Programming)에 λŒ€ν•œ 이해 [ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„(Programming Paradigm) ] ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„(Programming Paradigm)은 ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ ν”„λ‘œκ·Έλž˜λ°μ˜ 관점을 κ°–κ²Œ ν•˜κ³  μ½”λ“œλ₯Ό..

mangkyu.tistory.com

https://jinnify.tistory.com/54

 

[Swift] 1. μˆœμˆ˜ν•¨μˆ˜, Pure Function (Functional Programming in Swift)

순수 ν•¨μˆ˜(Pure Function)에 κ΄€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° Funtional Programming은 ν•¨μˆ˜λ₯Ό μ€‘μ‹¬μœΌλ‘œ Side-Effectκ°€ 없도둝 ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ λ§ν•˜λŠ” ν•¨μˆ˜λŠ” μˆœμˆ˜

jinnify.tistory.com

 

λ°˜μ‘ν˜•