스레드(Thread): 프로세스보다 작은 단위를 의미. 문맥 교환(Context Swiching)의 부담을 줄인다.
병행 프로세스
: 프로세스 여러 개가 동시에 수행 상태에 있는 것
상호 배제(공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘)와 동기화
1. 임계 영역(Critical Section): 두 개 이상의 프로세스들이 공유할 수 없는 자원
2. 세마포어(Semaphore): Dijkstra에 의해 제안되었으며, 상호 배제를 해결하기 위한 새로운 동기 도구.
3. 모니터(Monitor): 상호 배제를 구현하기 위한 고급 동기화 도구. 세마포어와 비슷한 역할
프로세스 스케줄링 방법
- 비선점 스케줄링: 다른 프로세스가 현재 프로세스를 중단시킬 수 없는 기법
ex) FCFS, SJF, HRN, 기한부
- 선점 스케줄링: 다른 프로세스가 현재 프로세스를 중단시킬 수 있는 기법
ex) RR, SRT, MLQ, MFQ
1. FCFS(First Come First Service)
: 대표적인 비선점형 스케줄링 기법. 대기 리스트에 가장 먼저 도착한 프로세스의 순서대로 CPU를 할당한다.
2. SJF(Shortest Job First)
: 대기 리스트의 프로세스들 중 작업이 끝나기까지의 실행 시간 추정치가 가장 작은 프로세스에 CPU를 할당한다.
3. HRN(Highest Response Next)
: SJF의 단점인 실행 시간이 긴 프로세스와 짧은 프로세스의 지나친 불평등을 보완한 기법. 우선순위 계산식에서 큰 값을 가진 프로세스 순으로 스케줄링한다.
: 우선순위 = (대기 시간 + 실행 시간) / 실행 시간
4. RR(Round Robin, 라운드 로빈)
: FCFS를 선점형 스케줄링으로 변형한 기법. 각각의 프로세스에게 동일한 시간 할당량을 부과하여 수행하는 기법.
: 대기 리스트에 들어온 순서대로 처리하지만, 시간 할당량이 있어 그 시간을 모두 소비하면 대기 리스트의 맨 뒤로 가서 대기한다.
5. SRT(Shortest Remaining Time)
: SJF를 선점형 스케줄링으로 변형한 기법. 대기 리스트의 모든 프로세스의 잔여 실행 시간을 실시간으로 알아야 하므로, 오버헤드가 증가한다.
6. MLQ(Multi-level Queue, 다단계 큐)
: 여러 종류의 대기 리스트를 준비하고 작업 유형별로 프로세스를 분류하여 대기 리스트에 입력한다.
: (프로세스 특성별 분류)
7. MFQ(Multi-level Feedback Queue, 다단계 피드백 큐)
: 여러 대기 리스트를 준비하고 수행 시간이 긴 프로세스일수록 낮은 우선순위를 갖도록 조정하여 낮은 우선순위 대기 리스트로 이동시키는 스케줄링 기법이다.
: (프로세스 처리 시간 기준 분류)
교착상태(Deadlock)
: 둘 이상의 프로세스가 자원을 공유한 상태에서 서로 상대방의 작업이 끝나기만을 무한정 기다리는 현상.
교착상태 4대 발생 조건
1. 상호 배제: 한 번에 하나의 프로세스만이 자원을 사용할 수 있다.
2. 점유와 대기: 어느 하나의 프로세스가 자원을 점유하면서 다른 프로세스에게 할당된 자원을 차지하기 위해 대기해야 한다.
3. 비선점: 프로세스가 사용 중인 공유 자원을 강제로 빼앗을 수 없다.
4. 환형 대기(순환 대기): 프로세스들에게 우선순위를 부여하여 공유 자원 할당의 사용 시기와 순서를 융통성있게 조절한다.
기억장치 배치 전략
- 최초 적합(First Fit): 첫 번째 가용공간에 배치
- 최적 적합(Best Fit): 가장 알맞은 가용공간에 배치
- 최악 적합(Worst Fit): 가장 큰 가용공간에 배치
기억장치 교체 전략
1. FIFO(First In First Out): 가장 먼저 입력되었던 페이지를 교체
2. LRU(Least Recently Used): 주기억장치에서 가장 오랫동안 사용되지 않은 페이지를 교체
3. OPT(OPTimal replacement, 최적화 교체): 앞으로 가장 오랫동안 사용하지 않을 페이지 교체
4. LFU(Least Frequently Used): 주기억장치에서 참조 횟수가 가장 적은 페이지 교체
5. MFU(Most Frequently Used): 주기억장치에서 참조 횟수가 가장 많은 페이지 교체
6. NUR(Not Used Recently): 주기억장치에서 최근에 사용되지 않은 페이지 교체
7. SCR(Second Change Replacement, FIFO의 2차 기회 교체): 주기억장치에서 가장 오래 있었던 페이지 중 자주 참조된 페이지 교체를 방지
8. 무작위 페이지 교체(Random Page Replacement): 주기억장치에서 페이지 교체가 가능한 임의의 페이지와 페이지를 교체
가상기억장치
: 주기억장치보다 큰 용량의 프로그램을 실행할 수 있는 기억장치로, 주기억장치 공간의 확대가 주 목적
- 페이징(Paging) 기법: 모두 같은 크기의 블록으로 실행. 일정한 크기를 가진 블록을 페이지(page)라고 한다.
- 세그먼테이션(Segmentation) 기법: 프로그램 크기를 다양한 크기, 즉 가변 길이의 논리적 단위로 나눈 후 주기억장치에 적재하여 실행하는 방법이다.
- 페이지 부재(PF: Page Fault): 프로세서 실행 시 주기억장치에 참조할 페이지가 없는 현상이다.
- 스레싱(Thrashing): 프로세스가 수행되는 시간보다 페이지 이동에 시간이 더 많아지는 현상이다.
- 지역성(Locality): 시간 지역성/공간 지역성
디스크 스케줄링
1. FCFS(First Come First Service): 입출력 요청 대기 큐에 들어온 순서대로 서비스를 하는 기법
2. SSTF(Shortest Seek Time First): 탐색 거리가 가장 짧은 트랙에 대한 요청을 먼저 서비스하는 기법
3. SCAN: SSTF가 갖는 탐색 시간의 편차를 해소하기 위한 기법으로, 현재 진행 중인 방향으로 가장 짧은 탐색 거리에 있는 요청을 먼저 서비스한다.
4. LOOK: SCAN 기법을 개선한 기법
5. C-SCAN: 항상 바깥쪽에서 안쪽으로 움직이면서 가장 짧은 탐색 거리를 갖는 요청을 서비스하는 기법. 안쪽에 더 이상의 요청이 없으면 헤드는 가장 바깥쪽의 끝으로 이동한 뒤 다시 안쪽으로 이동하면서 요청을 서비스한다.
6. C-LOOK: C-SCAN 기법을 개선한 기법으로, 트랙의 바깥쪽에서 안쪽 방향의 마지막 입출력 요청을 처리한 다음 디스크의 끝까지 이동하는 것이 아니라 다시 가장 바깥쪽 트랙으로 이동한다.
7. N-step SCAN: SCAN 기법을 개선한 기법. 무한 대기 발생 가능성을 제거한 것
8. SLTF(Shortest Latency Time First): 섹터 큐잉(Sector Queuing)이라고도 한다. 디스크 회전 시간의 최적화를 위한 기법으로 가장 짧은 회전 지연 시간의 섹터 입출력 요청을 먼저 처리한다.
9. Eschenbach: 탐색 시간과 회전 지연 시간을 최적화하려는 최초의 기법. 항공 예약 시스템을 위해 개발되었다.
유닉스 시스템: 1960년대 후반에 AT&T사의 Bell 연구소에서 개발한 Multics라는 이름을 가진 운영체제가 뿌리라고 할 수 있다.
유닉스의 특징
- 대화식 운영체제(Shell)
- 멀티태스킹
- 멀티유저 환경
- 계층적 파일 시스템
- 이식성
- 유연성
- 호환성
- 보안 및 보호 기능 제공
유닉스 시스템의 3가지 핵심 구조
1. 커널(Kernel): 메인 메모리에 상주하여 컴퓨터 자원을 관리한다.
2. 쉘(Shell): 유닉스 시스템과 사용자 사이의 인터페이스를 제공하는 것
3. 파일 시스템(File System): 계층적인 트리구조를 의미. 시스템 관리를 위한 기본 환경을 제공한다
부트 블록/슈퍼 블록/아이노드(I-node)/데이터 블록
* 아이노드(I-node): 유닉스에서 각 파일이나 디렉터리에 대한 모든 정보를 가지고 있는 구조체이다.
파일 디스크립터(File Descriptor): 프로세스가 파일을 다룰 때 사용하는 개념
유닉스 시스템 계정 설정과 관련된 파일
/etc/passwd: 로그인과 계정에 관련된 권한 관리를 위한 파일
/etc/shadow: 사용자의 비밀번호(암호) 영역을 담당하는 파일로, 슈퍼유저(root)만이 접근할 수 있는 파일
/etc/group: 로그인 사용자의 그룹 권한 관리를 위한 파일
umask: 파일 권한 설정chmod: 접근 모드 변경SUID, SGID: 특수 권한 파일 관리
미들웨어: 클라이언트와 서버를 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하거나 많은 프로세스들에게 어떤 서비스를 사용할 수 있도록 연결해 주는 소프트웨어
ex) DB 미들웨어/원격 프로시저 호출(RPC)/메시지 지향 미들웨어(MOM)/트랜잭션 처리(TP) 모니터
02. 데이터베이스 기초 활용
데이터: 관찰이나 측정을 통해서 수집된 사실이나 값(수치, 스트링)정보: 자료를 가공하여 얻은 결과정보시스템: 한 기관을 위해 데이터를 수집, 조작, 저장하고 정보를 생성, 분배하는 수단
데이터베이스: 어느 한 조직에서 다수의 응용 시스템들이 공용으로 사용하기 위해 통합, 저장된 운영 데이터의 집합이다.
하둡(Hadoop): 대량의 자료를 처리할 수 있는 큰 컴퓨터 클러스터에서 동작하는 분산 응용 프로그램을 지원하는 프리웨어 자바 소프트웨어 프레임워크이다. 오픈 소스를 기반으로 한 분산 컴퓨팅 플랫폼
데이터베이스의 특징
1. 실시간 접근성2. 계속적인 변화3. 동시 공유4. 내용에 따른 참조
데이터베이스의 논리적 구성
- 개체(Entity)- 속성(Attribute)- 관계(Relationship)
DBMS(DataBase Management System, 데이터베이스 관리 시스템)
: 파일 시스템의 데이터 종속성과 중복성의 문제를 해결하기 위해 제안된 시스템.
3단계 데이터베이스 스키마
1. 외부 스키마: 가장 바깥쪽 스키마로, 전체 데이터 중 사용자나 응용 프로그래머가 사용하는 한 부분에서 본 구조2. 개념 스키마: 논리적 관점에서 본 구조로 전체적인 데이터 구조3. 내부 스키마: 물리적 저장 장치 관점에서 본 구조
데이터 사전(Data Dictionary), 시스템 카탈로그(System Catalog)
: 시스템 자신이 필요로 하는 스키마 및 여러 가지 객체에 관한 정보를 포함하고 있는 시스템 데이터베이스: 데이터베이스에 포함되는 데이터 객체에 대한 정의나 명세에 대한 정보를 유지 관리한다. 저장된 정보를 메타 데이터라고도 한다.
데이터 모델(Data Model): 현실 세계의 데이터 구조를 컴퓨터 세계의 데이터 구조로 기술하는 논리적 구조
데이터 모델링: 현실 세계를 데이터베이스에 표현하는 중간 과정
데이터 모델의 구성 요소 S O C
- 구조(Structure)
- 연산(Operation)
- 제약 조건(Constraint)
개체(Entity)
: 단독으로 존재하며 다른 것과 구분되는 객체: 속성(애트리뷰트)들의 집합
관계(Relationship)
: 인스턴스 사이의 대응성, 즉 사상(Mapping)을 의미한다 (1:1, 1:N, N:M)
개체-관계 모델(E-R Model)
: 현실 세계의 개념적 표현으로서 개체 타입과 관계 타입을 기본 개념으로 현실 세계를 개념적으로 표현하는 방법. 1976년 피터 첸(P. Chen) 제안
개체 타입 - 사각형
관계 타입 - 마름모
속성 - 타원
연결 - 링크
관계 데이터 구조
1. 릴레이션(Relation): 정보 저장의 기본 형태가 2차원 구조의 표 또는 테이블로 표현되는 모델
2. 도메인(Domain): 애트리뷰트가 취할 수 있는 값들의 집합3. 속성(Attribute): 테이블의 각 열 - (차수(Degree), 가로)4. 튜플(Tuple): 한 행을 구성하는 속성들의 집합 - (기수(Cardinality), 세로)5. 차수(Degree): 속성(애트리뷰트)의 개수6. 기수(Cardinality, 대응수): 튜플의 개수
릴레이션 특성
1. 튜플의 유일성2. 튜플의 무순서성3. 애트리뷰트의 무순서성4. 애트리뷰트의 원자성
키의 종류
1. 슈퍼키: 유일성은 만족시키지만 최소성은 만족시키지 못하는 키2. 후보키: 유일성과 최소성을 모두 만족하는 키. 각 튜플을 유일하게 식별할 수 있는 속성이나 속성의 조합들3. 기본키: 개체 식별자로 후보키 중 하나를 선택한 키4. 대체키: 후보키 중 기본키를 제외한 나머지 키5. 외래키: 다른 테이블을 참조하는 데 사용되는 속성
이상(Anomaly) 현상
: 릴레이션 조작 시 데이터들이 불필요하게 중복되어 예기치 않게 발생하는 곤란한 현상이다.
이상 현상의 구분
1. 삽입 이상: 원하지 않는 정보를 강제 삽입해야 하는 경우와 불필요한 데이터가 함께 삽입되는 경우이다.
2. 삭제 이상: 튜플을 삭제함으로써 유지되어야 하는 정보까지도 연쇄 삭제되는 정보의 손실이다.
3. 갱신 이상: 중복된 튜플 중에서 일부의 속성만 갱신시킴으로써 정보의 모순성이 생기는 현상이다.
관계대수
: 주어진 릴레이션 조작을 위한 연산의 집합으로, 연산자를 이용하여 표현되는 절차적(Procedural) 언어
1. 셀렉트(SELECT, σ): 릴레이션의 행 추출
2. 프로젝트(PROJECT, Π): 릴레이션의 속성값 추출(열 추출)
3. 조인(JOIN, ⋈): 두 관계로부터 관련된 튜플들을 하나의 튜플로 결합하는 연산
4. 디비전(DIVISION, ÷)
관계해석
: 원하는 릴레이션을 정의하는 방법을 제공하며 비절차적(Non-Procedural)인 언어
데이터베이스 설계: 사용자의 요구 조건에서부터 데이터베이스 구조를 도출해내는 과정요구 조건 분석 -> 개념적 설계 -> 논리적 설계 -> 물리적 설계 -> 구현 -> 운영 -> 감시 및 개선
물리적 설계 시 고려사항: 응답 시간, 저장공간의 효율화, 트랜잭션 처리도(처리 능력)
데이터 웨어하우스
: 의사결정 지원을 위한 주체 지향의 통합적이고 영속적이면서 시간에 따라 변하는 값이 유지되는 데이터의 집합. 여러 소스의 데이터를 수집해 하나의 통일된 스키마를 이용하여 단일 사이트에 저장한 정보 저장소 또는 정보 아카이브이다.
데이터 마트
: 데이터 웨어하우스와 유사한 개념이지만 그보다 작은 하위 집합으로 주로 구체적인 특정 부서나 프로젝트 등의 작은 단위의 분석을 요구할 때 사용하는 개념이다.
OLAP(On Line Analytical Processing)
: 대규모의 다차원 데이터를 동적으로 온라인에서 분석하고, 통합하고, 보고서를 만드는 과정
데이터 마이닝
: 대량의 데이터로부터 관련된 정보를 발견하는 과정, 즉 지식 발견(Knowledge Discovery)의 과정이다.
03. 네트워크 기초 활용
애드혹 네트워크(Ad-Hoc Network)
: 무선 기반의 이동단말기 간 연결망의 일종으로서, 라우터 장비가 따로 없고 이동 단말기 중 일부가 라우터 역할을 담당하는 네트워크이다.
교환망 종류
- 회선 교환망: 다른 사용자가 침범하지 못하며 전화망(PSTN)이 여기에 속한다.- 패킷 교환망: 여러 사용자가 데이터를 공유할 수 있다. 데이터를 패킷 조각으로 나누어 전송한다.
가상 회선 방식: 연결형 통신에서 주로 사용되는 방식이며 출발지와 목적지의 전송 경로를 미리 연결하여 논리적으로 고정한 후에 통신하는 방식데이터그램 방식: 비연결형 통신에서 주로 사용되는 방식이며 사전에 접속 절차를 수행하지 않고 헤더에 출발지에서 목적지까지의 경로 지정을 위한 충분한 정보를 붙여서 개별적으로 전달하는 방식
네트워크의 구성 형태
1. 성형2. 버스형3. 링형(루프형)4. 트리형(계층형)5. Mesh형(망형)
프로토콜
: 네트워크 상에 있는 디바이스 사이에서 정확한 데이터의 전송과 수신을 하기 위한 일련의 규칙들(Set of Rules)이다.
프로토콜의 구성 요소
1. 구문(Syntax)
2. 의미(Semantics)
3. 타이밍(Timing)
오류 제어- 후진 오류 수정 방식: 데이터의 재전송을 요구하는 방식으로, ARQ 방식이 대표적이다.- 전진 오류 수정 방식: 수신 측에서 오류의 검출과 교정이 가능한 방식으로, 해밍 코드가 대표적이다.
오류 검출 방식
1. 패리티 검사: 한 블록의 데이터 끝에 1비트를 추가하여 정보 전달 과정에서 오류 발생 여부를 검사2. 블록 합 검사: 이차원 패리티 검사, 가로와 세로로 두 번 관찰한다.3. CRC(Cyclic Redundancy Check): 전체 블록을 검사하며, 이진 나눗셈을 기반으로 한다.4. 해밍 코드 방식: 자기 정정 부호의 하나로 데이터 전송시 1비트의 오류를 정정할 수 있는 오류 정정 부호 방식이다. 전진 오류 수정 방식이라고도 한다.
TCP/IP 4계층
4 애플리케이션 계층3 트랜스포트 계층2 인터넷 계층1 네트워크 인터페이스 계층
인터넷: 서로 다른 컴퓨터 간에 신호 교환을 위해 TCP/IP라는 전송 규약을 사용하여 연결된 모든 네트워크의 집합체이다.
IP 주소: 인터넷에 연결된 컴퓨터가 실제로 인식하는 고유의 숫자로 표현된 주소
클래스별 주소 범위
A 0 ~ 127
B 128 ~ 191
C 192 ~ 223
도메인 이름: IP 주소는 숫자로 구성되어 있어 사용이 어려우므로 사용자가 알기 쉽게 문자를 이용해 표기하는 주소 방식
DNS: 도메인 주소를 숫자로 된 IP 주소로 변환시켜 주는 작업
URL(Uniform ResourceLocator): 인터넷에 있는 정보의 위치를 표기하기 위한 방법으로 웹에서 사용되는 표준 방법
서브 네트워크
: TCP/IP에서는 IP 주소를 효과적으로 사용하기 위해 서브 네트워크 방식을 사용한다.
추상화(Abstraction): 속성들의 일부분만을 가지고 주어진 작업이나 객체들을 필요한 정도로 묘사할 수 있는 방법을 지원하는 것.
추상화의 종류
1. 과정 추상화: 자세한 단계를 고려하지 않고, 상위 수준에서 수행 흐름만 먼저 설계한 것
2. 자료 추상화: 문자열, 수, 탐색 트리와 같은 계산의 주체가 되는 자료의 특성을 추상화한 것
3. 제어 추상화: 실행 순서의 수정을 위한 제어의 특성을 추상화한 것
언어의 변수명 표기법
1. 헝가리안 표기법(Hungarian Notation): 프로그래밍에서 변수나 함수의 이름 앞에 자료 표현(데이터 타입)을 명시하는 표기법
2. 카멜 표기법(Camel Case): 낙타의 등과 같은 모양을 빗댄 말로, 앞 단어를 제외한 첫 글자를 대문자로 표기하는 표기법
3. 파스칼 표기법(Pascal Case): 모든 단어의 앞 글자를 대문자로 시작하는 표기법
4. 스네이크 표기법(Snake Case): 모든 단어를 소문자로 표기하는 방법
구조적 프로그래밍: GOTO문을 가능한 사용하지 않고 프로그래밍하는 것
구조적 프로그래밍의 논리 구조
1. 순차 구조: 하나의 작업이 수행되고 순차적으로 다음 작업 진행
2. 선택 구조: 조건에 따라 하나의 작업을 선택해서 진행
3. 반복 구조: 조건에 따라 특정 작업 반복 처리
객체지향: 객체지향 기법에서 시스템 분석은 문제 영역에서 객체를 정의하고 정의된 객체들 사이의 상호 작용을 분석하는 것
객체지향의 기본 개념
1. 속성(Attribute): 객체가 가지고 있는 특성, 현재 상태(객체의 상태)를 의미
2. 메소드(Method): 객체가 어떻게 동작하는지를 규정하고 속성의 값을 변경시킴
3. 클래스(Class): 공통의 관계성, 동일한 의미를 가지는 객체들의 집합. 동일한 타입의 객체들의 메소드와 변수들을 정의하는 템플릿(Templete)
4. 객체(Object): 데이터와 그것을 사용하는 연산을 하나의 모듈로 구성한 것. 개별 자료구조와 프로세스들로 구성
5. 메시지(Message): 한 객체가 다른 객체의 모듈을 부르는 과정으로, 외부에서 하나의 객체에 보내지는 행위의 요구
6. 캡슐화(Encapsulation): 객체를 정의할 때 서로 관련성이 많은 데이터들과 이와 연관된 함수들과 같은 정보처리에 필요한 기능을 하나로 묶는 것. 사용자에게 세부 구현 사항을 감추고 필요한 사항들만 보이게 하는 방법
7. 정보 은닉(Information Hiding): 객체의 상세한 내용을 객체 외부에 철저히 숨기고 단순히 메시지만으로 객체와 상호 작용
8. 상속성(Inheritance, 다중 상속): 새로운 클래스를 정의할 때 처음부터 모든 것을 다 정의하지 않고 기존의 클래스들의 속성을 상속받아 추가로 필요한 속성만 추가하는 방법
9. 다형성(Polymorphism): 같은 메시지에 대해 각 클래스가 가지고 있는 고유한 방법으로 응답할 수 있는 능력을 의미. 어떤 객체의 속성이나 기능이 맥락에 따라 다른 역할을 수행할 수 있는 객체 지향의 특성. 오버로딩(Overloading)과 오버라이딩(Overriding)이 여기에 포함
02. C 언어
C 언어: Bell 연구소에서 UNIX 운영체제에 사용하기 위한 시스템 프로그래밍 언어로 1970년대 초 데니스 리치(Dennis Ritchie)에 의해 개발
C 언어의 필수 요소
1. 변수: 기억장치의 한 장소를 추상화한 것으로 실행 도중 저장된 값의 변경이 가능
2. 상수: 프로그램 수행 시간 동안 하나의 값이 결정되어 있는 자료 객체. 식별자로 주어지며 프로그램 수행 중에 값이 변하지 않음
3. 배정문(V = E;): 어떤 값(E)을 변수(V)에 대입하는 실행문
연산자 정리
단항 연산자 ++와 --
: ++와 --가 앞에 있는 경우 1증가/감소한 뒤 변수의 값을 사용한다.
: ++와 --가 뒤에 있는 경우 현재 변수의 값을 사용한 뒤 1증가/감소 한다.
조건 연산자: 피연산자가 3개의 항으로 구성(삼항 연산)
형식: 조건 ? 표현1 : 표현 2;
👉🏻 조건이 참이면 표현1 수행, 거짓이면 표현2 수행
C 언어 비트연산자
>>: 우측으로 지정값 만큼 이동. 나누기(/)
<<: 좌측으로 지정값 만큼 이동. 곱하기(*)
ex) r = a >> 3;
r= a / 2^3
ex) r = a << 2;
r = a * 2^2
sizeof 연산자
char: 1byte
short: 2byte
int: 4byte
float: 4byte
double: 8byte
long: 4byte
void: 0byte
float * double = double
ex) 13.2 * 84.4 = double
정적 변수와 자동 변수
반복문 내에 ex) static int count; 와 같이 초기화 구문이 있더라도 정적 변수는 초기화 구문이 수행되지 않는다.
매개 변수 전달 기법
값 호출(Call by value): 메소드를 호출할 때 자료형의 값을 인자로 전달하는 방식
참조 호출(Call by reference): 참조 자료형을 메소드 호출할 때 실인자로 사용할 경우
int f(int *i, int j) {
*i += 5;
return(2 * *i + ++j)
}
int main() {
int x = 10, y = 20;
printf("%d ", f(&x, y));
printf("%d %d\n", x, y);
return 0;
}
// 51 15 20
(값 호출) x 의 값은 *로 함수 호출 당시 바뀐 값이 그대로 들어가 있고,
(참조 호출) y 의 값은 main 안의 값이 출력된다.
삽입 정렬
: 이미 정렬된 레코드에 정렬되어 있지 않은 레코드를 새로 삽입시켜 다시 정렬하는 기법
구조체(Struct)
: 서로 다른 자료형을 갖는 자료들의 모임을 하나의 자료형으로 정의한다.
공용체(Union)
: 멤버 중에서 자료 크기(byte 수)가 가장 큰 멤버에 맞는 기억 공간이 할당된다. = 공용체 내에 가장 큰 자료형을 갖는 변수 크기에 맞추어 할당한다.
typedef
: 기존 자료형에 별명, 새로운 이름을 정의할 때 사용한다.
03. Java 언어
자바는 오크(Oak)라는 언어로부터 탄생했다.
자바의 특징
1. 단순하다.
2. 객체 지향적이다.
3. 분산 환경에 적합하다.
4. 인터프리터에 의해 실행된다.
5. 견고하다.
6. 안전하다.
7. 구조 중립적이다.
8. 이식성이 높다.
9. 높은 성능을 가진다.
10. 다중 스레드를 제공한다.
11. 동적이다.
this 예약어
: 생성자나 메소드의 매개 변수가 멤버 변수와 같은 이름을 사용하는 경우에 사용한다.
ex) Sub() { }; Sub(char x) { this(); } 코드가 있다면, Sub() 수행 이 후 Sub(char x) 를 수행한다.
float 와 double
자바에서 float 형은 숫자 뒤에 f 가 붙고 double 형은 붙지 않는다.
메소드 오버로딩(Overloading, 중복)
: 하나의 클래스에 이름은 같으나 매개 변수의 자료형과 개수가 서로 다른 다수의 메소드를 사용하는 것. 중복된 이름의 메소드가 호출되면 매개 변수의 형과 인자의 개수를 비교하여 적합한 메소드를 실행한다. = 이름은 같지만 인수를 다르게
메소드 오버라이딩(Overriding, 재정의)
: 상위 클래스에서 정의한 메소드와 이름, 매개 변수의 자료형 및 개수가 같으나 수행문이 다른 메소드를 하위 클래스에서 정의하는 것. = 수행문이 다른 메소드
예외 처리
: 프로그램이 예기치못한 예외의 발생에 대하여 미리 대처하는 코드를 작성하는 것으로, 실행 중인 프로그램의 비정상적인 종료를 막고 상태를 정상 상태로 유지하는 것이 목적이다.
try { // 예외가 발생할 가능성이 있는 코드
}
catch() { // 발생한 예외를 처리하는 코드
}
finally() { // 어떤 예외 발생 유무와 무관하게 무조건 실행
}
A / B 에서 B가 0이면 산술적 오류가 발생한다.
04. Python
Python은 네덜란드의 귀도 반 로섬(Guido van Rossum)이 개발하였다. 인터프리터(Interpreter) 언어이다. 웹 서버, 과학 연산, 사물인터넷(IoT), AI, Game 등의 프로그램 개발에 사용할 수 있다.
멤버십 연산자
in, not in : 좌측 Operand가 우측에 속해있는지 아닌지를 체크한다. (True or False)
Identity 연산자
is, is not : 양쪽 Operend가 동일한 Object를 가리키는지 아닌지를 체크한다. (True or False)
함수
: def 를 사용하여 함수를 정의. 함수 끝에 콜론(:)이 포함되어야 한다는 점을 유의한다.
리스트
.append(50): 리스트 맨 뒤에 50 추가
a.extend(b): 리스트 a 뒤에 리스트 b 합치기
.remove(100): 인덱스 100 삭제
.pop(0): 0번째 인덱스 삭제
.pop(): 마지막 인덱스 삭제
.sort(reverse = True): 리스트의 모든 원소의 순서를 역순으로 정렬
문자열 슬라이싱
len(str1): 띄어쓰기 포함 문자열 길이 출력
str1[10]: 인덱스 10번째 문자 반환(0부터 시작)
str1[-3]: 인덱스 오른쪽에서부터 역순으로 카운팅한 문자 반환(-1부터 시작)
str1[:]: 전체 문자열 반환
str1[0:8]: 인덱스 0부터 7까지의 문자열 반환
str1[9:len(str1)]: 인덱스 9부터 문자열 끝까지 출력
Lambda 함수
: list 또는 반복적으로 수행하는 기능을 별도의 함수 선언 없이 간략하게 사용할 수 있다.
# 함수
def func(x):
return x+1
# Lambda 함수
func = lambda x : x+1
05. 웹 저작 언어
HTML
: 웹 브라우저상에 정보를 표시하기 위한 마크업 심볼 또는 파일 내에 집어넣은 코드들의 집합이다.
JavaScript
: Live Script와 자바 언어의 기능을 결합하여 만든 언어이다. HTML의 텍스트 위주의 문제점을 해결하고, 동적인 데이터를 처리할 수 있다.
ASP(Active Server Page)
: 서버 사이드 스크립트이다. 웹 브라우저에서 요청하면 웹 서버에서 해석하여 응답한다.
JSP(Java Server Page)
: 서블릿(Servlet) 기술을 확장시켜 웹 환경에서 사용할 수 있도록 만든 스크립트 언어이다. 웹 브라우저에서 요청하면 웹 서버에서 해석하여 응답해 주며, 자바의 대부분의 기능을 모두 사용할 수 있다.
PHP(Hypertext Preprocessor)
: HTML에 포함되어 동작하는 스크립팅 언어이며, 웹 브라우저에서 요청하면 웹 서버에서 해석하여 응답해 준다. C/Java/Perl 언어 등에서 많은 문장 형식을 준용하고 있어 동적인 웹 문서를 빠르고 쉽게 작성할 수 있다.
Ajax(Asynchronous JavaScript and XML)
: 브라우저와 서버 간의 비동기 통신 채널로 자바스크립트, XML의 집합과 같은 기술들이 포함된다. 대화식 웹 애플리케이션을 개발하기 위해 사용되며 실행을 위한 플랫폼으로 사용되는 기술들을 지원하는 웹 브라우저를 이용한다.
: 서버 처리를 기다리지 않고 비동기 요청이 가능하며 대표적인 Ajax 프레임워크로는 Prototype, JQuery, Google Web Toolkit이 있다.
WSDL(Web Services Description Language)
: 웹 서비스와 관련된 서식이나 프로토콜 등을 표준적인 방법으로 기술하고 게시하기 위한 언어이다. XML로 작성된다.