CoffeeScript

정보

토픽 CoffeeScript > Learn

데이터와 정보의 차이

현실 세계에서 벌어지는 일들을 단순한 방법으로 관찰하고 측정해서 얻은 값을 자료라고하며, 그 자료를 처리해서 얻을 수 있는 결과를 정보라고 한다.

위는 일반적인 데이터/정보 비교글이다.

하지만 프로그래밍 언어 수업에서는 비슷하지만 조금 다르 의미를 부연하고자 한다.

데이터는 문단에서 소개한 을 의미한다.

반면 정보 여러개의 데이터를 모으고, 각 데이터에 적절한 의미부여를 함으로써 좀 더 큰 규모에서 의미있는 덩어리를 형성한다.

미묘한 의미이니 예를 하나 들어보자.

여기 숫자값 7개가 있다.

4,12,24,33,38,45,22

각각의 값은 어떤 의미일까? 알 수 있겠는가?

나에게 물은다면, 나는 이렇게 대답할 것이다.

4이 4이고, 12는 12요, 24은 24다.

무슨 의미인고하니, 4에는 4라는 의미가 있을뿐 다른 의미가 없다는 소리이다.

하지만, 하나의 값이든 여러개의 값이든 올바른 해석(즉, 의미부여)가 되면 그것은 정보가 된다.

4,12,24,33,38,45,22 숫자 7개는 598회차 로또 당첨 번호이다.

이처럼 의미 부여를 통해 데이터는 정보가 된다. 반대로 정보는 해체를 통해 데이터가 될 수 있다.

인간이 컴퓨터를 이용하는 목적 정보처리이다.

그러나 추상적 정보를 다루는데 익숙한 인간과는 달리, 컴퓨터는 정보 같은 추상개념은 알지못하고 데이터 값을 계산하는 것만 무척 빠르다.

따라서, 인간이 인지하는 정보를 으로 풀어서 표현해, 컴퓨터에게 입력해주고, 컴퓨터의 연산 결과 값으로 정보를 만들어야 한다.

정보의 표현

그러면 프로그래밍 언어서 정보 표현은 어떠할까?

기실 컴퓨터가 내부적으로는 모두 으로 처리하겠지만, 프로그래밍 언어에서 새로운 명령어(함수)를 만들어서 고차원적 지시를 내리는 것처럼 정보도 고차원적표현이 있을 것이다.

커피에서 이런 고차원적 정보 표현은 2가지로 할 수 있다.

배열(Array)와 객체(Object)이다.

우선 각각의 문법적 표현 형태를 보자.

Array = [] # 내용물이 없는 빈 배열
Array = [12, 234, 31, -33]
Array = ['toast', 'cheese', 'wine']
Array = [
  "Michael Phelps"
  "Liu Xiang"
  "Yao Ming"
  "Allyson Felix"
]
Array = [ 12, "hi", true, null, -33]
Array = [ 
  12, "hi", true
  null, -33 
  ]

배열은 [ ] 안에 배열의 내용을 작성한다. 숫자, 문자, 진리값 등등이 자유롭게 올 수 있다. 한줄에 여러개의 요소를 쓰고자할땐,,로 각 요소를 구분해주어야 한다.

다음 Object를 보자.

obj = { } # 내용이 없는 빈 객체
obj = { name: 'Mr. Cofffe', age: undefined, power: 99 }
ojb = 
  name: 'Mr. Cofffe'
  age: undefined
  power: 99

객체는 { }를 사용해서 정의하지만, 줄바꿈을하고 들여쓰기를 하면 {}를 생략할수 있다. 배열과 마찬가지로 숫자,문자,진리값 등등을 자유롭게 쓸수 있다. 역시 한줄에 여러 요소를 쓰고자 할때는 ,를 써야한다. 하나의 항목은 이름 : 값의 구조를 가지고 있으며, : 앞뒤로 공백이 있어도 없어도 된다.

둘 모두 여러개의 데이터를 한묶음으로 묶는 다는 점에서는 다를바 없다.

그러나, 눈에 띄는 차이가 하나 보일것이다.

Object는 저장되는 값 앞에 nameage과 같은 이름이 부여되어 있다. 반면 배열에 저장되는 값은 고유한 이름이 없고, 번호로 기억된다.

이로 인해 결과적 쓰임이 크게 다르다. 배열은 번호로 구분되는 목록에 사용되는 반면, 객체는 속성값에 명칭을 부여하는 경우에 사용된다.

arr = [ 'Mr. Cofffe', undefined, 99 ]
obj = { name: 'Mr. Cofffe', age: undefined, power: 99 }

위 2줄을 보자.

배열과 객체에 저장되어 있는 값은 동일하다. 하지만 배열은 그저 순서대로 등장할뿐지만, 객체에서는 각각 요소가 nameage,power라고 불릴수 있다는 사실을 알수 있다.

이름이 있고 없고의 차이로 인해

인간이 정보를 표현할 때 아래와 같은 선택을 하게된다

  • 요소마다 이름이 필요하면 객체
  • 그렇지 않고 번호로 구분만 할수 있으면 배열

