๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป CS/Programming

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

by kekeyo 2025. 5. 21.
728x90

๐Ÿ€ ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ˆœ์ฐจ์ ์ธ ์‹คํ–‰ ํ๋ฆ„ ๊ฐ•์กฐ

: ๊ฐ€์žฅ ์ „ํ†ต์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„

ํ”„๋กœ๊ทธ๋žจ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด ์ง‘ํ•ฉ๊ณผ ํ•จ์ˆ˜(๋˜๋Š” ์„œ๋ธŒ๋ฃจํ‹ด)๋“ค์˜ ์กฐํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ

โžก๏ธ ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ธฐ์ˆ , ๋ฌธ์ œ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์ดˆ์ ์„ ๋งž์ถค

  • Procedure(ํ”„๋กœ์‹œ์ €)๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž‘์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ
    • routine, subroutine, method, function ...

์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฃผ์š” ํŠน์ง•

  • ์ˆœ์ฐจ์  ์‹คํ–‰
  • : ํ”„๋กœ๊ทธ๋žจ์€ ์œ„ -> ์•„๋ž˜๋กœ, ๋˜๋Š” ์ง€์ •๋œ ํ๋ฆ„์— ๋”ฐ๋ผ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋จ. ๊ฐ ๋‹จ๊ณ„๊ฐ€ ๋ช…ํ™•ํ•œ ์ˆœ์„œ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์กฐ๊ฑด๋ฌธ or ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋ถ„๊ธฐ์™€ ๋ฐ˜๋ณต์„ ์ œ์–ดํ•จ
  • ํ•จ์ˆ˜์™€ ์„œ๋ธŒ๋ฃจํ‹ด
  • : ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ๊ณผ ๋ชจ๋“ˆํ™”๋ฅผ ์œ„ํ•ด ๊ธฐ๋Šฅ๋ณ„๋กœ ํ•จ์ˆ˜ ์ •์˜. ๊ฐ ํ•จ์ˆ˜๋Š” ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰, ํ•„์š”์— ๋”ฐ๋ผ ํ˜ธ์ถœ๋จ
  • ๋ฐ์ดํ„ฐ์™€ ๋ณ€์ˆ˜ : ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜ ๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ํ•จ์ˆ˜ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘

์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฅ๋‹จ์ 

์žฅ์  ๋‹จ์ 
๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์  ํ™•์žฅ์„ฑ์˜ ํ•œ๊ณ„
๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ œํ•œ

์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ˆ์‹œ

๋Œ€ํ‘œ์ ์ธ ์ ˆ์ฐจ์  ์–ธ์–ด: C, Pascal, Fortran ...

#include <stdio.h>// ๋‘ ์ˆ˜์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜int add(int a, int b) {
    return a + b;
}

int main() {
    int num1, num2, sum;

// ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋‘ ๊ฐœ์˜ ์ˆซ์ž ์ž…๋ ฅ ๋ฐ›๊ธฐprintf("์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: ");
    scanf("%d", &num1);
    printf("๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: ");
    scanf("%d", &num2);

// ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด ํ•ฉ ๊ณ„์‚ฐ
    sum = add(num1, num2);

// ๊ฒฐ๊ณผ ์ถœ๋ ฅprintf("๋‘ ์ˆ˜์˜ ํ•ฉ์€ %d ์ž…๋‹ˆ๋‹ค.\n", sum);

    return 0;
}

main(): ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘์ ์ด๋ฉฐ, ์ˆœ์ฐจ์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์ž…๋ ฅ, ํ•จ์ˆ˜ ํ˜ธ์ถœ, ๊ฒฐ๊ณผ ์ถœ๋ ฅ์˜ ๊ณผ์ •์„ ๊ฑฐ์นจ. add(): ์ž…๋ ฅ๋œ ๋‘ ์ˆ˜์˜ ํ•ฉ์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ˜ํ™˜

๐Ÿ€ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด ๋‹จ์œ„๋กœ ๋ฌถ์–ด ๋ชจ๋“ˆํ™” ๊ฐ•ํ™”

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

  • ๊ฐ์ฒด: ์ƒํƒœ(์†์„ฑ, attributes)์™€ ํ–‰๋™(๋ฉ”์„œ๋“œ, methods)๋ฅผ ํฌํ•จํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„ํ˜„์‹ค ์„ธ๊ณ„์˜ ๊ฐœ๋…์„ ์†Œํ”„ํŠธ์›จ์–ด์ ์œผ๋กœ ๋ชจ๋ธ๋งํ•˜์—ฌ ์ง๊ด€์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•จ
  • ํด๋ž˜์Šค: ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ, ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ ์ •์˜

