λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[ν”„λ‘œκ·Έλž˜λ°] ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„

좜처

https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84

 

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„ - μœ„ν‚€λ°±κ³Ό, 우리 λͺ¨λ‘μ˜ 백과사전

μœ„ν‚€λ°±κ³Ό, 우리 λͺ¨λ‘μ˜ 백과사전. ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„(programming paradigm)은 ν”„λ‘œκ·Έλž˜λ°μ˜ νŒ¨λŸ¬λ‹€μž„ ν˜•νƒœμ΄λ‹€. μ†Œν”„νŠΈμ›¨μ–΄ 곡학을 ν•  λ•Œμ˜ νŒ¨λŸ¬λ‹€μž„ ν˜•νƒœμΈ 방법둠과 λΉ„κ΅λœλ‹€. ν”„λ‘œκ·Έλž˜λ° 패러

ko.wikipedia.org

https://ko.wikipedia.org/wiki/%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84

 

νŒ¨λŸ¬λ‹€μž„ - μœ„ν‚€λ°±κ³Ό, 우리 λͺ¨λ‘μ˜ 백과사전

μœ„ν‚€λ°±κ³Ό, 우리 λͺ¨λ‘μ˜ 백과사전. ν”„ν†¨λ ˆλ§ˆμ΄μ˜€μŠ€μ˜ 우주 μ½”νŽ˜λ₯΄λ‹ˆμΏ μŠ€μ˜ 우주 νŒ¨λŸ¬λ‹€μž„(μ˜μ–΄: paradigm)은 μ–΄λ–€ ν•œ μ‹œλŒ€ μ‚¬λžŒλ“€μ˜ κ²¬ν•΄λ‚˜ 사고λ₯Ό 근본적으둜 κ·œμ •ν•˜κ³  μžˆλŠ” ν…Œλ‘λ¦¬λ‘œμ„œμ˜ μΈμ‹μ˜

ko.wikipedia.org

ChatGPT

https://adjh54.tistory.com/97

 

[Java] ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„ μ΄ν•΄ν•˜κΈ°

ν•΄λ‹Ή κΈ€μ—μ„œλŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ— λŒ€ν•΄μ„œ μ΄ν•΄ν•˜κ³  각각의 μš©μ–΄μ— λŒ€ν•΄μ„œ 이해λ₯Ό 돕기 μœ„ν•΄μ„œ μž‘μ„±ν•œ κΈ€μž…λ‹ˆλ‹€. 1) ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„ πŸ’‘ ν”„λ‘œκ·Έλž˜λ°(Programming) μ΄λž€? - ν•˜λ‚˜ μ΄μƒμ˜ κ΄€λ ¨

adjh54.tistory.com

https://velog.io/@ehgus8621/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84

 

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„ μ•Œμ•„μ•Ό ν•˜λŠ” 이유

Kotlin에 λ§€κ°œλ³€μˆ˜λ‘œ λžŒλ‹€κ°€ μ‚¬μš©λ˜λŠ” 것이 κΆκΈˆν–ˆκ³ , λžŒλ‹€λž€ 이름이 μ—†λŠ” ν•¨μˆ˜λ‘œμ„œ, λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬λ˜κ³ , κ²°κ³Ό κ°’μœΌλ‘œ λ°˜ν™˜λ  수 μžˆλ‹€. 이 것은 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ€‘μš”ν•œ 역할을 ν•œλ‹€κ³  ν•˜

velog.io

 


νŒ¨λŸ¬λ‹€μž„μ΄λž€

μ–΄λ–€ ν•œ μ‹œλŒ€μ˜ μ‚¬λžŒλ“€μ˜ κ²¬ν•΄λ‚˜ 사고λ₯Ό 근본적으둜 κ·œμ •ν•˜κ³  μžˆλŠ” μΈμ‹μ˜ 체계. λ˜λŠ”, 사물에 λŒ€ν•œ 이둠적인 ν‹€μ΄λ‚˜ 체계.

