1.3 알고리즘과 코딩
컴퓨터 분야를 공부하다보면 알고리즘이라는 말을 자주 듣게 됩니다. 그런데 알고리즘이 도대체 어디에 쓰이고 있을까요? 사실 눈에 잘 띄지 않아 멀게만 느껴집니다. 하지만 우리는 알고리즘의 혜택을 많이 보고 있는데 대표적인 알고리즘이 압축 알고리즘입니다.
휴대폰이나 카메라로 사진을 찍으면 JPG라는 확장자로 저장되는데 이 JPG(JPEG)가 압축 알고리즘을 구현한 포맷입니다. 사진을 그대로 저장하면 용량이 너무 커서 저장 공간이 금방 차버리겠지만 압축을 해서 저장하면 많은 사진을 보관할 수 있습니다. 휴대폰이나 카메라를 가진 사람들은 모두가 이용하는 알고리즘이죠.
압축 알고리즘을 좀 더 간단하게 알아보겠습니다. 예를 들어 "aaaaabbbccccccddddddddd"라는 문자열이 있는데 문자열을 잘 보면 일정한 패턴이 있습니다. 같은 문자가 여러 번 반복되죠.
이걸 다음과 같이 문자 뒤에 반복되는 횟수를 적어주면 원래 데이터보다 길이가 짧아져서 저장 공간을 절약할 수 있습니다. 즉, 압축입니다.
23글자가 8글자로 줄었습니다. "aaaaabbbccccccddddddddd"를 압축할 때는 반복되는 문자의 횟수를 적어주고, "a5b3c6d9"의 압축을 해제할 때는 숫자만큼 문자를 반복해주자고 약속하면 됩니다. 생각보다 간단하죠? 컴퓨터에서 쓰이는 압축 알고리즘도 이러한 방법을 사용하고 있습니다(실제로는 좀 더 다양한 상황에 대응하고 압축 효율을 높이기 위해 훨씬 복잡한 알고리즘이 사용됩니다).
이처럼 문제에서 일정한 패턴을 발견하고, 패턴을 토대로 문제를 해결하는 절차가 알고리즘입니다. 그리고 이 알고리즘을 코드로 표현하는 행동을 코딩이라 합니다(알고리즘을 컴퓨터의 명령으로 작성하는 것을 프로그래밍이라고 하며 코딩과 같은 개념입니다).
어떨 때는 프로그래밍이라고 했다가 어떨 때는 코딩이라고 하고 좀 헷갈리죠? 사실 둘 다 같은 작업을 지칭합니다. 프로그래밍은 컴퓨터 명령어로 표현한다는 뜻이라 컴퓨터 쪽에 가깝고, 코딩은 C 언어 등의 프로그래밍 언어로 코드를 작성한다는 뜻이라 언어 쪽에 가까운 표현입니다.