🔑어제의 나보다 더 나은 오늘의 나를 위해
💡 순차지향
📃 순차지향 프로그래밍은 말 그대로 프로그래밍이 순차적으로 진행되는 방식을 의미합니다. 과거 개발자들은 주로 어셈블리어(Assembly Language)라는 저수준 언어(Low-Level Language)를 사용하여 프로그램을 작성했습니다. 어셈블리어는 메모리의 세부적인 부분까지 하나하나 직접 정의하고 관리해야 했습니다. 이러한 방식이 순차지향 프로그래밍의 대표적인 예입니다
💻CODE
section .data
message db "Hello, World!", 0
section .text
global _start
_start:
mov rax, 1 ; 시스템 호출 번호 (write)
mov rdi, 1 ; 파일 디스크립터 (stdout)
mov rsi, message ; 출력할 메시지의 메모리 주소
mov rdx, 13 ; 메시지 길이
syscall ; 시스템 호출 실행
mov rax, 60 ; 시스템 호출 번호 (exit)
xor rdi, rdi ; 반환 값 0
syscall ; 프로그램 종료
⬆️ 위 코드에서 사용된 명령어들은 모두 프로세서의 레지스터와 메모리 공간을 직접 관리하며, 작업이 순차적으로 진행됩니다
💡 절차지향
📃 절차지향은 얼핏보면 순차지향하고 다른게 뭐지? 라고 생각할 수 있습니다, 절차지향은 프로그램을 함수(절차) 단위로 나누어 작성하는 프로그래밍 패러다임입니다. 프로그램은 순차적으로 실행되며, 여러 단계(절차)를 수행하는 방식으로 구조화됩니다. 결국 절차지향도 순차적으로 진행되지만, 함수라는 구조화 하는 과정이 추가되었다고 생각할 수 있습니다
💻CODE
#include <stdio.h>
int add(int a, int b) {
return a + b; // 함수 단위로 동작
}
int main() {
int result = add(5, 10); // 함수 호출
printf("Result: %d\n", result);
return 0;
}
⬆️ 절차지향도 순차적으로 진행되지만, 함수 단위로 나누어 관리와 재사용성이 용이하다는 점에서 차이가 있습니다
💡 객체지향
📃 마지막으로 우리가 잘 알고 있는 객체지향입니다. 여러분은 객체지향을 어느정도로 이해하고 계신가요? 세상의 추상적인 요소들을 객체 단위로 묶어서 프로그래밍한다 정도로 알고 계시지는 않나요? 위에 설명도 틀린 설명은 아니지만, 객체가 책임과 역할을 가지고 상호작용한다는 점이 객체지향의 본질이라고 말할 수 있습니다
💻CODE
class Position {
private int x, y;
public Position(int x, int y) {
this.x = x;
this.y = y;
}
public void move() {
this.x += 1;
this.y += 1;
}
public void display() {
System.out.println("Position: (" + x + ", " + y + ")");
}
}
public class Main {
public static void main(String[] args) {
Position pos = new Position(0, 0); // 객체 생성
pos.move(); // 객체의 책임
pos.display();
}
}
⬆️ 객체(Position)가 자신의 데이터를 관리하며, 책임(move와 display)을 가집니다