μ–΄λ–€ νŠΉμ •ν•œ λΆ„μ•Όλ‚˜ ν•™λ¬Έμ—μ„œ 널리 받아듀여지고 μžˆλŠ” 사고 λ°©μ‹μ΄λ‚˜ 문제λ₯Ό λ³΄λŠ” 관점. 

νŠΉμ •ν•œ μ‹œκΈ°λ‚˜ λ§₯λ½μ—μ„œ μ‚¬λžŒλ“€μ΄ 문제λ₯Ό 바라보고 ν•΄κ²°ν•˜λŠ” ν‹€. μ‹œκ°„μ— 따라 바뀐닀. 

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ΄λž€

ν”„λ‘œκ·Έλž˜λ°μ˜ νŒ¨λŸ¬λ‹€μž„ ν˜•νƒœ. ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ ν”„λ‘œκ·Έλž˜λ°μ˜ 관점을 κ°–κ²Œ ν•΄μ£Όκ³ , κ²°μ •ν•˜λŠ” 역할을 ν•œλ‹€. ν”„λ‘œκ·Έλž¨μ„ μ„€κ³„ν•˜κ³  κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” 기본적인 μ ‘κ·Ό λ°©μ‹μ΄λ‚˜ 철학을 μ˜λ―Έν•œλ‹€. κ°œλ°œμžκ°€ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•Œ, 문제λ₯Ό μ–΄λ–»κ²Œ λΆ„μ„ν•˜κ³  해결할지λ₯Ό κ²°μ •ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬ λ˜λŠ” 사고방식이라고 ν•  수 μžˆλ‹€.

 

각 ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ€ νŠΉμ •ν•œ μ½”λ”© μŠ€νƒ€μΌκ³Ό 원칙을 λ”°λ₯Έγ„·λ‚˜. ν”„λŸ¬λ‹€μž„μ— 따라 μ½”λ“œμ˜ ꡬ성 방식, 데이터 처리 방법, μƒνƒœ 관리 방식 등이 달라진닀.

 

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ˜ 핡심 κ°œλ…

문제 ν•΄κ²° 방법

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ€ 문제λ₯Ό μ–΄λ–»κ²Œ μ ‘κ·Όν•˜κ³  해결할지λ₯Ό μ •μ˜ν•œλ‹€. 

μ–΄λ–€ νŒ¨λŸ¬λ‹€μŒμ€ 문제λ₯Ό λ‹¨κ³„λ³„λ‘œ ν•΄κ²°ν•˜κ³ , μ–΄λ–€ νŒ¨λŸ¬λ‹€μž„μ€ λ°μ΄ν„°μ˜ 흐름을 μ€‘μ‹¬μœΌλ‘œ 문제λ₯Ό ν•΄κ²°ν•œλ‹€.

μ½”λ“œ ꡬ쑰화 방식

νŒ¨λŸ¬λ‹€μž„μ€ μ½”λ“œκ°€ μ–΄λ–»κ²Œ κ΅¬μ‘°ν™”λ˜μ–΄μ•Ό ν•˜λŠ”μ§€λ₯Ό μ •μ˜ν•œλ‹€.

예λ₯Ό λ“€μ–΄, ν•¨μˆ˜, 객체, λͺ…λ Ήμ–΄ 등을 μ–΄λ―κ²Œ μ‚¬μš©ν•˜λŠ”μ§€ μ •μ˜ν•œλ‹€.

μƒνƒœ 관리와 데이터 처리 방식

νŒ¨λŸ¬λ‹€μž„μ€ ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ 데이터가 μ–΄λ–»κ²Œ λ³€ν•˜κ³ , μƒνƒœκ°€ μ–΄λ–»κ²Œ κ΄€λ¦¬λ˜λŠ”μ§€λ₯Ό κ²°μ •ν•œλ‹€. 

예λ₯Ό λ“€μ–΄, 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” 객체가 μƒνƒœλ₯Ό 가지고, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” μƒνƒœ λ³€ν™”λ₯Ό μ΅œμ†Œν™”ν•˜λ €κ³  ν•œλ‹€.

 

μ£Όμš” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„

1. λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ° Imperative Programming

