코드
코드(code)란 '부호'라고도 불리며 법체계(a system of laws)라는 의미의 라틴어 ‘코덱스(codex)’에서 비롯되었다. 데이터를 사용 목적에 따라서 식별하고 분류, 배열하기 위하여 사용되는 숫자, 문자 또는 기호를 뜻한다. 코드는 대량 다중의 것을 구별하여 동질의 그룹으로 분류하고 순번으로 나열하며, 특정의 것만 선별, 수량 파악, 간결한 표현 등을 하는 데 필요하다. 상황에 따라 사용할 수 있는 코드가 다르며 넒은 의미로 해석할 수 있다. 예를 들어 음악계열에서의 코드는 음의 배열(화음)을 나타내는 것이고, 통신에 있어 암호의 역할을 하며, 실생활에서는 물건의 제품 정보를 스캔하는 바코드 또한 코드라 할 수 있다.[1][2][3]
목차
개요
컴퓨터 공학에서의 코드는 컴퓨터가 해야 할 일을 알려주는 명령어들의 집합이다. 명령들은 컴퓨터가 이해할 수 있는 언어로 작성이 되어야 한다. 컴퓨터가 이해할 수 있도록 코드를 작성하는 것을 코딩(coding)이라고 하고 이를 크게 두 가지로 나누면 컴퓨터가 이해할 수 있도록 하는 코딩을 하는 것은 인코딩(incoding), 컴퓨터의 언어를 우리가 이해할 수 있도록 복원하는 것을 디코딩(decoding)이라고 한다. 코드로 인해 컴퓨터와의 소통이 가능해지면 정보 처리 시에 효율을 극대화하고, 처리된 정보를 효율적으로 이용하기 위해 중대한 가치를 부여하여 설계하게 되는데 코드는 컴퓨터 처리에 융통성과 일관성을 부여할 수 있어야 하며 업무처리에도 효율성과 일관성을 부여할 수 있게 된다. 컴퓨터 공학에서 코드도 여러 종류로 나뉘는데 프로그램을 만들기 위해서는 코드를 논리적으로 구성해야 한다는 것은 같다.[1][4]
컴퓨터와 코드
컴퓨터에는 0과 1의 이진수만 인식하고 사용한다. 컴퓨터가 표현하는 0과 1의 나열만으로 개발자는 어떤 내용인지 알아보기 어렵고, 이 두 숫자만으로 프로그램을 개발하는 건 굉장히 어려운 일이다. 그렇기에 어떤 내용을 기계에 명령하기 위해서는 개발자가 내리는 특정 방식의 명령을 기계어로 변환하여야 한다. 여기서 개발자는 C, 자바 등과 같은 프로그래밍 언어를 사용하여 편집하게 되는데 그것을 코딩이라 한다. 그렇게 작성된 코드는 컴파일(Compile)을 통하여 이진법으로 바꾸어 컴퓨터에 전달되고 컴퓨터는 코드로 보내어진 명령을 수행하여 원하는 결과를 얻게 된다. 실행에서의 오류가 발생되면 코드를 수정하는 행위인 디버그(debugging)를 통하여 프로그램을 완성한다. 코드를 통해 컴퓨터를 활용하는 방식이 발전할수록 일의 능률 증대와 시간 단축으로 급격히 도시화되는 가속화되고, 4차 산업으로 진행되고 있다. 컴퓨터의 수요와 사용처가 많아질수록 코드 크기의 그 규모는 상당이 커지고 복잡해지고 있는데 코드를 다룰 줄 아는 능력이 점점 필요로 해짐으로써 최근 중, 고등학교 기본 과목으로 교육이 진행되고 있다.[5][6]
기능
코드의 3대 기능으로는 식별, 분류, 배열이 있으며 그 외 기능들이 존재한다.[7]
- 식별 기능: 대량의 데이터들에서 서로 구분 가능하며 쉽게 식별할 수 있는 기능.
- 분류 기능: 데이터들을 동일한 특성을 가진 데이터를 그룹화하여 나누는 기능.
- 배열 기능: 일련의 순서로 나열할 수 있는 기능.
- 간소화 기능: 데이터의 표현을 간소화하여 나타낼 수 있는 기능.
- 표준화 기능: 다양한 종류의 데이터를 일정한 기준으로 통일하여 관리하는 기능.
- 연상 기능: 정보 표현을 하고자 하는 데이터 뜻과 의미가 코드에 내포되게 하는 기능.
- 오류 검출 기능: 데이터 입/출력 시 잘못된 정보를 검출할 수 있는 기능.
- 암호화 기능: 데이터 외부 표현을 감추고자 하는 암호화 기능.
목적
코드를 설계하고, 코드 체계에 있어서 요구되는 특성이다. 컴퓨터와 다른 기계에 있어 되도록 적은 자리수를 사용하여 많은 양의 데이터 항목을 표현하며, 에러 발생률을 낮출 수 있고 검출하기 쉬워야 한다. 또한 코드의 명확성과 고유성을 증가시키면 데이터 항목의 양이 증가하여도 분류, 식별, 추가가 편리해져 데이터 처리의 효율성을 높일 수 있어야 하며 사람에게 있어 코드는 알기 쉽고 기억하기 쉽게 해놓으면 설정과 이용 등이 편리하게 해야 한다.[8]
설계
코드화의 설계 순서는 코드화 항목 선정 > 코드화 목적 설정 > 코드화 대상 확인 > 코드화 범위 결정 > 코드 사용 기간 결정 > 코드화 항목의 특성 분석 > 코드화 방식 결정 > 문서화로 진행된다. 여기서 문서화는 발생할 수 있는 코드의 오류(error)에 대해 빠른 수정이 가능하게 할 수 있다. 코드화를 설계 할때 유의해야 할 점이 존재한다. 기계의 처리와 취급, 분류에 용의 해야 하며 코드의 목적에 어긋나지 않도록 단순성, 고유성, 공통성, 체계성을 유의하며 설계해야 한다.[9][10]
코드화
순차 코드
순차 코드(Sequence Code)는 발생순, 크기순, 방향순에 따라 순서대로 일련번호를 부여하여 코드화하는 방법으로 자릿수가 짧고 추가가 용이하며, 대상 항목수가 적은 경우 주로 사용된다. 단순하고 이해가 쉽고 확장성이 좋지만 순서대로 코드가 부여되기 때문에 분류와 누락된 자료 삽입이 어려워진다.[7][2][9]
구분 코드
구분 코드(block code)는 코드화 대상 항목을 표시가 가능하고 예비 코드를 사용할 수 있어 추가가 용이한 코드로 분류해서 코드를 부여하는 방법이다. 코드 숫자의 크기로 데이터의 성격을 개략적으로 파악이 가능하며 비교적 적은 자릿수로 많은 항목을 표시할 수 있다는 장점이 있다. 또한 코드에 순서가 존재하지 않아 추가가 용이하다. 하지만 구분마다 예비 코드를 가지고 있어 기계 처리가 복잡하다.[2][11]
십진 코드
십진 코드(Decimal Code)는 코드화 대상 사물을 일정한 인덱스로 10개로 구분하여 대분류, 중분류, 소분류로 코드를 부여한다. 각 분류마다 코드 번호는 한자리만 허용되며 대상의 범위가 무한대로 확대가 가능하여 확장성이 용이하다.[2][11]
표의 숫자 코드
표의 숫자 코드(Significant Digt Code)는 대상의 물리적인 수치 값, 즉 중량, 면적, 용량, 거리, 광도 등을 코드에 적용시키는 방법이다. 코드 그대로의 판독이 용이하여 기억하기 좋고 새로운 데이터가 발생해도 자유로이 추가가 가능하다.[7][11]
그룹 분류식 코드
그룹 분류식 코드(Groub Classification Code)는 대분류, 중분류, 소분류 등 각 분류별로 행수를 구성하고, 최하행이 개개의 대상을 나타내는 방법이다. 분류 개수의 제한이 없고 컴퓨터 처리 방식에 적합한 방식이다.[7]
연상 코드
연상 코드(Mnemonic Code)는 코드만 보고 대상을 연상할 수 있도록 대상의 품목 명칭이나 품목의 약호 형태로 코드를 적용시키는 방법이다. 대상의 약어를 코드에 포함시키기에 쉽게 기억할 수 있어 코드화 작업이 간단하며 전문지식이 없어도 정보 파악이 가능하다.[7][11]
오류
- 전위 오류(Transposition Error) : 연속된 두 글자가 앞뒤가 서로 바뀌어 표기되여 생긴 오류
- 이중 전위 오류(Double Transposition Error) : 전위 오류가 중복 발생한 경우 생기는 오류
- 사본 오류(Transcription Error) : 코드 한자리의 수가 잘못 표기되어 생긴 오류
- 생략 오류(Omission Error) : 한 글자가 생략되어 기술된 경우 생긴 오류
- 첨가 오류(Addition Error) : 필요 없는 글자가 추가 기술된 경우 생긴 오류
검출과 정정
오류 검출 부호는 데이터가 전송되는 과정에서 신호 감쇠, 지연 왜곡, 상호 변조 잡음, 충격 잡음으로 인한 오류가 발생했는지 확인만 할 수 있는 코드이다. 검출된 오류를 수정할 수 있도록 조립된 코드를 오류 정정 코드라고 한다.[12][13]
패리티 코드
패리티 코드(parity code)는 데이터의 문자열 내 7비트의 정보 데이터에 여분의 한 비트의 패리티 비트(parity bit)를 추가하여 시스템 설계 기준에 따라 시작 또는 끝에 추가하게 된다. 패리티 비트에 의한 에러 검출은 한 단어에서 2비트 이상의 에러가 발생하는 중복 에러의 경우에는 검출할 수 없으며 한 비트에서 에러가 발생해야만 검출이 가능하다. 또한 패리티 비트는 에러의 발생 여부를 검출할 수는 있으나 검출된 에러를 교정할 수 없다. 패리티 비트는 각각 패리티 코드 내의 1의 개수에 따라 짝수 패리티와 홀수 패리티로 구분된다. 데이터 비트와 패리티 비트의 전체 1의 개수의 짝수, 홀수로 조정하는 것이다. 예를 들어 1100100이라는 데이터 비트가 존재한다. 현재 1의 개수는 3개로 홀수 개인데 여기서 1의 패리티 비트를 추가함으로써 1의 개수는 짝수가 됨에 따라서 짝수 패리티 비트가 된다. 반대로 홀수 패리티는 데이터 비트의 짝수, 홀수의 상태에 따라서 0또는 1의 패리티 비트를 추가하게 되면 홀수 패리티 비트라 한다. 이렇게 패리티 비트를 추가하여 보내게 되면 받는 쪽에서는 수신된 데이터의 전체 비트를 계산하여 패리티 비트를 다시 계산하여 오류를 검출할 수 있게 된다.[14][15]
해밍 코드
해밍 코드](Hamming Code)는 수신 측에서 오류가 발생한 비트를 검출하고 직접 수정하는 방식이다. 오류 검출은 물론 스스로 정정할 수 있으므로 자가 정정 코드라고 한다. 1비트의 오류 수정만 가능하며, 정보 비트 외에 잉여 비트가 많이 필요하다. 전송 비트 중 1, 2, 4, 8, 16, 32, ...2의 n승 번째를 오류 검출을 위한 패리티 비트로 사용된다. 송신한 데이터와 수신한 데이터의 각 대응하는 비트가 서로 다른 의미의 비트 수를 해밍 거리(Hamming distance)라고 한다.[12]
가중치 코드
가중치 코드(weight code)는 숫자를 나타내는 코드로 각 자리에 일정한 가중치가 정해져 있는 코드. 예를 들면 4비트의 이진수 각 자리는 8, 4, 2, 1을 나타내는데 이것을 가중치라 한다. BCD 코드, 바이콰이너리 코드, 링 카운터 코드 등이 있다.[16]
BCD 코드
BCD 코드는 10진수 0부터 9까지를 2진화한 코드로서 실제 표기는 2진수로 표기되지만 10진수처럼 사용한다. 예를 들어 21의 수가 있다고 가정했을 때, 십의 자리 '2'를 이진수로 변환한 0010 와 일의 자리 '1'의 이진수 표현인 0001 따로 표현되어 21의 이진수 표현은 0010 0001로 표현된다. 즉, 쉽게 말하면 자리수의 숫자로 잘라서 표현하게 된다. 그냥 이진수의 개념보다 쉽게 사용할 수 있지만 이진수 보다 더 많은 비트가 사용될 수 있다. BCD 코드로 표현된 값에 3을 더해 나타내는 코드는 3초과 코드(excess-3-code)라고 하며 자기 보수의 성질을 갖게 된다.[17]
- 자기 보수(Self Complement): 1의 보수를 취하면, 10진수의 9에 해당하는 값이 된다.[18]
바이콰이너리 코드
바이콰이너리 코드(biquinary code)에서 'bi'는 2를 의미하고, 'quinary'는 5를 의미하기 때문에 2-5진 코드라고 한다. 7개 비트로 구성되나, 비트 중에서 1의 개수는 두 개가 포함되기 때문에 검출이 쉽다. 5비트로 숫자 0~9를 부호화해서 비트 오류를 검출한다. 0~9를 표현하는 데 있어 5비트 중 1인 비트 2개 0인 비트 3개가 동일하게 있도록 위의 표와 같이 배치하는 방식이 된다. 1의 개수가 2개가 될 경우, 에러를 검출할 수 없다는 단점이 있으며, 오류 검출은 가능하지만 정정할 수 없다.[19][20]
링 카운터 코드
링 카운터 코드(ring counter code)는 0000부터 0001 > 0010 > 0011처럼 계속 증가하는 단순 방식이므로 매우 쉽고, 전자회로를 이용한 해독도 매우 용이 하다. 0부터 9의 카운트를 반복한다.[19]
비가중치 코드
비가중치 코드(non-weight code)는 숫자를 나타내는 코드로 각 자리에 일정한 가중치가 정해져 있지 않아 데이터 변환에 큰 이점을 주는 코드이다. 그레이 코드, 3초과 코드 등이 있다.[17]
그레이 코드
그레이 코드(Gray Code)는 가중치가 없기 때문에 연산에는 부족하지만 아날로그-디지털 변환기나 입출력 자치 코드로 주로 사용된다. 각 숫자별 1비트만 차이 나도록 제작하였기에 에러를 발견하는데 좋다. 그레이 코드는 2진 비트에서 이웃하는 코드 간 비교하여 같으면 '0', 다르면 '1'을 반환한다. 예를 들면 이진수 1001을 그레이 코드로 변환한다면 앞 자리인 '1'은 그대로 사용하고, 그 다음 비트 '0'과 비교한다면 다르기 때문에 '1'이 된다. 그 다음도 세 번째 비트인'0'과 두 번째 비트'0'을 비교하면 '0'이 반환된다. 이런식으로 변환하면 '1101'이 나오게 된다.[17]
문자 코드
문자 코드(character code)란 컴퓨터는 0과 1의 2진수밖에 사용할 수 없다. 그러기에 문자와 같은 많은 종류의 정보를 컴퓨터에 처리하기 위해서는 0과 1의 조합으로 하나의 문자를 구성하게 되는데 이를 문자 코드라 한다. 문자 코드는 세계 표준으로 지정하여 서로 다른 시스템에서도 동일하게 해석될 수 있도록 되어있다. 대표적인 문자 코드로는 아스키 코드, 유니코드 등이 있다.
아스키코드
아스키코드(ASCII)는 미국 국가표준 협회NSI에서 표준화한 정보 교환용 7비트 부호 체계로써 영문 알파벳을 사용하는 대표적인 문자 코드이다. 아스키코드는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되면 대부분 문자 인코딩이 아스키에 기초를 두고 사용되고 있다. 아스키는 8비트가 아닌 7비트로 이루어져 있는데 나머지 1비트는 에러 검출을 위해 사용된다. 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 구성되어 총 128개로 이루어진다. 영문 키보드로 입력할 수 있는 모든 기호들이 할당되어 있고 어느 시스템에 적용이 된다는 장점이 있다.[21][22]
유니코드
유니코드(Unicode)는 표시 및 저장 목적으로 국가별 텍스트를 인코딩하기 위해 설계된 표준화된 문자 코드이다. 여기에 플랫폼, 언어 또는 프로그램에 상관없이 각 개별 문자를 표시하는데 고유한 16비트 또는 32비트 값을 사용한다. 유니코드를 사용하면 다양한 플랫폼, 언어, 국가 또는 지역에서 사용할 수 있는 소프트웨어 제품을 개발할 수 있게 된다. 또한 유니코드를 사용하면 여러 서로 다른 시스템에서 데이터를 전송이 가능하다.[23]
각주
- ↑ 1.0 1.1 〈코드〉, 《네이버 지식백과》,
- ↑ 2.0 2.1 2.2 2.3 〈부호〉, 《네이버 지식백과》
- ↑ 동아엠앤비 출판사, 〈#1. 코드란 무엇인가: 기술은 곧 레시피이다〉, 《네이버 포스트》, 2018-07-03
- ↑ uzleem, 〈시스템 분석 설계 : 2-코드 설계〉, 《티스토리》, 2020-08-06
- ↑ 동아엠앤비 출판사, 〈노동의 진화에 따라 코드의 발전이 가속화되다〉, 《네이버 포스트》, 2018-07-04
- ↑ 정환용 기자, 〈컴퓨터의 언어 - 코드(CODE)〉, 《테크월드뉴스》, 2018-04-09
- ↑ 7.0 7.1 7.2 7.3 7.4 울버린, 〈코드의 기능 및 기타〉, 《네이버 블로그》, 2013-08-09
- ↑ 그루아트, 〈(소프트웨어설계코드 설계]〉, 《티스토리》, 2017-09-13
- ↑ 9.0 9.1 〈코드〉, 《IT위키》
- ↑ Frog is cry, 〈시스템 분석 설계:2-코드설계〉, 《티스토리》, 2020-08-06
- ↑ 11.0 11.1 11.2 11.3 아보카도, 〈코드의종류 / 코드의종류 7가지〉, 《네이버 블로그》, 2019-03-14
- ↑ 12.0 12.1 좋은사람, 〈오류 검출 방식〉, 《네이버블로그》, 2018-01-21
- ↑ 〈오류 정정 코드〉, 《네이버지식백과》
- ↑ 〈패리티 비트〉, 《위키백과》
- ↑ cni1577, 〈에러 검출 코드: 패리티 코드〉, 《네이버블로그》, 2019-07-19
- ↑ 〈PC에서 사용되는 코드의 종류〉, 《이글루스》
- ↑ 17.0 17.1 17.2 똑똑한 용GOD, 〈3 간단하게 알아보는 디지털 시스템: 디지털 코드〉, 《티스토리》, 2020-09-04
- ↑ 〈초가 3 코드〉, 《정보통신기술용어해설》, 2021-03-25
- ↑ 19.0 19.1 유즈맵, 〈이진법코드(binary code)들, 디지털공학〉, 《네이버블로그》, 2017-06-01
- ↑ 야라바, 〈코드와 데이터 표현 - 정보처리 필기 해설 7〉, 《티스토리》, 2017-02-03
- ↑ 〈ASCII〉, 《위키백과》
- ↑ Got this memyself, 〈아스키 코드 ( ASCII Code ) 설명 및 출력 코드〉, 《티스토리》, 2020-12-09
- ↑ 〈유니코드 지원〉, 《IBM》
참고자료
- 〈코드〉, 《네이버 지식백과》
- 〈부호〉, 《네이버 지식백과》
- 동아엠앤비 출판사, 〈#1. 코드란 무엇인가: 기술은 곧 레시피이다〉, 《네이버 포스트》, 2018-07-03
- 〈코드〉, 《네이버 지식백과》
- uzleem, 〈시스템 분석 설계 : 2-코드 설계〉, 《티스토리》, 2020-08-06
- 동아엠앤비 출판사, 〈노동의 진화에 따라 코드의 발전이 가속화되다〉, 《네이버 포스트》, 2018-07-04
- 정환용 기자, 〈컴퓨터의 언어 - 코드(CODE)〉, 《테크월드뉴스》, 2018-04-09
- 울버린, 〈코드의 기능 및 기타〉, 《네이버 블로그》, 2013-08-09
- 그루아트, 〈(소프트웨어설계코드 설계]〉, 《티스토리》, 2017-09-13
- 〈코드〉, 《IT위키》
- Frog is cry, 〈시스템 분석 설계:2-코드설계〉, 《티스토리》, 2020-08-06
- 아보카도, 〈코드의종류 / 코드의종류 7가지〉, 《네이버 블로그》, 2019-03-14
- 좋은사람, 〈오류 검출 방식〉, 《네이버블로그》, 2018-01-21
- 〈오류 정정 코드〉, 《네이버지식백과》
- 〈패리티 비트〉, 《위키백과》
- cni1577, 〈에러 검출 코드: 패리티 코드〉, 《네이버블로그》, 2019-07-19
- 〈PC에서 사용되는 코드의 종류〉, 《이글루스》
- 똑똑한 용GOD, 〈3 간단하게 알아보는 디지털 시스템: 디지털 코드〉, 《티스토리》, 2020-09-04
- 〈초가 3 코드〉, 《정보통신기술용어해설》,
2021-03-25
- 유즈맵, 〈이진법코드(binary code)들, 디지털공학〉, 《네이버블로그》, 2017-06-01
- 야라바, 〈코드와 데이터 표현 - 정보처리 필기 해설 7〉, 《티스토리》, 2017-02-03
- 〈ASCII〉, 《위키백과》
- Got this memyself, 〈아스키 코드 ( ASCII Code ) 설명 및 출력 코드〉, 《티스토리》, 2020-12-09
- 〈유니코드 지원〉, 《IBM》
같이 보기