삽질의 현장/- ETC 41

[삽잡이] 직렬화 (Serialization ) & 역직렬화 (UnSerialization)

직렬화란, 말 그대로 직렬로 만들겠다는 뜻이다.그렇다면 역직렬화란? 이또한 역직렬로 만들겠다는 뜻이다. 사실 직렬화라는 단어는 '객체'에 대한 내용이 나오지 않는다면 의미가 없습니다.객체를 어떤 장치에 쓰고, 다시 객체로 복원하는지에 대한 작업이 직렬화와 역직렬화에 관련된 작업이 됩니다. 우리가 만든 객체가 하나 있다고 해봅시다.이때에 이 객체를 똑같이 복원하고 싶을 때 어떻게 할까요?객체는 어플리케이션에 만들어지는데, 프로그램이 죽는 순간 다 날라가버리지 않습니까? 마치 피x온라인에서 전설의 카드로 '베르캄프'선수를 뽑았는데,피x온라인을 종료하자마자 베르캄프가 날라간다고 해봅시다... 하... 이처럼, 어플리케이션을 다시 켰을 때 지금까지 만들어놓은 객체를 복원되게 하고싶다면?이러한 요구로부터 나온 단..

[삽잡이] XML

XML에 대해서 알아볼 기회가 있어서 간략하게(?) 알아봤습니다. XML이란, Mark Up 언어입니다.해당 언어는 확장 가능한 Mark Up Language라는 뜻으로써,대표적인 언어로는 HTML이 있습니다.이 Mark Up 언어의 장점은 말 그대로 Mark Up을 갖는 언어라는것입니다. 일반적으로 파일은 크게 두 가지로 분류를 할 수 있습니다.바로, '텍스트 파일' 과 '바이너리 파일'입니다. 이 둘은 서로 다른 장,단점을 가지고 있습니다.텍스트 파일의 경우 '읽기가 편하다.'는 장점이 있습니다.그리고 바이너리 파일의 경우 '정확한 정보를 찾아내기 쉽다.'는 장점을 가지고 있습니다. 이처럼 텍스트를 사용하면 읽기에는 편하지만 정보를 뽑아오기는 매우 어렵습니다.형식이 없기 때문이지요...즉, 정형화 된..

[삽잡이] 객체지향 - 상속

안녕하세요 삽잡이입니다. 이번 시간에는 상속과 다형성에 대해서 알아보겠습니다. 상속에서는 '코드 재사용'이 가장 기본적인 개념입니다. Object형 하나가 있다고 해봅시다.이 Object를 상속받아서 Car 클래스가 만들어진다고 해보겠습니다.그렇다면 Object에서 만들어졌던 기능을 Car에서 구현할 필요가 없지 않습니까...따라서, Car가 Object 코드를 '재사용'했다고 볼 수 있습니다. 또한 Object를 상속받아서 만들어진 Radio가 있다고 해보겠습니다.이 녀석도 상속을 받고 기능을 재사용할 수 있습니다. 그런데 Car의 클래스에서 Radio 클래스를 사용한다면 어떨까요?Car는 Radio의 기능을 구현하지 않고 기능을 가져다 쓴 것입니다. 이 또한 재사용입니다.하지만, 포함관계이지요... ..

[삽잡이] 객체지향 프로그래밍에서 주의해야할 점

안녕하세요 삽잡이입니다. 이번 시간에는 객체지향 프로그래밍에 있어서 주의해야할 점에 대해서나눠보고자합니다. 캡슐화란, '관련성 있는 것끼리 하나의 묶음, 패킹, 틀로 만들어낸 것'을 의미합니다.즉, 경계를 만들어 내는 것입니다.이 캡슐화를 통해 데이터 보호와 데이터 은닉을 할 수 있습니다. 객체지향에서 기본은 클래스와 객체입니다.클래스는 객체들의 정의입니다.그리고 객체는 클래스의 인스턴스라고 부릅니다. 모든 객체는 '독립적'이어야합니다.예를 들어 '삽잡이'라는 클래스를 통해 만들어진 A객체와 B객체가 있다고 해봅시다.이때, A객체를 건드려도 B객체는 독립적으로 유지되어야한다 이겁니다.이를 '객체의 독립성'이라고 부릅니다.이 객체라는 것은 실제 세계에서도, 가상 세계에서도 독립성을 가집니다.독립성을 가지지..

[삽잡이] 메모리 복사과정