μ •μ˜

ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–»κ²Œ λ™μž‘ν•΄μ•Ό ν•˜λŠ”μ§€λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μž‘μ„±ν•˜λŠ” 방식. 단계별 λͺ…λ Ήμ–΄λ₯Ό 톡해 μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚€λ©° 문제λ₯Ό ν•΄κ²°ν•œλ‹€. 컴퓨터가 μˆ˜ν–‰ν•  λͺ…령듀을 μˆœμ„œλŒ€λ‘œ μ λŠ” ν”„λ‘œκ·Έλž˜λ° μˆ˜ν–‰ 기법.

μ˜ˆμ‹œ

C, Java, Python(λͺ…λ Ήν˜• μŠ€νƒ€μΌ)

νŠΉμ§•

μƒνƒœ 변화와 λͺ…λ Ήμ–΄κ°€ μ€‘μš”ν•˜λ©°, ν”„λ‘œκ·Έλž¨μ˜ 흐름을 μ œμ–΄ν•˜λŠ” 것이 핡심

2. μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ° Procedural Programming

μ •μ˜

λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ ν•˜μœ„ κ°œλ…. ν”„λ‘œκ·Έλž¨μ„ 일렀의 절차(λ˜λŠ” ν•¨μˆ˜)둜 λ‚˜λˆ„μ–΄ μ²˜λ¦¬ν•˜λŠ” 방식. μœ„μ—μ„œ μ•„λž˜λ‘œ 순차적으둜 μ§„ν–‰λ˜μ–΄ ν”„λ‘œκ·Έλž¨μ΄ 유기적으둜 μ—°κ²°λ˜λ„λ‘ κ΅¬μ„±ν•˜λŠ” 개발 방식

μ˜ˆμ‹œ

C, Pascal

νŠΉμ§•

절차(ν•¨μˆ˜)λ₯Ό μ€‘μ‹¬μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ‘°ν™”ν•˜λ©°, μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ΄ λ†’μŒ

πŸ€”ν”„λ‘œκ·Έλž¨μ˜ κ΅¬μ‘°ν™”λž€ 무엇인가?

μ½”λ“œλ₯Ό 논리적 λ‹¨μœ„(예: ν•¨μˆ˜, λͺ¨λ“ˆ)둜 λ‚˜λˆ„μ–΄ μž¬μ‚¬μš©μ„±κ³Ό 가독성을 λ†’μ΄λŠ” 것

3. 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° Objected-Oriented Programming, OOP

μ •μ˜

ν”„λ‘œκ·Έλž˜μ„ κ°μ²΄λΌλŠ” λ…λ¦½λœ λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방식. κ°μ²΄λŠ” 데이터(속성)κ³Ό 행동(λ©”μ„œλ“œ)λ₯Ό ν¬ν•¨ν•˜λ©°, 객체듀 κ°„μ˜ μƒν˜Έμž‘μš©μ„ 톡해 ν”„λ‘œκ·Έλž¨μ΄ λ™μž‘ν•œλ‹€. λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ ν™•μž₯된 κ°œλ…μ΄λ‹€.

μ˜ˆμ‹œ

Java, C++, Kotlin, Python(OOP μŠ€νƒ€μΌ)

νŠΉμ§•

μΊ‘μŠν™”, 상속, λ‹€ν˜•μ„± 같은 κ°œλ…μ„ μ€‘μ‹¬μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λ©°, λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ„ μ‰½κ²Œ κ΄€λ¦¬ν•˜κ³  ν™•μž₯ν•  수 μžˆλ‹€.

4. μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ° Declarative Programming

μ •μ˜

무엇을 ν•  것인지λ₯Ό μ„€λͺ…ν•˜λŠ” λ°©μ‹μœΌλ‘œ, μ–΄λ–»κ²Œ ν•  것인지에 λŒ€ν•œ ꡬ체적인 절차λ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠλŠ”λ‹€.

μ˜ˆμ‹œ

SQL, HTML, CSS

νŠΉμ§•

λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°μ²˜λŸΌ λ‹¨κ³„λ³„λ‘œ μ„€λͺ…ν•˜μ§€ μ•Šκ³ , λͺ©ν‘œλ‚˜ μ›ν•˜λŠ” 결과만 ν‘œν˜„ν•¨. 특히 데이터 μ²˜λ¦¬λ‚˜ ꡬ성 μ„€μ • 등에 많이 μ‚¬μš©λœλ‹€.

5. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° Functional Programming

μ •μ˜

ν”„λ‘œκ·Έλž¨μ„ μˆ˜ν•™μ  ν•¨μˆ˜μ˜ μ‘°ν•©μœΌλ‘œ ν‘œν˜„ν•˜λ©°, μˆœμˆ˜ ν•¨μˆ˜μ™€ μƒνƒœ λ³€ν™” μ—†λŠ” ν”„λ‘œκ·Έλž¨μ„ κ°•μ‘°ν•˜λŠ” νŒ¨λŸ¬λ‹€μž„. μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ ν•˜μœ„ κ°œλ….

πŸ€” 순수 ν•¨μˆ˜λž€?

μž…λ ₯κ°’λ§Œμ„ μ‚¬μš©ν•˜μ—¬ 항상 같은 좜λ ₯값을 λ°˜ν™˜ν•˜κ³ , λΆ€μž‘μš©μ΄ μ—†λŠ” ν•¨μˆ˜.

πŸ€” λΆ€μž‘μš©μ΄λž€?

ν•¨μˆ˜κ°€ μ™ΈλΆ€ μƒνƒœλ₯Ό λ³€κ²½ν•˜κ±°λ‚˜, ν•¨μˆ˜ 외뢀에 영ν–₯을 λ―ΈμΉ˜λŠ” 행동

μ˜ˆμ‹œ

Haskell, Scala, Kotlin(ν•¨μˆ˜ν˜• μŠ€νƒ€μΌ), JavaScript(ν•¨μˆ˜ν˜• μŠ€νƒ€μΌ)

νŠΉμ§•

μƒνƒœ λ³€ν™”λ₯Ό μ΅œμ†Œν™”ν•˜κ³ , λΆ€μž‘μš© 없이 문제λ₯Ό ν•΄κ²°. λΆˆλ³€μ„±κ³Ό κ³ μ°¨ ν•¨μˆ˜λ₯Ό ν™œμš©ν•΄ μ½”λ“œμ˜ 예츑 κ°€λŠ₯μ„±κ³Ό μ•ˆμ „μ„±μ„ λ†’μž„

πŸ€” κ³ μ°¨ ν•¨μˆ˜λž€?

λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό 인수둜 λ°›κ±°λ‚˜ ν•¨μˆ˜ 자체λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

6. λ…Όλ¦¬ν˜• ν”„λ‘œκ·Έλž˜λ° Logic Programming

μ •μ˜

논리적인 μ§„μˆ μ„ 기반으둜 문제λ₯Ό ν•΄κ²°ν•˜λ©°, ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–»κ²Œ μˆ˜ν–‰λ μ§€λ₯Ό 논리적인 κ·œμΉ™μ„ 톡해 μ •μ˜ν•œλ‹€. μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ ν•œ κ°ˆλž˜μ΄λ‹€.

μ˜ˆμ‹œ

Prolog

νŠΉμ§•

사싀과 κ·œμΉ™μ„ 기반으둜 문제λ₯Ό ν•΄κ²°ν•˜λ©°, μ»΄ν“¨ν„°λŠ” 주어진 κ·œμΉ™μ„ μ΄μš©ν•΄ κ²°κ³Όλ₯Ό μΆ”λ‘ ν•œλ‹€. 해결을 μ°ΎκΈ° μœ„ν•œ 단계(절차)보닀 ν•΄κ²°μ˜ 속성듀(무엇이 참이고 무엇이 거짓인지)에 μ£Όλͺ©ν•œλ‹€.

 

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ΄ μ€‘μš”ν•œ 이유

1. λ‹€μ–‘ν•œ 문제 ν•΄κ²° 방식 제곡

