operator01.jpg


안녕하세요 LGS입니다.
저번 시간에 이어서 Data Type에 관한 이야기를 계속하겠습니다.


AYaacn_LcmbN-1nGWdHqE_yj_PLCZFeRfD9c63cHrtNZA_KbZiHOHwPUIxfFiB0byVE8HfamAzG4n9OHSgY66EzTYCoa0MuaxnBclnBWkiPmJO95UBE

지난 강의에서 Logical, Character, Numeric에 대해서 알아봤습니다.
오늘은 나머지 부분인 Structure, Cell, Function Handles에 대해서 알아 볼 것입니다.
솔직히 1부는 잘몰라도 되지만(알아두면 좋죠 ^^) 2부는 꼭 알아두어야 할 이야기들입니다.
오늘 배우는 부분에 있어서 Cell과 Matrix를 혼동하시면 곤란한 경우가 종종 생기니 Cell은 반드시 짚고 넘어가야 합니다. 
또 각종 Toolbox가 결과값을 Structure로 반환하기 때문에 Structure 모르면 안되겠죠~?
그럼 Structure 부터 출발합시다~ 기합을 넣고 고고씽~ 무브! 무브! 무브!

fyp_J6X6cZWAnDE2o7xANW9WQHyJKJW3YVWrHqX7Gzv4b_KgYwapaMawq_pTbbBYqNGlEMoPZHlTBNvnNO8CW2S9g1FVOlkTEK7zaSFFcLDTnRqeDF4

자~ 이제부터 여러분은 비디오 가게 사장님입니다. 한가인 같은 아주 이쁜  알바생 한명을 쓰고 있습니다. 
가게 단골이 3명있는데  3명에 대한 각종 데이터를 관리해야한다고 합시다. 
아릿다운 알바생이 말하기를 ...
tNjWNQzFd0guIiNlAEA3GBggIjWi7cTfFf1oUTe4H5nfP0jR6nvXEc6GtqFfkFFTiDeB5iwUBdPmeo4L8CUVicDNKf47HQWN4nol3cnQryZm-4Q5aas
<이미지 출처: 스타뉴스>


Structure(구조체)는 변수들을 체계적으로 묶어주는 역활을 합니다. 
Structure를 마치 MS 윈도우즈의 폴더와 같은 개념으로 생각하시면 편합니다. 
윈도에서 한 폴더에 관련이 있는 파일들 끼리 넣어서 정리하죠? Structure도 비슷하다는 말씀. 
컴퓨터에 있는 모든 파일들이 바탕화면에 나와있다고 생각해보세요. -_-; 끔찍합니다. 
마찬가지로 MATLAB에서 사용하는 모든 변수가 Workspace에 둥둥 떠있다면?? -_-; 
(객체지향이니 하는 것은 살짝 패스입니다요.)

Structure에 Data를 입력하는 방법은 다음과 같습니다.
폴더는 C:\Program Files\MATLAB 처럼 한 단계 아래 폴더를 참조하려면 Backslash(\)를 사용합니다.
 Structure에서는 한 단계 아래를 접근하려면 Backslash(\)가 아닌  점(.)을 찍습니다.

그럼 위의 단골들의 Data를 입력해봅시다.

>>Video.Hong.Title = '중년탐정 김정일'
>>Video.Hong.Date = 20090102
>>Video.Hong.Return = true
>>j.Title = '명란젓코난'
>>j.Date = 20090109
>>j.Return = false
>>Video.Jang = j

Workspace에서 새로 만들어진 Video라는 Structure를 더블클릭해서 안을 살펴보세요. 
Hong을 또 더블클릭해보세요~ 정말 폴더랑 비슷하죠?(Version 6.5 이하에서는 안될 수도 있습니다)

>>fieldnames(Video) % field 이름을 반환합니다.
ans =
     'Hong'
     'Jang'

>>Video.Hong
ans =
        Title: '중년탐정 김정일'
        Data: 20090102
     Return: 1

>>Video = rmfield(Video,'Hong'); %remove field 필드를 삭제합니다.
>>Video
ans = 
     Jang : [ 1 x 1 struct ]

