평범하게 자료구조 설명하는 글

춤추는망고·2020년 4월 6일
0

정리 전 블로그 글들

목록 보기
28/40
post-thumbnail

WeCode 7기로 수업을 받고있는 슈퍼개발자,

춤추는망고입니다.

( 춤 안춥니다. )





이거 시리즈 아닙니다!

과제 제출용 문서이므로,

지나가다가 읽으시는분들이 이해 못하셔도 상관 없습니다.

( '못 알아먹겠으면 나가주세요~' 이 말입니다. )





















시작하겠습니다.












오늘 설명할 내용쓰!

1. Data Structure 가 뭘까요?






2. 자료 구조는 어떻게 분류할까요?



























Data Structure 가 뭘까요?

영어라 어려우시겠지만, 찾아보면 자료 구조입니다.

( 참 쉽죠?; )






제가 비유를 쓰고, 장난스럽게 적어뒀다고해도,

적절한 상황에 적절한 자료형태를 사용하는 것이

엄청나게 중요하다는 사실은 변하지 않습니다.






여러분은

어떤 자료형태를 어떻게 써야겠구나...

하는 점을 위주로 신경써서 글을 보시기 바랍니다.













( 진지충 ㅈㅅ ㅋ )














자료의 구조는 사실, ' 퍙고와 함께 춤을! ' 시리즈의



' 데이터와 함께 춤을! ' 글에서 다뤘는데요.









그때는 파이썬의 자료형에 대해서만 다뤘었기 때문에,



이번에는 자바스크립트도 같이 묶어서 볼겁니다 ㅎ

( 쌍쌍바 개이득~ ㅋ )






























자 시작해보죠.

레ㅡ쓰기맄!

































이번 글에서, 저희는






프로그래밍 언어의 절반을 알기 위해서,

원시시대로 돌아갈겁니다.

( 정말 단순한 정보들만 있던, 그런시기로 말이죠! )
( 배고프다, 맛있다, 한개, 세개 등등 )





















1. 원시형 자료

( Primitive data type )







( 값을 교체할 수는 있지만, 직접적인 변형은 할 수 없어요! )











1 - 1 . number ( 숫자형 자료 )

integer ( int ) : 정수형 / 인트!
floating-point number ( float ) : 실수형 / 플롯!
complex number : 실수와 허수를 포함하고 있는 복소수 ( 복잡쓰! )

어떤가요?






복잡해보여서 그렇지,

사실 숫자형 자료는 정말 간단해요.

-1, 0, 1, 2, 3, 4 ... 같은 소수점이 없는 숫자는 정수!



-4,56, 1.45, 2.74, ... 같은 소수점이 있는 숫자는 실수!



그냥 복잡한 수는 complex (복잡한) number (수) 인 복소수!

정도로만 알아두셔도 충분하다고 생각합니다.









하지만 이 친구들은 모양이 있고,






프로그래밍의 세계는 냉철하기 때문에...

저 녀석들은 서로 다른겁니다.






마치 3 과 3.0 은 같은 내용이지만, 모양이 다르다고 보는거죠.

이 점은 집중해서 꼭 기억해두셔야 합니다!

( 이런 깐깐한 면이 있더라도, 충분히 완벽한 친구니까 이해해주세욬ㅋ )


















1 - 2 . string ( 문자형 자료 )