νŒ¨λŸ¬λ‹€μž„μ€ 문제λ₯Ό μ—¬λŸ¬ 가지 λ°©μ‹μœΌλ‘œ ν•΄κ²°ν•  수 μžˆλŠ” 틀을 μ œκ³΅ν•œλ‹€. νŠΉμ • λ¬Έμ œμ— λ§žλŠ” νŒ¨λŸ¬λ‹€μž„μ„ μ„ νƒν•˜λ©΄ 더 효율적이고, κ°„κ²°ν•˜κ²Œ ν•΄κ²°ν•  수 μžˆλ‹€.

2. λ³΅μž‘μ„± 관리

νŒ¨λŸ¬λ‹€μž„μ€ μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ 쀄이고, μ‹œμŠ€ν…œμ„ 효율적으둜 μ„€κ³„ν•˜κ³  μœ μ§€λ³΄μˆ˜ν•  수 μžˆλ„λ‘ λ•λŠ”λ‹€. 예λ₯Ό λ“€μ–΄, 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ λ³΅μž‘ν•œ μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ„ 독립적인 객체둜 λ‚˜λˆ„μ–΄ μ‰½κ²Œ κ΄€λ¦¬ν•˜λ„λ‘ ν•œλ‹€.

3. μ½”λ“œ 가독성 및 μœ μ§€λ³΄μˆ˜μ„±  : μ½”λ“œμ˜ ν’ˆμ§ˆ ν–₯

νŠΉμ • νŒ¨λŸ¬λ‹€μž„μ€ μ½”λ“œμ˜ 일관성과 가독성을 λ†’μ—¬ ν˜‘μ—…μ΄λ‚˜ μœ μ§€λ³΄μˆ˜ μ‹œμ— 도움이 λœλ‹€. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 순수 ν•¨μˆ˜μ™€ λΆˆλ³€μ„±μ„ 톡해 버그λ₯Ό 쀄이고, 예츑 κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ²Œ ν•΄μ€€λ‹€.

4. μƒˆλ‘œμš΄ νŒ¨λŸ¬λ‹€μž„μ˜ λ°œμ „

μ†Œν”„νŠΈμ›¨μ–΄μ˜ μš”κ΅¬ 사항이 변화함에 따라 μƒˆλ‘œμš΄ νŒ¨λŸ¬λ‹€μž„μ΄ λ“±μž₯ν•˜κ³ , κΈ°μ‘΄ νŒ¨λŸ¬λ‹€μž„μ΄ ν˜Όν•©λ˜μ–΄ λ°œμ „ν•œλ‹€. ν˜„λŒ€ μ–Έμ–΄λŠ” μ—¬λŸ¬ νŒ¨λŸ¬λ‹€μž„μ„ μ§€μ›ν•˜λŠ” λ©€ν‹° νŒ¨λŸ¬λ‹€μž„ μ–Έμ–΄κ°€ λ§Žμ•„μ‘Œλ‹€. 

 

πŸ€” λ©€ν‹° νŒ¨λŸ¬λ‹€μž„ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄

λ©€ν‹° νŒ¨λŸ¬λ‹€μž„ ν”„λ‘œκ·Έλž˜λ° 언어듀은 ν•˜λ‚˜μ˜ νŒ¨λŸ¬λ‹€μž„μ— κ΅­ν•œλ˜μ§€ μ•Šκ³ , μ—¬λŸ¬ νŒ¨λŸ¬λ‹€μž„μ„ ν˜Όν•©ν•΄μ„œ μ§€μ›ν•œλ‹€. μ΄λŸ¬ν•œ 언어듀은 κ°œλ°œμžκ°€ νŠΉμ • λ¬Έμ œμ— λ§žλŠ” νŒ¨λŸ¬λ‹€μž„μ„ μœ μ—°ν•˜κ²Œ 선택할 수 있게 ν•œλ‹€.

 

μ˜ˆμ‹œ

Python, JavaScript, Kotlin 등은 λͺ…λ Ήν˜•, 객체지ν–₯, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ λͺ¨λ‘ μ§€μ›ν•œλ‹€.