Structure를 접근하는 방법과 입력하는 방법이 이해가 가시나요?

34z7V3ujiO4dmhzaXnAAuATll1XSUp50XYdOBJz7PP66jrJKEpK7mvmU7IibzNLG4-ZE69XeGjt981GMIV2f_bBEj-yla9i3N9Gy4-JypPlJ8YHP9sc

이번에는 Cell 이야기 입니다.
Matrix는 각 방에 같은 종류의 Data만 담을 수 있습니다. 
한 Matrix는 Double이면 Double, Character면 Character 등등 한 종류 밖에 담지 못합니다. 
Double형 Matrix라는 말은 그 Matrix가 Double형의 Data 밖에 담지못한다는 말입니다. 
그에 반해 Cell 이란 그릇은 모든 종류, 다른 크기의 Data를 함께 담을 수 있습니다. 
모 TV광고처럼 Cell은 정말 '묻지도 않고 따지지도 않고 모두 담아드립니다. 월 29900원으로 모시는 고품격 Cell 서비스!' ㅋㅋ
위의 그림의 윗줄만 cell로 만들어 봅시다.

>>Cell = { 5  [1 2 ; 3 4] 'Hello' }
ans =
     [5]   [2x2 double]   'Hello'

Cell은 Matrix와 다르게 { , }로 묶어줍니다. 

참조하는 방법도 조금 다름니다.
>>Cell(1,2) % 괄호로 참조하면 참조한 Cell을 통채로 Cell 형식으로 반환합니다.
ans =
     [2x2 double]

>>Cell{1,2} %  { , }로 참조하면 참조한 Cell 안의 내용물을 반환합니다.
ans =
     1     2
     3     4

>>Cell{1,2}(2,1) % { , }로 참조한 Cell의 내용물의 (,)로 참조하는 값을 반환합니다. 
ans =
      3
-_-;; 아놔~ 뭔말인지... 다시 풀어 써봅시다. Cell{1,2}가 [1 2 ;3 4]이죠?  이 [1 2 ; 3 4]에서 (2,1)을 가져오겠다는 말~~
cellplot 함수를 사용하시면 cell이 어떤 구조로 되어있는지 그림으로 보여주니까 참조하세요~


마지막으로 Function Handles !!
프로그래밍에서 핸들(Handle)이라는 것이 무엇일까요? 부릉~ 부릉~ 자동차 핸들입니까?? 
핸들이 뭘까요? 프로그래밍에서 핸들이란 한마디로 컴퓨터상의 '주민등록번호'라고 생각하시면 됩니다
주민등록번호가 겹치는 사람은 없죠? 이놈의 컴퓨터가 일을 할때 내부적으로 함수든 뭐든간에 관리를 위해
모든 자원에 대해서 고유한 주민등록번호를 부여한다 이겁니다.
그 고유번호가 핸들.

>>h = @plot;
plot이라는 함수의 주민등록 번호를 h에 저장하겠다는 말입니다.
그럼 h는 plot을 가르키겠죠? 다른 말로 하자면 plot을 h라는 별명으로 부르겠다는 거죠. 
고교시절 출석을 부를 때 이름을 부르지 않고 번호를 부르듯이 말이죠. 
h는 plot을 대변하니까 h를 plot처럼 사용할 수 있습니다.

>>h(1:10)
어떻습니까? 정말 그래프가 그려지는 군요. 
(Version 6.5 이하에서는 error가 발생할 수도 있습니다.)

그런데 왜 이런 Handle을 쓸까요?
여러가지 이유가 있겠지만 한가지만 예를 들어보죠. test.m 함수를 하나 만들어 줍시다. 

function test(a)
    plot(a(0 : 0.01 : 10));

Command Window에서
>>test(@sin)
>>test(@cos)

놀랍군요!! 함수 자체를 변수로 넘길 수 있다니!!


자~ 오늘은 여기까지 입니다.
그럼 다음 시간에 뵙겠습니다 .꾸벅.
profile