다중화(Multiplexing) 기술 정리


1. 다중화(Multiplexing)의 개념

  • 단일 링크(물리 경로)에 여러 채널(논리 경로)의 신호를 동시에 전송하는 기술을 다중화라고 한다.
  • 여러 장치의 데이터를 하나의 링크로 묶어 전송하고, 수신 측에서는 다시 분리하여 각각의 장치로 전달한다.
  • 다중화기(Multiplexer, MUX)와 다중복구기(Demultiplexer, DEMUX)를 사용한다.
구분 설명
링크(Link) 물리적 경로(Physical Path)
채널(Channel) 논리적 경로(Logical Path), 링크 내에 여러 개 존재

2. 다중화 방식의 종류

방식 원리 주요 활용
FDM
(Frequency Division Multiplexing)
주파수 대역을 나누어 각 신호에 할당
아날로그 변조(AM/FM 등)로 각기 다른 반송파 사용
라디오/TV 방송, 아날로그 전화, CATV
WDM
(Wavelength Division Multiplexing)
광통신에서 파장(λ)별로 신호를 나눔
빛의 색(파장)별로 다중화
광섬유 통신, DWDM(고밀도 WDM)
TDM
(Time Division Multiplexing)
시간을 타임 슬롯으로 분할, 각 신호에 시간 구간 할당 디지털 전화, 데이터 통신
CDM
(Code Division Multiplexing)
코드(확산코드)로 신호를 구분, 동일 주파수·시간 사용 CDMA 이동통신

3. FDM (주파수 분할 다중화)

  • 각 신호를 서로 다른 반송파 주파수로 변조해 주파수 대역을 분할한다.
  • 수신 측에서는 필터와 복조기로 각 신호를 분리한다.
  • 채널 간 간섭 방지를 위해 guard band(보호대역)를 둔다.
  • 아날로그 통신에서 주로 사용하며, 라디오/TV/아날로그 전화 등이 대표적이다.
장점 단점
아날로그 변조만으로 다중화 가능
실시간 전송에 적합
채널 수 증가 시 guard band로 인한 대역폭 낭비
터미널 수 동적 변화 불가

FDM 계층 구조(Analog Hierarchy) 예시

  • 12채널: Group
  • 60채널(12×5): Supergroup
  • 600채널(60×10): Mastergroup
  • 3600채널(600×6): Jumbogroup

4. WDM (파장 분할 다중화)

  • 광통신에서 사용, 빛의 파장(색)을 다르게 하여 여러 신호를 동시에 전송한다.
  • 프리즘처럼 여러 색(파장)의 빛을 합쳐 전송, 수신 측에서 다시 분리한다.
  • FDM과 원리는 같으나, 주파수 대신 파장(λ) 단위를 사용한다.
활용 특징
광섬유, 장거리·대용량 전송 파장별로 수십~수백 채널 동시 전송 가능

5. TDM (시분할 다중화)

  • 시간을 타임 슬롯으로 쪼개 각 신호에 고유 시간 구간을 할당한다.
  • 동기식(Synchronous)과 비동기식(Asynchronous, 통계적 TDM)으로 나뉜다.
구분 원리 특징
동기식 TDM 각 채널에 타임 슬롯을 고정 할당
프레임 단위로 주기적 전송
비어있는 슬롯도 항상 할당
효율↓, 구조 단순
비동기식 TDM
(통계적 TDM)
데이터가 있는 채널에만 타임 슬롯 할당
주소정보(오버헤드) 필요
타임 슬롯 낭비 없음
효율↑, 제어 복잡
  • 동기식 TDM은 각 프레임마다 모든 채널에 타임 슬롯을 고정 할당한다.
  • 비동기식(통계적) TDM은 데이터가 있는 채널에만 타임 슬롯을 동적으로 할당하며, 각 슬롯에 채널 주소를 포함한다.
  • 타임 슬롯 간 간섭 방지를 위해 가드 인터벌(guard interval)을 둘 수 있다.

