🟩 함수형 프로그래밍


🟧 명령형 프로그래밍 (Imperative Programming)

  • 프로그램의 상태를 변경하는 명령문들의 순서를 자세히 기술
  • "어떻게(How) 할 것인가"에 초점
🖥️ javascript

// 명령형 방식으로 배열의 모든 요소 두 배로 만들기
const numbers = [1, 2, 3, 4, 5];
for(let i = 0; i < numbers.length; i++) {
    numbers[i] = numbers[i] * 2;
}

🟦 객체지향 프로그래밍 (Object-Oriented Programming)

  • 데이터와 해당 데이터를 조작하는 메서드를 객체라는 단위로 묶음
  • 핵심 개념 : 캡슐화, 상속, 다형성
🖥️ javascript

class BankAccount {
    constructor(balance = 0) {
        this.balance = balance;
    }

    deposit(amount) {
        this.balance += amount;
    }

    withdraw(amount) {
        if (amount <= this.balance) {
            this.balance -= amount;
            return true;
        }
        return false;
    }

    getBalance() {
        return this.balance;
    }
}

const account = new BankAccount(1000);
account.deposit(500);
account.withdraw(200);

⬜️ 선언적 프로그래밍 (Declarative Programming)

  • "무엇(What)을 할 것인가"에 초점
  • 함수형 프로그래밍도 선언적 프로그래밍의 한 종류
🖥️ javascriptCopy// 선언적 방식으로 배열의 모든 요소 두 배로 만들기
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(num => num * 2);

// SQL도 선언적 프로그래밍의 예시
// SELECT name, age FROM users WHERE age > 18;

🍕 TIL - 선언적 코드,명령형 코드


🟪 절차적 프로그래밍 (Procedural Programming)

  • 명령형 프로그래밍의 한 종류
  • 프로시저(함수) 호출의 개념에 기반
🖥️ javascript

function calculateGrade(scores) {
    let total = 0;
    
    for(let i = 0; i < scores.length; i++) {
        total += scores[i];
    }
    
    const average = total / scores.length;
    
    if(average >= 90) return 'A';
    if(average >= 80) return 'B';
    if(average >= 70) return 'C';
    return 'F';
}

const studentScores = [85, 92, 78, 88];
const grade = calculateGrade(studentScores);

🟨 이벤트 기반 프로그래밍 (Event-Driven Programming)

  • 이벤트의 발생과 처리에 기반
  • GUI 프로그래밍이나 웹 개발에서 많이 사용
🖥️ javascript

// DOM 이벤트 처리
document.getElementById('button').addEventListener('click', () => {
    console.log('버튼이 클릭되었습니다');
});

// Node.js의 이벤트 처리
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();

myEmitter.on('event', () => {
    console.log('이벤트가 발생했습니다');
});

myEmitter.emit('event');

실제 애플리케이션에서는 이러한 패러다임들이 혼합되어 사용된다.

🖥️ javascript

// React에서 여러 패러다임의 혼합
class TodoApp extends React.Component {
    // 객체지향적 특성
    constructor(props) {
        super(props);
        this.state = { todos: [] };
    }

    // 이벤트 기반 프로그래밍
    handleAddTodo = (event) => {
        event.preventDefault();
        const text = event.target.elements.todo.value;
        
        // 함수형 프로그래밍 (불변성 유지)
        this.setState(prevState => ({
            todos: [...prevState.todos, { text, completed: false }]
        }));
    }

    // 선언적 렌더링
    render() {
        return (
            <div>
                <form onSubmit={this.handleAddTodo}>
                    <input name="todo" />
                    <button type="submit">Add Todo</button>
                </form>
                {/* 선언적 리스트 렌더링 */}
                <ul>
                    {this.state.todos.map(todo => (
                        <li>{todo.text}</li>
                    ))}
                </ul>
            </div>
        );
    }
}

➡️ 각 패러다임은 특정 문제를 해결하는데 더 적합할 수 있으므로
상황에 따라 적절한 패러다임을 선택하거나 조합하여 사용하도록 한다.

profile
아무튼, 개발자

0개의 댓글