2015년 5월 29일 금요일

MC 설현



Map, Collection, Set, List, Hashcode


의 약자다. L은 좀 어거지 같지만.

자료구조, 데이터 구조란 용어는 Data Structure에서 나온 용어이므로 사실 상 같다. 객체란 Data Structure 와 Algorithm 밖에 없는 애들이다. 즉, 객체지향 프로그래밍을 하려면 이 두 가지만 알면 된다.

성은 김이요, 이름은 DS... DataStructre는 앞으로 DS라 부르겠다. 무진장 나올 단어라 약어로 쓴다. 
DS = Data Structure, 데이터 구조, 자료 구조,
멤버 변수,... 객체의 상태를 나타내는 전체

알고리즘은 사전에도 복잡하게 나와있는데 간단히 정의하자면 '해법'이다. 앞으로 해법이라고 부르겠다. 해법수학... 종착역은 수학이다.
해법 = Algorithm, Solution, Function,
Method, 방법,... 객체의 행동을 나타내는 전체



Collection

우선 두 번째 Collection 이 큰 개념이다. 다음을 포함한다. 브런치에 표 그리기가 없어서 아쉽다. WORD에서 그린 표는 구려서 다시 그려야 할 듯.

MAP

키를 가지고 있는 게 맵이다. 자동차 키는 자동차를 열 수 있고, 집 키로 집을 열수 있는 게 키의 정의다. 

SET

키가 없고 모두 동기화가 되어 있지 않은 '것' 들이다. 동기화가 되어 있지 않은 것과 동기화된 것의 차이는 자료의 무결성을 보장하느냐 마느냐의 차이다. Process 까지 고려할 필요는 없고 여러 Thread를 생성하지 않거나 많은 요청들이 오지 않는다면, 동기화를 고려하지 않아도 무방하다. 더 쉽게 말하면 백앤드(서버단)는 동기화 고려해야 되고, 프런트 앤드(클라이언트) 단은 Thread 지옥으로 짠 게 아니라면 고려 안 해도 무방하다.

LIST

LIST는 ArrayList만 주야장천 쓴다. 커널이나 임베디드 쪽 스킬을 익히려면 웬만한 것들은 전부 배열로 짜는 습관을 길러야 한다. 그러나 ArrayList는 크기 조절이 자유로워서 많이 쓴다. 최신 기술 조사를 좀 해서 업데이트하여야겠다.

HASHCODE

모든 DS는 배열과 포인터로 구현이 가능하다. 아차차 C에서 쓰는 용어이니 자바에서 쓰는 용어로 하면 배열과 인스턴스 변수(클레스)의 집합체로 구현이 가능하다. HASHCODE는 DS 세계에서 인스턴스 변수나 포인터의 역할을 하는 친구이다. 어떤 클레스를 만들고 고유의 해시코드를 리턴하는 매소드를 만들 수 있다. 객체지향에서 설명했던 [내이름] 과 같은 존재이다. 그래서 포인터나 인스턴스 변수로 말하는 것이다. 해시 코드는 백앤드 프로그래밍할 때 고유의 ID를 뜻하기도 한다. 유사한 객체들('것'들)에 ID를 부여하고 고유 ID를 모아두면 그것이 곧 DS 가 된다.

DS의 결론은 결국 집합이다. DSD라고 해서 데이터 스트럭쳐 다이어그램도 있다. 그러나 벤 다이어그램으로 그려도 된다. 벤다이어그램은 수학에서 가장 기본이 되는 개념이라 상대방이 알아듣기 쉽고 같이 협업하기 쉬운 도구이다. 

DS를 고려할 때 봐야할 것은 딱 두가지다.

안정성
속도

안정성에 null 가능 여부, 동기화 및 Process, Thread 및 사용자 수등이 포함된다. 속도는 입출력 속도를 말한다. 설계한 프로그램과 정렬 여부가 어떤 궁합으로 좋은 퍼포먼스를 내 줄지, key를 쓰는게 효율적인지 아닌지 등 속도와 관련된 모든 것이 포함된다.



온라인에만 적는 사족이지만 필자는 카스퍼스키는 무조건 사서 쓴다. 그렇다고 다른 앱들은 다 불법 쓴다는 말은 아니다. 직장을 옮기고 해당 직장에 다른 백신 라이선스가 있어도 카스퍼스키를 쓰고. 중소기업 때는 전체 백신을 카스퍼 스키로 바꾸기도 하고, 옮긴 직장에서 해당 백신이 없으면 따로 사서 설치한다. V3 안써서 매국노 같지만 V3 사서 쓰는데 랜섬웨어로 데이터 다 날린 (그것도 병원들) 이야기를 꺼내면 아마 조중동 기사에도 날 정도일 것이다. 
안정성을 느꼈을 때 기업에게서 느끼는 신뢰는 여러분도 이미 경험했다. 자신보다 나이많은 금성 선풍기를 보면서 해당 브랜드에 느껴지는 믿음, 그리고 신뢰는 그 무엇보다 바꿀 수 없는 것이다. 카스퍼스키 광고판이 된 것 같은데 개인적 취향이니 참고하기 바란다. 사실 국내 보안 엔지니어들이 되게 박식한데 카스퍼스키를 등에 업으면 밀리지 않는다.(논쟁이 필요할 때 카스퍼스키에서 보안 리포트랑 기술 동향 보안 방법등을 보고 가면 된다 ^^)

애플을 보면서 느끼지만 쉽고, 간단하고 심플하게 만드는게 어렵게 만드는 것보다 수백배는 어렵게 보인다. 이거 증명용 소스 짜고 검수하려면 고생할듯 ㅠㅠ 큰 회사 때 프로젝트 소스들 다 들고 있어야 하는건데 ㅡㅡ;
프로그래밍에서 나오는 많은 개념들이 미묘하게 다르다는 것은 인정한다. 그러나 굳이 회사가 잘되려고, 혹은 개인이 잘되려고 만드는 컴파일러나 새로운 개념들이 CPU의 기본 설계나 벤다이어그램을 벗어나지 못한다는 것은 십년이 넘은 개발자들은 대부분 아는 사실일 것이다. 애플 광고판은 아니지만, 그냥 다른 기업들 문화도 좀 심플하게 바뀌었으면 한다.

기업이 살아야 하니 푸시가 되고 많은 것들을 놓쳤지만 날씨가 좋은 날은 사색하면서 어떻하면 우리 가족이 쓸 프로그램을 안정적으로 만들 수 있을까 고민해 보자. 그 때 비로소 느끼게 된다. 아무것도 아는게 없음을. GCC 5 책 샀더니 컴파일러 옵션만 책 2권이다. ㅡㅡ; 개발하고 싶은 프로그램이 탑재될 CPU 특성이나 궁합은 모른다고 해도 개발자라면 컴파일러 옵션은 다 알아야 하는데 책에 손이 잘 안간지 몇달 되었다. 
자바 개념들도 너무 오래된 것을 기초로 알아서 최신이 있다면 가감없이 채찍질 해 주시길 바란다.
이렇게 사족이 길어지니 ㅡㅡ; 글은 따로 빼서 써야 겠다는 생각을 했다. ㅠㅠ

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...