전송에 필요한 두 장치 간의 실제 접속과 절단 등
기계적, 전기적, 기능적, 절차적 특성에 대한 규칙을 정의한다.
단위(PDU)는 '비트'를 사용한다.
물데네전세표응
명칭 | 특징 | 단위(PDU) | 프로토콜 | 주요 장비 |
---|---|---|---|---|
Layer1: 물리 계층(Physical Layer) | 물리적인 장치의 전기적, 전자적 연결에대한 명세로 디지털 데이터를 아날로적인 전기적 신호로 변환하여 물리적 전송을 가능케 함, 주소 개념이 없으므로 물리적 연결로 신호를 주고 받음 | 비트(Bit) | x.21, RS-232 | 허브(Hub), 리피터(Repeater), 네트워크 카드(NIC : Network Interface Card) |
Layer2: 데이터 링크 계층(Data Link Layer) | 네트워크 카드의 MAC(Media Access Control) 주소를 통해 목적지를 찾아간다, 신뢰성 있는 전송을 위해 흐름제어(Flow Control), 오류제어(Error Control), 회전제어(Line Control)을 수행한다. | 프레임(Frame) | HDLC, X.25, Ethernet, TokenRing, DFFI, FrameRelay | 브리지(Bridge), L2 Switch |
Layer3: 네트워크 계층(Network Layer) | 종단간 전송을 위한 경로 설정을 담당하며 호스트로 도달하기 위한 최적의 경로를 라우팅 알고리즘을 통해 선택하고 제어한다, 종단간 전송을 위한 주소로 IP주소를 사용 | 패킷(Packet) | IP, ARP, ICMP, IGMP, RIP, RIP v2, OSPF, IGRP, EIGRP, BGP | 라우터(Router), L3 Switch |
Layer4: 전송 계층(Transport Layer) | 종단간 신뢰성 있는 데이터 전송을 담당하며, 종단(Host)의 구체적인 목적지(Process)까지 데이터가 도달할 수 있도록 한다, Process를 특정하기 위한 주소로 Port Number를 이용, 신뢰성 있는 데이터 전송을 위해 분할과 재조합, 연결제어, 흐름제어, 오류제어, 혼합제어를 수행한다. | 세그먼트(Segment) | TCP, UDP | L4 Switch |
Layer5: 세션 계층(Session Layer) | 응용 프로그램 간의 논리적 연결(세션) 및 제어를 담당한다. | 데이터(Data) 또는 메세지(Message) | 없음 | 없음 |
Layer6: 표현 계층(Presentation Layer) | 데이터 표현방식, 상이한 부호체계 간의 변화에 대해 규정, 인코딩/디코딩, 압축/해제, 암복호화 등의 역할을 수행함 | 데이터(Data) | 없음 | 업음 |
Layer7: 응용 계층(Application Layer) | 우리가 사용하는 UI를 제공하는 프로그램을 칭함 | 데이터(Data) | TELNET, FTP, SMTP, HTTP | 없음 |
시간 : 20개월
식 : 30000/5/300
가 : 처리량
나 : 응답시간
다 : 처리시간
성능 테스트(Performance Test)
시스템에서 수용 가능한 처리량을 판별하기 위한 테스트
성능 지표
모듈의 기능적 독립성은 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미하는 것으로,
모듈이 하나의 기능만을 수행하고 다른 모듈과의 과도한 상호작용을 배제함으로써 이루어진다.
모듈의 독립성을 높이기 위해서는 ( 가 )는 약하게, ( 나 )는 강하게 만들어야 한다.
가 : 결합도
나 : 응집도
결합도, Coupling
자료 결합도 < 스탬프 결합도 < 제어 결합도 < 외부 결합도 < 공통 결합도 < 내용 결합도
자 -> 스 -> 제 -> 외 -> 공 -> 내
응집도, Cohension
우연적 응집도 < 논리적 응집도 < 시간적 응집도 < 절차적 응집도 < 교환적 응집도 < 순차적 응집도 < 기능적 응집도
=> 우논 시절 교순도 == 우는 시절 교수도
응집도 오름차순
#include
void align(int a[ ]) {
int temp;
for (int i = 0; i < 4; i++) {
for (int j=0; j < 4 - i; j++) {
if (a[j]> a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
main( ) {
int a[ ] = { 85, 75, 50, 100, 95 };
align(a);
for (int i = 0; i < 5; i++) printf("%d ", a[i]);
}
50 75 85 95 100
버블 정렬을 통한 오름차순 정렬
#include
main( ) {
int c = 1;
switch (3) {
case 1: c += 3;
case 2: c++;
case 3: c = 0;
case 4: c += 3;
case 5: c -= 10;
default: c--;
}
printf("%d", c);
}
switch(3) 이므로 case 3부터 시작하여 case 3을 만족하지만 해당 줄에는 break;가 없으므로
아래 모든 코드를 그래도 수행하게 됩니다, 물론 default 까지
public class Test {
static int[ ] arr( ) {
int a[ ] = new int[4];
int b = a.length;
for(int i = 0; i < b; i++)
a[i] = i;
return a;
}
public static void main(String[ ] args) {
int a[ ] = arr( );
for(int i = 0; i < a.length; i++)
System.out.print(a[i] + " ");
}
정적 메소드인 arr에서 배열 a를 0, 1, 2, 3로 선언하고 리턴해주기에
이를 출력하는 메인의 로직은 위와 같이 출력됩니다.
1) SELECT DEPT FROM EMPLOYEE;
2) SELECT DISTINCT DEPT FROM EPLOYEE;
3) SELECT COUNT(DISTINCT DEPT) FROM EMPLOYEE WHERE DEPT='전산과';
1 : 200
2 : 3
3 : 1
1 : 학생의 총 수 200명을 출력
2 : 1번과 똑같지만 중복값을 제거하므로 학과를 각 하나씩만 출력하므로 3개
3 : 전체 중복 제거의 학과를 수를 센 것이므로 1개