[OOP์˜ ์›์น™]

  • ์บก์Аํ™”
  • ์ƒ์†
  • ๋‹คํ˜•์„ฑ

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฃผ์š” ํŠน์ง•

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

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฅ๋‹จ์ 

์žฅ์  ๋‹จ์ 
์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด ์ดˆ๊ธฐ ์„ค๊ณ„์˜ ๋ณต์žก์„ฑ
ํ™•์žฅ์„ฑ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ
์ฝ”๋“œ ์žฌ์‚ฌ์šฉ  

์˜ˆ์‹œ

๋Œ€ํ‘œ์ ์ธ ์–ธ์–ด: Java, Python, C++...

# ํด๋ž˜์Šค ์ •์˜: Person
class Person:
    def __init__(self, name, age):
        self.name = name# ๊ฐ์ฒด์˜ ์ƒํƒœ
        self.age = age

# ๊ฐ์ฒด์˜ ํ–‰๋™์„ ์ •์˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
        def introduce(self):
        print(f"์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” {self.name}์ด๊ณ , {self.age}์‚ด์ž…๋‹ˆ๋‹ค.")

# ๊ฐ์ฒด ์ƒ์„ฑ
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)

# ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
person1.introduce()# ์ถœ๋ ฅ: ์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” Alice์ด๊ณ , 30์‚ด์ž…๋‹ˆ๋‹ค.
person2.introduce()# ์ถœ๋ ฅ: ์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” Bob์ด๊ณ , 25์‚ด์ž…๋‹ˆ๋‹ค.

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

: ์ƒํƒœ ๋ณ€ํ™”(๋ถ€์ˆ˜ ํšจ๊ณผ)๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์ž‘์„ฑ

  • ๋ถ€์ˆ˜ ํšจ๊ณผ: ์™ธ๋ถ€์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ
  • ์ˆœ์ˆ˜ ํ•จ์ˆ˜: ๋ถ€์ˆ˜ํšจ๊ณผ๊ฐ€ ์—†๋Š” ํ•จ์ˆ˜. ์ฆ‰, ์–ด๋–ค ํ•จ์ˆ˜์— ๋™์ผํ•œ ์ธ์ž๋ฅผ ์ฃผ์—ˆ์„ ๋•Œ ํ•ญ์ƒ ๊ฐ™์€ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜

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

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

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

์žฅ์  ๋‹จ์ 
๋””๋ฒ„๊น…๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด ์„ฑ๋Šฅ์ƒ์˜ ์˜ค๋ฒ„ํ—ค๋“œ
์ฝ”๋“œ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ ํ•™์Šต๊ณก์„ 

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

๋Œ€ํ‘œ์ ์ธ ์–ธ์–ด: JavaScript, Python, Haskell...

// ์ˆœ์ˆ˜ ํ•จ์ˆ˜: ์ž…๋ ฅ๊ฐ’๋งŒ์œผ๋กœ ๊ฒฐ๊ณผ ๊ฒฐ์ •, ์™ธ๋ถ€ ์ƒํƒœ ๋ณ€๊ฒฝ ์—†์Œ
const add = (a, b) => a + b;

// ๋ถ€์ˆ˜ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜ (Side Effect)
let count = 0;
const increase = () => count++;// ์ „์—ญ ๋ณ€์ˆ˜ count ๋ณ€๊ฒฝ (๋ถ€์ˆ˜ ํšจ๊ณผ ๋ฐœ์ƒ)
// ๊ณ ์ฐจ ํ•จ์ˆ˜: ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
const applyOperation = (a, b, operation) => operation(a, b);

console.log(applyOperation(5, 3, add));// ์ถœ๋ ฅ: 8
// ๋ถˆ๋ณ€์„ฑ์„ ์œ„ํ•œ ์˜ˆ: ๋ฐฐ์—ด์˜ map ํ•จ์ˆ˜ ์‚ฌ์šฉ
const numbers = [1, 2, 3, 4];
const doubled = numbers.map(num => num * 2);
console.log(doubled);// ์ถœ๋ ฅ: [2, 4, 6, 8]
# ์ˆœ์ˆ˜ ํ•จ์ˆ˜ ์˜ˆ์ œ
def multiply(a, b):
    return a * b

# ๊ณ ์ฐจ ํ•จ์ˆ˜ ์˜ˆ์ œ: ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜
def apply_operation(a, b, operation):
    return operation(a, b)

print(apply_operation(4, 5, multiply))  # ์ถœ๋ ฅ: 20

# ๋ถˆ๋ณ€์„ฑ ์œ ์ง€: map ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # ์ถœ๋ ฅ: [1, 4, 9, 16]
728x90