Program/Process/Thread, Class/Object/Method

david1-p·2025년 7월 7일

CS 지식 창고

목록 보기
9/26

1. 운영체제 관점: Program / Process / Thread

Program (프로그램)

정의: 실행 가능한 파일 형태로 저장장치에 저장된 명령어들의 집합

특징:

  • 정적(Static)인 개념
  • 디스크나 SSD와 같은 보조기억장치에 저장된 실행 파일
  • 아직 실행되지 않은 상태의 코드와 데이터
  • 하나의 프로그램으로 여러 개의 프로세스를 생성할 수 있음

예시:

  • notepad.exe (메모장 실행 파일)
  • chrome.exe (크롬 브라우저 실행 파일)
  • python.exe (파이썬 인터프리터 실행 파일)

Process (프로세스)

정의: 실행 중인 프로그램의 인스턴스로, 운영체제로부터 자원을 할당받은 작업 단위

특징:

  • 동적(Dynamic)인 개념
  • 독립적인 메모리 공간을 가짐 (코드, 데이터, 힙, 스택 영역)
  • 각자 고유한 Process ID(PID)를 가짐
  • 프로세스 간 통신은 IPC(Inter-Process Communication)를 통해 이루어짐
  • 하나의 프로세스가 오류로 종료되어도 다른 프로세스에 영향을 주지 않음

구성 요소:

  • PCB(Process Control Block): 프로세스 상태 정보를 저장하는 구조체
  • 메모리 공간: 독립적인 가상 메모리 주소 공간
  • 자원: 파일, 네트워크 연결, 장치 등

프로세스 상태:

  • New: 프로세스가 생성 중인 상태
  • Ready: CPU 할당을 기다리는 상태
  • Running: CPU를 할당받아 실행 중인 상태
  • Waiting: I/O 작업 완료를 기다리는 상태
  • Terminated: 실행이 완료되어 종료된 상태

Thread (스레드)

정의: 프로세스 내에서 실행되는 가장 작은 실행 단위

특징:

  • 경량 프로세스(Light Weight Process)라고도 불림
  • 같은 프로세스 내의 스레드들은 메모리 공간을 공유
  • 독립적인 스택과 레지스터를 가짐
  • 스레드 간 통신은 메모리 공유를 통해 쉽게 이루어짐
  • 컨텍스트 스위칭 비용이 프로세스보다 적음

메모리 구조:

  • 공유 영역: 코드, 데이터, 힙 영역
  • 독립 영역: 스택, 레지스터

장점:

  • 빠른 생성과 종료
  • 효율적인 자원 사용
  • 응답성 향상
  • 병렬 처리 가능

단점:

  • 동기화 문제 (Race Condition, Deadlock)
  • 하나의 스레드 오류가 전체 프로세스에 영향
  • 디버깅의 복잡성

2. 객체지향 프로그래밍 관점: Class / Object / Method

Class (클래스)

정의: 객체를 생성하기 위한 설계도 또는 템플릿

특징:

  • 추상적인 개념
  • 속성(Attribute)과 메서드(Method)를 정의
  • 객체가 어떤 데이터를 가지고 어떤 동작을 할지 명세
  • 코드의 재사용성과 모듈성을 제공

구성 요소:

  • 속성(Field/Property): 객체의 상태를 나타내는 변수
  • 메서드(Method): 객체의 동작을 정의하는 함수
  • 생성자(Constructor): 객체를 초기화하는 특별한 메서드
  • 소멸자(Destructor): 객체가 소멸될 때 호출되는 메서드

예시 (Java):

public class Car {
    // 속성
    private String brand;
    private int speed;
    
    // 생성자
    public Car(String brand) {
        this.brand = brand;
        this.speed = 0;
    }
    
    // 메서드
    public void accelerate() {
        speed += 10;
    }
    
    public void brake() {
        speed = Math.max(0, speed - 10);
    }
}

Object (객체)

정의: 클래스를 바탕으로 생성된 실체(Instance)

특징:

  • 클래스의 구체적인 구현체
  • 실제 메모리에 할당되는 실체
  • 고유한 식별자(Identity)를 가짐
  • 상태(State)와 행동(Behavior)을 가짐
  • 다른 객체와 메시지를 주고받으며 상호작용

객체의 3요소:
1. Identity (식별성): 객체를 구별할 수 있는 고유성
2. State (상태): 객체의 속성 값들
3. Behavior (행동): 객체가 수행할 수 있는 동작들

예시:

// 객체 생성
Car myCar = new Car("Toyota");  // myCar는 Car 클래스의 객체
Car yourCar = new Car("Honda"); // yourCar는 Car 클래스의 또 다른 객체

// 각 객체는 독립적인 상태를 가짐
myCar.accelerate();  // myCar의 속도만 증가
yourCar.brake();     // yourCar의 속도만 감소

Method (메서드)

정의: 객체의 동작을 정의하는 함수

특징:

  • 객체의 행동을 구현
  • 객체의 상태를 변경하거나 조회
  • 다른 객체와의 상호작용을 담당
  • 매개변수를 받고 반환값을 가질 수 있음

메서드 종류:
1. Instance Method: 특정 객체에 대해 호출되는 메서드
2. Static Method: 클래스 차원에서 호출되는 메서드
3. Abstract Method: 구현이 없는 추상 메서드
4. Final Method: 오버라이드할 수 없는 메서드

접근 제어자:

  • public: 어디서든 접근 가능
  • private: 같은 클래스 내에서만 접근 가능
  • protected: 같은 패키지 또는 상속받은 클래스에서 접근 가능
  • default: 같은 패키지 내에서만 접근 가능

예시:

public class BankAccount {
    private double balance;
    
    // Instance Method
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }
    
    // Instance Method
    public double getBalance() {
        return balance;
    }
    
    // Static Method
    public static double calculateInterest(double principal, double rate) {
        return principal * rate;
    }
}

개념 간 관계 정리

운영체제 관점

  • Program → Process: 프로그램이 실행되면 프로세스가 됨
  • Process → Thread: 프로세스 내에서 여러 스레드가 동시에 실행됨
  • 관계: 1개 프로그램 → N개 프로세스 → M개 스레드

객체지향 관점

  • Class → Object: 클래스를 바탕으로 객체를 생성 (인스턴스화)
  • Object → Method: 객체가 메서드를 호출하여 동작 수행
  • 관계: 1개 클래스 → N개 객체 → M개 메서드 호출

두 관점의 유사성

  • 설계 vs 실행: Program/Class는 설계, Process/Object는 실행 중인 실체
  • 단위: Thread/Method는 실제 작업을 수행하는 최소 단위
  • 추상화: 두 관점 모두 복잡한 시스템을 계층적으로 추상화하여 관리
profile
DONE IS BETTER THAN PERFECT.

0개의 댓글