메모리 복사를 하는 'memcpy' 함수, 어플리케이션의 버퍼안에 데이터를 TCP 수준의 Send 버퍼에 복사를 시켜주는 'send'함수, TCP 수준의 Recv 버퍼안에 데이터를 어플리케이션의 버퍼에 복사를 시켜주는 'recv'함수 등등 ... 데이터를 복사시키는 함수의 그림은 아래의 그림과 같다. 저장하고자하는 메모리의 주소(Target Address)에복사를 할 메모리의 시작 주소(Original Address)부터인자로 넘긴 크기(Size)만큼 복사를 해준다.

[삽잡이] 원자적인 연산의 중요성

쓰레드는 독립적인 존재입니다.여러개의 쓰레드가 실행한다면, 각기 자유롭게 실행이 될 것입니다.하지만, 쓰레드를 여러대를 사용할 때에는 반드시 신경을 써야할 일이 있습니다.바로, '동기화'입니다. 여러 쓰레드가 열심히 자기 할일을 하고 있는데,하나의 '공유 변수'를 사용하게 될 때 문제가 발생합니다. 예를 들어, A라는 쓰레드가 데이터를 지우고 있는데B와 C라는 쓰레드는 그 사실을 모른채 A가 지운 데이터에 접근하고자하면 어떻게 될까요? 따라서, '원자적(Atomic)인 연산에 의해 공유 메모리는 아주 잘 보호되어야합니다.'원자는 더 이상 나눌 수 없는 최소 단위의 기본 입자를 말하지요...원자적 연산이란, 따악 하나만... 단 하나만 연산하는 것을 말합니다.연산을 수행하면서 그 누군가의 방해도 받지 않고..

[삽잡이] 유니코드와 멀티바이트코드

안녕하세요 삽잡이입니다. 이번 시간에는 유니코드와 멀티바이트에 대해서 알아보려고합니다. 우선 멀티바이트 코드는, MBCS 즉, 문자 집합을 여러개의 바이트를 써서 표현합니다.유니코드와 멀티바이트는 표현하는 것은 같습니다.하지만, MBCS의 경우 MS에서 만든 것 즉, 표준이 아닙니다.결국 둘의 차이는 표준이냐 표준이 아니냐의 차이이군요... 뭔말이냐면 MBCS 방식은 표준이 아니기 때문에MS계열의 OS가 아니라면 모른다 이겁니다... 인식을 못한다 이거죠... 어찌됬든간에... 지난 시간의 내용을 잠시 복습해보자면...유니코드는 '문자에 대한 정의 숫자'일 뿐입니다. 그 숫자를 어떠한 형태로 정의할 것인지가 인코딩이구요...인코딩 방식에는 여러가지가 있는데 표준이 2바이트로 표현하는 방식이라는 것...그..

[삽잡이] 유니코드(Unicode)

안녕하세요 삽잡이입니다. 이번시간에는 문자 코드에 대해서 알아보려고 합니다. 옛날부터 문자(문자열, 문자 코드)에 대한 많은 코드들이 존재했습니다.모든 컴퓨터는 0과 1의 바이너리 코드를 사용할 수 있는데,따라서 사진, 동영상들은 모두 숫자로 표현되어야 합니다. 이러한 표현을 위해 문자코드가 필요한 것입니다. A라는 문자를 어떤 숫자와 매핑 시킬 것이냐, 즉, 정의할것이냐를 문자코드라고 할 수 있는데요,여기에서 컴퓨터 용어로 사용되는 코드란, '해석해야하는', '해석되어져야하는'으로 통합니다. 어찌됬건, 문자 코드는 여러가지가 있었는데, 지금은 하나로 통합니다.전 세계적으로 표준화 된 문자코드의 집합,전 세계적으로 정의된 Uniqe한 문자 정의 코드...우리는 이를 '유니코드'라고 부릅니다. (자세한 내..

[삽잡이] 0, NULL, \0?

안녕하세요 삽잡이입니다.이번 시간에는 NULL과 0의 차이점에 대해서 알아보려고 합니다. 저와 같은 개발 공부에 관심을 가지고 있는 햇병아리(?)들은 흔히들char* s = 0; 처럼 변수를 초기화 하곤 합니다.해당 코드는 '문자열을 담는 변수 s의 주소는 0이다.' 라고 말할 수 있습니다.그렇다면, char* s = NULL; 과 char* s = 0; 은 과연 어떤 차이가 있을까요?정답부터 말씀드리자면, 같은 기능을 담당하고 있습니다.흠... 0과 NULL은 같다는 것처럼 들리는데요? 우선 0은 정수입니다. 맞습니다. 숫자입니다.NULL은 포인터입니다. 사실 주소는 주소인데 0 주소라고 정의할 수 있습니다.사실 NULL의 원형은 (void *) 형식으로 정의되어 있다는 말입니다. 따라서, 주소가 없다..