TDM 계층 구조(Digital Hierarchy) 예시

  • DS-0: 1채널(64kbps, PCM 음성 1회선)
  • DS-1: 24채널(1.544Mbps, T-1 라인)
  • DS-2, DS-3, ... : 상위 묶음
  • 유럽(E-1): 32채널(2.048Mbps)

6. SONET/SDH (광통신 동기식 다중화 표준)

  • SONET(Synchronous Optical Network): 미국 ANSI 표준
  • SDH(Synchronous Digital Hierarchy): 국제 ITU-T 표준
  • 광전송망에서 동기식 다중화, 하나의 클럭으로 전체 동기화
  • 신호 계층: STS-1(51.84Mbps), STS-3, STS-12, ... (OC-1, OC-3, OC-12 등으로도 표기)
  • 프레임 구조: 9행 × 90옥텟 = 810옥텟(바이트)

7. 역다중화기와 집중화기

장치 원리/설명 활용
역다중화기
(Inverse Multiplexer)
고속 회선을 여러 저속 회선으로 분할
다중화의 반대 개념
과거 전화망 등에서 사용
집중화기
(Concentrator)
여러 단말이 적은 수의 회선을 공유
한 번에 하나만 회선을 독점
초기 단말기 접속, 저속장치 집약

정리

다중화는 하나의 링크에 여러 신호를 효율적으로 실어보내기 위한 핵심 기술이다.
FDM, WDM, TDM 등 다양한 방식이 있고, 각각의 장단점과 활용 분야가 다르다.
현대 통신에서는 SONET/SDH와 같은 동기식 광다중화가 고속·대용량 전송의 표준으로 자리잡았으며, 과거에는 역다중화기와 집중화기도 널리 사용되었다.
각 다중화 방식의 원리와 구조, 실제 적용 사례를 정확히 이해하는 것이 중요하다.
728x90

'데이터통신' 카테고리의 다른 글

데이터링크 제어  (0) 2025.05.08
회선구성과 교환방식  (0) 2025.05.05
신호 변환과 변조  (0) 2025.04.29
전송방식과 전송매체  (0) 2025.04.26
OSI 참조모델  (0) 2025.04.23

printf() 함수와 서식문자, 변수와 메모리의 이해


C언어에서 가장 많이 사용하는 출력 함수가 printf다. 이번 시간에는 printf 함수의 다양한 서식문자(%d, %g, %c 등)와 변수와 메모리의 관계, 그리고 실제로 데이터를 어떻게 저장하고 출력하는지 실습 예제와 함께 자세히 알아본다.

1. printf() 함수와 서식문자

  • printf 함수는 화면에 문자열, 정수, 실수, 문자 등 다양한 형태의 데이터를 출력한다.
  • 서식문자는 %로 시작하며, 출력할 데이터의 타입에 따라 다르게 사용한다.
  • 문자열은 큰따옴표(" ")로, 문자 하나는 홑따옴표(' ')로 감싼다.
  • \n은 줄바꿈(new line), \t는 탭(tab) 등 특수문자도 함께 쓸 수 있다.

2. 주요 서식문자와 사용 예시

서식문자 의미 예시 출력 결과
%d 10진수 정수 printf("%d", 100); 100
%g, %f 실수(부동소수점) printf("%g", 5.5); 5.5
%c 문자 1개 printf("%c", 65); A (아스키코드 65)
%s 문자열 printf("%s", "Hello"); Hello
%% % 기호 출력 printf("100%%"); 100%
  • 정수는 %d, 실수는 %g 또는 %f, 문자는 %c, 문자열은 %s를 사용한다.
  • 실수형 데이터를 %d로 출력하면 0이 나오거나 이상한 값이 나올 수 있으니, 반드시 데이터형에 맞는 서식문자를 사용해야 한다.

