#include <stdio.h>// 절차지향 코드
int add(int a, int b) {
return a + b;
}
int main() {
int x = 10, y = 20;
printf("Sum: %d\n", add(x, y));
return 0;
}
// 객체지향 코드
class Calculator {
// 메서드
public int add(int a, int b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator(); // 객체 생성
System.out.println("Sum: " + calc.add(10, 20));
}
}
특징 | 절차지향(Procedural) | 객체지향(Object-Oriented) |
---|---|---|
중심 요소 | 함수(프로시저) 중심 | 객체 중심 |
데이터와 함수 | 데이터와 함수가 분리됨 | 데이터와 메서드가 객체로 캡슐화 |
코드 재사용성 | 낮음 | 높음 (상속, 다형성 등) |
코드 확장성 | 낮음 | 높음 |
복잡성 | 단순하고 직관적 | 상대적으로 복잡 |
보안성 | 데이터 보호가 어렵고 보안 취약 | 캡슐화를 통해 데이터 보호 가능 |
적용 사례 | 소규모 프로젝트, 시스템 프로그래밍 | 대규모 소프트웨어, 게임, 웹 애플리케이션 |
사용 언어 예시 | C, Pascal, COBOL | Java, C++, Python, C#, Ruby |
JavaScript는 멀티패러다임 프로그래밍 언어로, 절차지향, 객체지향, 그리고 함수형 프로그래밍을 모두 지원합니다. 이는 JavaScript가 유연하고 다양한 스타일의 코드를 작성할 수 있도록 설계된 언어라는 뜻입니다.
아래에서 JavaScript가 각각의 패러다임을 어떻게 지원하는지 살펴보겠습니다.
JavaScript는 절차지향 프로그래밍도 지원합니다.
JavaScript에서는 절차지향 스타일로 코드를 작성할 수 있습니다. 프로그램의 흐름을 함수와 명령문으로 구성하며, 데이터를 직접 처리하는 방식입니다.
// 데이터를 처리하는 함수 정의
function add(a, b) {
return a + b;
}
// 순차적으로 실행
let x = 10;
let y = 20;
let sum = add(x, y);
console.log("Sum:", sum);
위 코드에서는 데이터(x
, y
)를 함수(add
)가 처리하며, 절차적으로 진행됩니다. JavaScript는 이런 절차적 스타일의 코드 작성이 가능합니다.
JavaScript는 객체지향 프로그래밍(OOP)도 지원합니다.
JavaScript는 객체를 생성하고, 해당 객체에 속성과 메서드를 정의하여 객체 지향 프로그래밍 스타일로 코드를 작성할 수 있습니다. 특히, ES6(ECMAScript 2015)부터는 클래스 문법(class syntax)이 추가되면서 객체지향 코드를 작성하기 더 쉬워졌습니다.
// ES6 클래스 문법을 사용한 객체지향 코드
class Calculator {
constructor() {
this.result = 0;
}
add(value) {
this.result += value;
}
subtract(value) {
this.result -= value;
}
getResult() {
return this.result;
}
}
// 객체 생성
const calc = new Calculator();
calc.add(10);
calc.subtract(5);
console.log("Result:", calc.getResult()); // Result: 5
extends
키워드를 사용해 클래스 상속.JavaScript는 함수형 프로그래밍 패러다임도 지원합니다.
JavaScript는 함수를 일급 객체로 취급하며, 함수형 프로그래밍의 여러 특징(고차 함수, 불변성 등)을 지원합니다. 이는 JavaScript가 다른 절차지향이나 객체지향 언어와 구별되는 중요한 특징 중 하나입니다.
// 함수형 스타일로 배열 처리
const numbers = [1, 2, 3, 4, 5];
// 고차 함수(map)를 사용
const squared = numbers.map(num => num * num);
console.log(squared); // [1, 4, 9, 16, 25]
// 불변성을 유지하며 데이터 변환
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]
패러다임 | JavaScript에서의 지원 |
---|---|
절차지향 | 함수와 명령문을 사용해 순차적으로 코드 작성. |
객체지향(OOP) | 객체 생성, 클래스 문법, 상속, 다형성 등 지원. |
함수형 프로그래밍 | 고차 함수, 불변성, 클로저 등 지원. |
JavaScript는 기본적으로 절차지향에서 출발했지만, 시간이 지나면서 객체지향 프로그래밍(OOP)과 함수형 프로그래밍까지 폭넓게 지원하게 되었습니다.
class
와 같은 문법이 추가되면서 객체지향 스타일의 코드 작성이 쉬워졌습니다.map
, filter
등)를 쉽게 사용할 수 있습니다.// 절차지향적으로 문제 해결
function calculateArea(width, height) {
return width * height;
}
const width = 10;
const height = 5;
console.log("Area:", calculateArea(width, height));
// 객체를 사용해 문제 해결
class Rectangle {
constructor(width, height) {
this.width = width;
this.height = height;
}
getArea() {
return this.width * this.height;
}
}
const rect = new Rectangle(10, 5);
console.log("Area:", rect.getArea());
// 함수형 프로그래밍 스타일
const calculateArea = (width, height) => width * height;
const dimensions = { width: 10, height: 5 };
console.log("Area:", calculateArea(dimensions.width, dimensions.height));
JavaScript는 절차지향, 객체지향, 함수형 프로그래밍을 모두 지원하는 멀티패러다임 언어입니다. 프로젝트나 개발자의 선호도에 따라 특정 패러다임에 맞게 작성할 수 있는 유연성을 제공합니다.
JavaScript는 특정 패러다임에 국한되지 않고 다양한 스타일의 프로그래밍에 적합한 언어입니다.