[실시간 특강] 객체지향 프로그래밍, CS 특강
1) 객체지향 프로그래밍 특강
- 객체 : 사물을 설명하는 것은 그 사물이 가지고 있는 속성을 설명하는 것
- 객체 지향 : 객체 지향의 목표는 실세계를 모방하는 것이 아니라 창조하는 것
2) CS 특강
- 프로세스
- 메모리에 적재되어 실행되고 있는 프로그램의 인스턴스
- 독립된 메모리 할당을 받음
- 프로세스 주소 공간 : 메모리를 관리하기 위한 공간의 구조
- Code : 코드 자체를 고성하는 메모리 영역
- Data : 전역변수, 정적변수 등
- Stack : 지역변수, 함수 매개변수, 리턴 값
- Heap : 동적 할당 시 사용
- 프로세스마다 최소 1개의 스레드를 가짐
- 스레드
- 프로세스 내에서 프로세스의 자원을 이용하는 여러 실행 흐름의 단위
- 프로세스와 해당 프로세스 내의 다른 스레드와 자원과 공간을 공유하면서 사용
- 멀티 프로세스
- 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
- 장점
- 자식 프로세스 중 하나에 문제가 발생하면 해당 자식 프로세스만 죽을 뿐 다른 영향이 확산되지 않음
- 단점
- 문맥교환에서의 오버헤드 발생
- 멀티 스레드
- 하나의 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것
- 장점
- 프로세스에 비해 메모리 공간과 시스템 자원 소모가 줄어들게 됨
- 단점
- 자원 공유 동기화 문제가 발생함
- 하나의 스레드에 무제가 생기면 전체 프로세스가 영향을 받음
- 비동기(asyncronous)
- 제어권 : 함수의 코드를 실행할 권리. 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후 자신을 호출한 함수에게 돌려줌
- 제어권이 누구에게 있는가?
- 블로킹 : 함수 A가 함수 B를 호출한 뒤, 함수 B의 리턴값이 올 때까지 기다린 후 진행되는 것. 제어권을 넘겨줌
- 논블로킹 : 함수 A가 함수 B를 호출한 뒤, 함수 B의 작업 완료 여부와 상관없이 진행되는 것. 제어권을 넘겨주지 않음
- 동시성 : 함수 A와 B가 동시에 진행되는 것.
- 함수의 작업 완료 여부를 신경 쓰는가?
- 함수 A와 함수 B를 호출할 때, 함수 A가 함수 B의 리턴값을 계속 확인하면서 신경쓰는 것
- 함수 A와 함수 B를 호출할 때, 함수 A가 함수 B의 작업 완료 여부는 신경쓰지 않는 것
- 느낀 점