3. 변수와 메모리의 관계

  • 변수는 데이터를 저장하는 메모리 공간이다. 선언할 때 데이터형을 함께 지정한다.
  • int a; // 정수형 변수 a 선언 (메모리 공간만 확보)
  • a = 10; // 변수 a에 10을 저장 (2진수로 변환되어 메모리에 저장)
  • int a = 10; // 선언과 동시에 초기화
  • 변수에 값을 넣을 때는 = (대입 연산자)를 사용한다. 오른쪽 값을 왼쪽 변수에 저장한다.
  • 하나의 변수는 한 번만 선언해야 하며, 같은 이름의 변수를 중복 선언하면 오류가 발생한다.

4. 데이터의 연산과 출력

  • printf 함수의 인자(괄호 안)는 연산이 가능하다. 예를 들어, printf("%d", a+1);처럼 변수의 값을 연산해서 출력할 수 있다.
  • 문자열 내의 +, =, * 등은 연산이 아니라 문자 그대로 출력된다.
  • 실제 연산은 괄호 밖에서 이루어지고, 결과만 출력된다.

5. 아스키코드와 문자 출력

  • 아스키코드는 문자와 숫자를 컴퓨터가 인식할 수 있는 2진수 코드로 변환한 표준이다.
  • 예를 들어, 65를 %c로 출력하면 문자 A가 나온다.
  • 아스키코드는 문자, 숫자, 특수문자, 제어문자 등 다양한 기호를 7비트(8비트 포함)로 표현한다.
  • 패리티 비트는 데이터 전송 시 오류 검출을 위해 1의 개수를 짝수(또는 홀수)로 맞추는 방식이다.

6. 변수 선언, 대입, 메모리 저장 예시

코드 설명
int a; 정수형 변수 a 선언(메모리 공간만 확보)
a = 10; 변수 a에 10을 저장(2진수 변환 후 저장)
int b = 50; 선언과 동시에 50 저장
printf("%d", a); 변수 a의 값을 정수로 출력
printf("%d", b+1); 변수 b의 값에 1을 더해 출력(연산 가능)

7. 주요 용어 정리

  • 서식문자(conversion specifier): 출력 데이터의 형식을 지정하는 기호(%d, %f, %c 등)
  • 변수(variable): 데이터를 저장하는 메모리 공간
  • 데이터형(data type): 변수에 저장되는 값의 종류(int, double, char 등)
  • 아스키코드(ASCII): 문자와 숫자를 2진수로 변환하는 표준 코드
  • 패리티 비트(parity bit): 데이터 전송 오류 검출용 비트

정리

printf 함수에서 서식문자를 올바르게 사용하는 것이 C언어 출력의 핵심이다. 변수는 메모리 공간과 데이터형을 반드시 선언해야 하며, 데이터의 타입에 따라 서식문자를 맞춰야 원하는 결과를 얻을 수 있다. 아스키코드와 메모리 저장 방식, 연산과 출력의 차이까지 이해하면 C언어의 기초 로직과 데이터 흐름을 명확히 파악할 수 있다.
728x90

'C++' 카테고리의 다른 글

[C++] scanf() 함수  (0) 2025.05.07
C++의 프로그램 구조  (0) 2025.05.01

 프로그램 구조


컴퓨터 프로그래밍의 시작은 프로그램의 구조와 실행 원리를 이해하는 데서 출발한다. 이 글에서는 C언어의 기본 프로그램 구조와  변수, 출력 함수의 핵심 개념을 실제 코드 예시와 함께 정리한다.