복잡한 정보의 표현

자그럼 아래처럼 좀 복잡해 보이는 정보는 어떻게 표현해야할까?

목록처럼 나열도 있고, 요소 값마다 제목관리자같은 이름도 붙어 있다. 이 경우에는 2가지 표현이 있다.

arrobj = {
  title : ['캠타시아','Weizen_바이젠', '일러스트레이터', '월령별 성장과 발달사항 table ']
  admin : ['egoing', '가수','PLSY', '리체:leezche']
  topic : [3, 10, 9, 12]
}

objarr = [
  {
    title : '캠타시아'
    admin : 'egoing'
    topic : 3
  },
  {
    title : 'Weizen_바이젠'
    admin : '가수'
    topic : 10
  },
  {
    title : '일러스트레이터'
    admin : 'PLSY'
    topic : 9
  },
  {
    title : '월령별 성장과 발달사항 table '
    admin : '리체:leezche'
    topic : 12
  }
]

arrobj와 objarr중 어떤것이 나아 보이는가?

사실 이 선택은 어러가지 복잡한 요인에 영향을 받을수 있기는 하다. 하지만 일반적인 경우에 objarr을 선택하면 무난하다.

정보의 취급

데이터에 연산이 있는 것처럼 더 큰 덩어리인 정보에도 다루는 방버이 있을 것이다.

정보에 대한 계산은 사칙연산( = - * / )처럼 익숙하게 보던것이 아니다.

구조를 가지고 있기 때문에 조금 복잡한 문장 구조를 통해서 다뤄야한다.

배열/객체의 요소 얻기

컴퓨터의 계산능력은 단위에서 이루어짐으로 정보 덩어리인 구조(배열,객체)에서 값을 꺼내야 할것이다.

arr = [ 12, "hi", true, null, -33]
obj = { name: 'Mr. Cofffe', age: undefined, power: 99 }

v = arr[0] # 0번째 요소,
console.log v  # 12 출력됨

v = arr[2] # 0번째 요소,
console.log v  # true 출력됨

v = obj['name'] # name 요소,
console.log v  # 'Mr. Coffee' 출력됨

v = obj.name   # name 요소,
console.log v  # 'Mr. Coffee' 출력됨

배열은 []안에 요소의 번호(0부터 시작함.)를 객체는 요소의 이름을 넣음으로 값을 꺼낼수 있다. 그리고 객체의 경우는 [] 대신.을 사용해서 표현 할수도 있다.

배열/객체의 요소에 값 할당

요소를 꺼낼수 있다면 할당도 가능할것이다.

arr = [ 12, "hi", true, null, -33]
obj = { name: 'Mr. Cofffe', age: undefined, power: 99 }

arr[0] = 'new value'


obj['name'] = 'new value'
obj.name  = 'new value'

꺼낸 것과 모양은 완벽히 동일하다. 단, 큰 차이가 있는데 =를 기준으로 좌측에 있으면 할당될 위치를 나타내는 것으로 쓰일 뿐이다.

하나씩 처리하기

정보는 데이터를 묶음이라고 하였다. 데이터를 다루기 좋게 묶었으나, 필요에 따라서 하나씩 풀어서 처리하고 싶을떄가 있다.(실상 가장 많이 코딩하는 일 중 하나이기도 하다.)

하나씩 처리 하는 것은 for명령어를 쓰는데, 배열과 객체가 조금 문법이 다르다.

배열

for 임시변수이름 in 배열
  실행할 명령
  실행할 명령

구조를 가진다. 배열의 내부에 있는 요소를 하니씩 꺼내 임시변수에 넣고, 실행할 명령을 한차례씩 돌려준다. 실행할 명령은 반드시 들여쓰기가 되어야 한다.

임시변수의 이 변하면서 한번씩 불림으로 한번 작성한 명령을 데이터를 바꿔가며 호출하게 된다.

간단한 예제는 아래와 같다.

arr = [ 12, "hi", true, null, -33]
for item in arr
  console.log item

객체

for own 임시변수이름1, 임시변수이름2 of  객체
  실행할 명령
  실행할 명령

구조를 가진다. 객체의 내부에 있는 요소를 하니씩 꺼내 그 요소의 이름을 임시변수1에 넣고, 요소의 값을 임시변수2에 넣는다. 그리고 실행할 명령을 한차례씩 돌려준다. 마찬가지로 실행할 명령은 반드시 들여쓰기가 되어야 한다.

배열과 마찬가지로 임시변수의 이 변하면서 한번씩 불림으로 한번 작성한 명령을 데이터를 바꿔가며 호출하게 된다.

간단한 예제는 아래와 같다.

obj = { name: 'Mr. Cofffe', age: undefined, power: 99 }
for name, value in arr
  console.log 'name = ', name
  console.log 'value = ', value

정보의 표현과 취급은 왜 배우는가?

정보의 표현을 배우는 이유는 여러가지 있지만, 가장 중요한것 한가지를 기억하면 된다.

같은 명령을 반복해서 입력하지 않기 위해서이다.

이에 대한 사례는 예제에서 볼것이다.

댓글

댓글 본문