single quoted : 작은따옴표 ( ' )
double quoted : 큰따옴표 ( " )
( 영어는 대소문자 구분함 )
( 큰따옴표 안에서는 작은따옴표 사용 가능 / 반대로는 안됨 ! )
( 사실 할수는 있음 ! )

문자형은 말 그대로, 문자에요.

우리 말하고, 글쓸때 쓰는 그거요, 그거 ㅎ

( 저희가 프로그래밍을 할 때 사용하는 문장들이 코드입니다 ! )






문장이나 단어같은 것들, 숫자나 이런저런 문자들도 내용이 될 수 있어요!









저 따옴표 ( ' ) 와 쌍따옴표 ( " ) 로 둘러쌓여있다면,

이런 글자나 문자들은 문자형 자료구나~

라고 컴퓨터가 이해하게 됩니다.









그리고 위에 적어두었던 것처럼,

큰따옴표안에서 작은따옴표를 쓸 수는 있지만,

작은따옴표안에서 큰따옴표를 쓰려면, 다른방법을 써야합니다.

( 물론, 이 부분은 다른 글에서 다룰거에요 ㅎ )












위의 숫자형 자료처럼,

컴퓨터는 ( 당연하게도 ! )

저 두녀석 ( ' , " ) 의 모양을 다르게봅니다!

또, 알파벳은 대/소문자를 다르게봅니다!

( 빨리 익숙해지세요! )

이 점도 꼭 기억해두셔야 합니다!


















1 - 3 . boolean ( 판별형 자료 )

( ↑ 참고로, 불리언이라고 부릅니다! )

true : 참
flase : 거짓
두가지 타입만 존재함.
( 값이 있을때는 true, 없을때는 false )

( 진실! 혹은 거짓! )

마치 솔로몬왕이 된듯한 기분이 들게해주는 이 자료형은

정말 저거 두개밖에 없습니다 ㅋㅋㅋㅋㅋ






여기서 중요한 것은






대부분의 프로그래밍 언어는

내용 (값) 이 있으면 진짜 !

내용 (값) 이 없으면 가짜 !

라고 생각한다는 겁니다.















프로그래밍에 있어서 매우 중요한 개념이에요!






앞으로의 문제를 해결할때 필요하다구요!


















1 - 4 . null / undefined ( 없어! )

null : 값 없음



undefined : 정의되지 않은 값

이건 저희가 보기엔 둘 다 "없어!" 인데요.

컴퓨터는 이 둘을 또 따집니다!






예를 들어서 설명해야 이 차이가 제대로 느껴지실거에요 ㅎ

( 제대로 이해하고 싶으시다면, 밑의 변수 부분을 이해하고 오세요! )









설명 들어갑니다!






null

"" 라는 문자형 자료가 있다!?

" <- 덕분에 " 문자형 자료 모양이구나! " 라는 것을 파이썬을 알고있어요.


하지만, 저 사이에는 내용이 없죠...

" 비어있다. "

라는 느낌이 null 이라고 보시면 됩니다.






자, 다음은 undefined 입니다~

( undefined 는 뒤에서 설명할 '변수' 라는 친구를 알아야 이해하기 쉬워요. )






예시를 이해하기 위한 정도라면,

변수는

내용 ( 값 ) 이 담길수 있는 어떤 모양이다~

정도로만 이해하셔도 충분해요.






변수라는 모양에, 내용 ( 값 ) 을 정해주지 않은겁니다!



컴퓨터가 ' undefined ' 라고 대답한다면,


거기엔 내용 ( 값 ) 이 없어! 멍청아!

라고 말한겁니다.
( 멍청이는 농담이에욥! ㅎㅋ )

이 둘의 차이도, 위의 판별자료형처럼 나중에 필요하답니다.

나중에 다양한 자료를 다루게 되실때, 제대로 아셔도 늦지 않습니다.

느낌정도만 가져가시기 바랍니다 ㅎ






( 이해되면 웃게되는 짤 ㅋ )





















자!






여기까지, 단순한 자료인 원시형 자료들에 대해서 알아봤어요.

물론 여러분도 예상하셨다시피, 세상에는 더 복잡한 정보들이 많습니다.












위의 내용들, 제대로 이해하셨나요?












그럼 이제부터 심화과정으로 넘어가 봅시다!

( 중요한 개념입니다. 장난식으로 설명해도 굵은글씨 위주로 이해하세욥 )
( 머리 좀 아플껄요? ㅋ )






2. 객체형 자료

( Object data type )















' 퍙고와 함께 춤을! ' 시리즈의 ' 데이터와 함께 춤을! ' 글에서,



원시형 자료가 아니면 모두 객체형 자료라고 소개했었는데요.






사실, 이 안에서도 나뉩니다...

None-Primitive Data Structure(비단순 구조)

: 단순한 데이터를 저장하는 구조가 아니라, 여러 데이터를 목적에 맞게 효과적으로 저장하는 자료 구조에요!



( 밑의 두가지 형태로 나뉘어요! )





1. Linear Data Structure(선형 구조)

: 저장되는 자료의 전후 관계가 1:1 [1대1]
  ( 리스트, 스택, 큐같은 것들 )

↑ 뒤에서 설명할 1대1로 이름과 값이 매칭돼있는 자료에요!





2. Non-Linear Data Structure(비선형 구조)

: 데이터 항목 사이의 관계가 1:n 또는 n:m [1대다 혹은 다대다]
  ( 그래프와 트리같은 것들 )

↑ 더 나중에, 복잡한 자료형을 다루실 때 아셔야하는 개념이에요!
( 사실 개념만 딴딴하면 단순쓰 ㅎ )












2 - 1 . variable ( 변수 )






포켓몬스터에 메타몽 아세요?

( 귀여워서 넣어봣슴다 ㅎㅎ )









특징쓰!

사전적 의미 :
아직 알려지지 않거나, 어느 정도까지만 알려져 있는
양이나 정보에 대한 상징적인 이름 ( 마치 메타몽 )



숫자로 시작 불가능
영어 알파벳과 숫자 그리고 underscore (_) 로만 구성
대소문자를 구분 ( 문자형 자료처럼요! )






어떤 내용이던 담고있을 수 있는 친구에요.






활용도가 높은만큼, 여러상황을 겪어보셔야 제대로 이해가 되실겁니다...

( 저도 아직은 부족해서...;; )




































2 - 2 . container ( 컨테이너 )

element ( 원소 )

: 컨테이너의 구성요소


JavaScript

array [ ] : 순서가 있는 목록이고, 배열이라고 부르는 컨테이너
	    ( 배열 안에 함수를 저장할 수도 있다. )

Python

list [ ] : 순서가 있는 목록 컨테이너
tuple ( ) : 바뀌지 않고, 순서가 있는 컨테이너
( 값이 1개이면 ( 값, ) 처럼 , 를 붙여야함 / 괄호는 생략 가능 / 값 못바꿈 )
set { } : 집합 ( 비교목록 )
( 값 중복 허용안됨, 순서없는 목록임 )









컨테이너 안의 요소들은 elements 라고 불러요!

( 나중에 검색할때, 영어로 쳐야할 것이기 때문에, 특별히 영어로 써드림 )
( 잘난척 아님 )









저 원소라는 정보값들이 담겨있는 상자같은거라고 보시면 편해요!






JavaScript 의 경우,






배열이라는 하나의 형태만으로도, 부족하지 않아서

따로 다른 개념은 없습니다.















Python 의 경우,



특징이 서로 달라서 list, tuple, set 로 구분이 됩니다.



순서가 있고, 값이 바뀔 수 있는, 목록같은 컨테이너는 list 입니다.

[ 1, 32, 8, 9, 32 ] 처럼 표현할때, [] 기호를 씁니다!



순서가 있고, 값을 바꿀 수 없는, 정해진상태의 컨테이너는 tuple 입니다.

( ( 3, 52, 134, 52 ) 처럼 표현할때, () 기호를 씁니다! )



순서는 없고, 값을 바꿀수는 있지만, 중복되는 값은 무시해버리는 컨테이너는 set 입니다.

( { 3, 5, 8, 9, 19 } 처럼 표현할때, {} 기호를 씁니다! )



이런 사소한 차이점들을 잘 알고계시는게 좋습니다.
















































2 - 3 . mapping ( key, value 값이 묶인 개체 )

JavaScript

Object { } : 객체라는 형태이다.
( 객체지향적 / 원형객체 기반 프로그래밍으로 넘어가면,
  개념이 엄청나게 확장된다. )

Python

key value pair
: 이름과 값이 묶인 형태의 데이터 ( 한덩어리! )
dictionary { } : key value pair 를 담은 컨테이너( 뭉탱이! )
- key 가 중복되면, 가장 마지막에 등록된 key 에 대한 value 를 가짐
- key 에는 tuple 은 되지만 list 는 안됨 - 가변값은 될 수 없음









이 부분은 단단히 할 수 있는 시기가 따로 있는 것 같습니다...

프로그래밍 세계에 어느정도 익숙해지신 뒤에 다루시는게 좋습니다...


















팩트 :
자바스크립트에선 객체안에 객체가 들어가고,
파이썬에선 리스트 안에 리스트나 튜플이 들어가고,
딕셔너리 key 값에 튜플 / value 에 다른 딕셔너리 들어가고...



그러기 시작하면 멘탈쓰가 가루쓰.....















띵언과 함께 마무리하도록 하죠.







































"코딩은 알고리즘과 자료구조, 이 두가지로 이루어진다"

- 리누스 토르발스





















감사합니다. ( _ _)












부록









Data Structure 기반 추가설명쓰!






Array 와 List

가장 기초적이고 단순하면서도 가장 자주 사용 되는 자료 구조입니다.
( 사실은 python 에서도 array 를 쓸 수 있어요! )


순서에 맞게 구성이 되는 특징과 함께,
Elements ( 원소 ) 가 삽입되는 것도 순서대로 저장되죠.
중간의 값을 삭제하거나 추가하면,
변경값 이후의 모든 값들의 index 정보가 수정되어,
처리해야할 작업이 무거워집니다.
실제 메모리 상에서,
즉, 물리적으로 데이터가 순차적으로 저장되기 때문에,
이러한 특성을 가진답니다.
정보가 자주 삭제 되거나 추가되는 데이터를 담기에는 부적절합니다.
배열은 초기 사이즈값을 가진 뒤, 내용이 많아서 초과하게되면,
resizing 을 하는 특성이 있어요.
따라서, 사이즈 예측이 잘 안되는 데이터를 담기에도 부적절합니다.

이러한 특성들 때문에,
배열은 순서가 중요한 데이터, 다차원 데이터 등을 다룰때나,
특정 요소를 빠르게 읽어야 할 때,
데이터의 사이즈가 자주 변하지 않을 때에 주로 사용하죠.


Multi-dimentional Array(다중차원 배열)

  • 원소에 array를 넣을 수 있습니다.
    이러한 상태의 array 를 다중차원 ( multi-dimentional ) array라고 합니다.
    ↓ 일반적으로 2D (2차원) array가 많이 사용됩니다.

tuple

튜플은 데이터를 순차적으로 저장할 수 있는 순열 자료구조입니다.
( 한 번 정의되고 나면 수정할 수 없습니다! )
2-3개 정도의 적은 수의 소규모 데이터를 저장할 때 많이 사용합니다.



간단한 값을 빨리 표현하고 싶을 때나,
리턴 값을 한 개 이상 리턴하고 싶을 때에 사용합니다.



데이터가 무슨 의미인지 명확하지 않다는 게 단점입니다.



Array(List) 보다 더 가볍고 메모리더 적게 먹는다는게 장점입니다.

profile
지금까지 이런 망고는 없었다. 이것은 개발자인가 춤추는망고인가

0개의 댓글