1. C언어 기본 프로그램 구조 이해

  • C언어 프로그램의 첫 줄은 #include <stdio.h>로 시작한다.
    • #은 전처리 지시자(preprocessor)로, 컴파일 전에 필요한 파일을 미리 포함시키는 역할을 한다.
    • stdio.h는 표준 입출력 함수들이 들어있는 헤더파일이다. printf, scanf 등 사용 시 반드시 포함해야 한다.
  • main 함수는 모든 C 프로그램의 시작점이자 중심이다.
    • 프로그램에는 main 함수가 하나만 존재해야 하며, 프로그램의 실행 흐름을 담당한다.
    • main 함수의 시작과 끝은 중괄호({ })로 감싼다. 중괄호는 반드시 쌍으로 사용해야 한다.
  • printf 함수는 화면에 원하는 문자열이나 값을 출력한다.
    • 출력할 문자열은 쌍따옴표(" ")로 감싼다.
    • 문자 하나를 출력할 때는 홑따옴표(' ')를 사용한다.
    • 문장 끝에는 반드시 세미콜론(;)을 붙여야 한다.

2. Dev C++ 프로그램 구조

  • Dev C++은 가볍고 강력한 무료 C언어 개발 환경이다.
  • 프로그램 설치 후, 새 소스파일을 만들고 아래와 같은 기본 코드를 입력한다.
#include <stdio.h>

int main() {
    printf("Hello\nWorld!\n");
    return 0;
}
  • 실행 결과는 HelloWorld!가 줄을 바꿔서 출력된다.
  • \n은 줄바꿈(new line), \t는 탭(tab)으로 출력 위치를 조정한다.

3. 변수와 데이터형, 서식문자

  • 변수는 데이터를 저장하는 메모리 공간이며, 데이터형을 지정해야 한다.
데이터형 설명 서식문자(printf) 예시
int 정수형 (4바이트) %d int grade = 3;
char 문자형 (1바이트) %c char letter = 'Y';
double 실수형 (8바이트) %f, %5.2f double cost = 34.567;
  • printf에서 %d, %c, %f, %5.2f 등 서식문자를 사용해 변수의 값을 원하는 형태로 출력할 수 있다.

4. 주석과 들여쓰기

  • 주석은 코드에 대한 설명을 달 때 사용하며, 프로그램 실행에는 영향이 없다.
  • // : 한 줄 주석, /* ... */ : 여러 줄 주석
  • 코드의 가독성을 높이기 위해 들여쓰기를 지키는 것을 지향한다.

5. 조건문(if, else)과 중괄호 사용

  • 조건문 if는 특정 조건이 참일 때만 코드를 실행한다.
  • if (num == 10) { ... } 처럼 ==는 '같다'를 의미하는 비교 연산자이다.
  • else if, else를 활용해 다양한 분기 처리가 가능하다.
  • 실행할 문장이 2개 이상이면 반드시 중괄호({ })로 묶어야 한다.

6. 용어 정리

  • 헤더파일(header file): 표준 함수와 선언이 들어있는 파일, #include로 포함시킨다.
  • main 함수: 프로그램의 시작점이자 중심, 반드시 하나만 존재해야 한다.
  • printf: 화면에 문자열이나 값을 출력하는 함수
  • 변수(variable): 데이터를 저장하는 메모리 공간(이름과 데이터형 필요)
  • 주석(comment): 코드 설명, // 또는 /* ... */로 작성
  • 세미콜론(;): 명령문 끝, 문장 종료 표시
  • 중괄호({ }): 코드 블록의 시작과 끝

정리

C언어의 기본 프로그램 구조와 Dev C++ 실습을 통해, 컴퓨터가 코드를 해석하고 실행하는 기본 원리, 변수와 데이터형, 출력 함수, 조건문, 주석 등 핵심 개념을 익힐 수 있다. 코드를 직접 입력하고 실행해보는 반복 연습이 프로그래밍 실력 향상의 지름길이며, 기본 문법과 구조를 자연스럽게 익혀두는 것이 이후의 모든 프로그래밍 학습의 토대가 된다.
728x90

'C++' 카테고리의 다른 글

[C++] scanf() 함수  (0) 2025.05.07
[C++] printf() 함수  (0) 2025.05.02