타입 코드(type code)라는 것은 오브젝트의 종류를 표현하는 값입니다. 어떤 프로그램이 서적, DVD, 소프트웨어를 다룬다고 가정합니다. 그리고 이 상품의 종류를 표현하기 위해 다음과 같이 서적 = 0, DVD = 1, 소프트웨어 = 2라고 int형 값을 할당한다고 하면,이 때, 1, 2, 3 이라는 값이 타입 코드가 됩니다. 그러나타입코드가 int와 같은 기본형이면 문제가 생깁니다. Item* book2 = new Item(1000, "Jobs", 3000);Item* software2 = new Item(Payment::TYPECODE_CREDIT, "Word", 3000);와 같은 코드도 문제 없이 돌아가는데요. 타입 코드의 범위 이외의 값인 1000도, item 타입이 아닌 payment 타..
이번에는 널객체와 타입코드에 대한 이야기입니다. 5. 널객체 파일과 콘솔에서 로그를 기록하는 FileLog와 ConsoleLog 클래스를 구현합니다. 각각의 객체가 존재할 때 Write를 하는 LogService 클래스도 구현합니다. LogService 클래스에서는 run 함수 안에서 FileLog가 null이 아니면 FileLog.write()를, ConsoleLog가 null이 아니면 console.write()를 하게 됩니다. 그런데! 같은 일(write())을 하는데 객체마다 한번씩 여러 번을 처리하고 있습니다. ????????????!!!!!!!!!!!!!!!!!!!! 배운거에요!!!!!!!!!!!!! 이럴 경우 강한 결합Tightly coupling 으로 OCP를 위배합니다. 다형 객체를 하나..
슷타의 마린과 고스트 클래스입니다.class Marine{}; class Ghost{}; 마린(Marine) 부대와 고스트(Ghost) 부대를 동시에 움직이게 합시다.어떻게 하나로 묶어서 보낼까요?드래그로 몽땅 잡아서? g = m; 으로??이는 서로 다른 폼이기 때문에 불가능합니다... 이럴 때, C언어에서는 모든 포인터 묶기 위해 - void* 쓰지요!void* grp1[2] = { &g, &m }; 이런 식으로 말이죠! void main(){ Marine m; Ghost g; void* grp1[2] = { &g, &m };} 이제 상속의 개념이 나오게 됩니다.♥ 다형적 객체를 하나의 타입으로 처리하기 위해 부모 클래스를 도입하게 됩니다. 상속의 특징은1) 재사용성 2) 유지보수성 더불어 3) 다형성..
이번에는 캐스팅에 대해서 공부합니다. 3. 캐스팅퀴즈퀴즈! char* pa = malloc(sizeof(char)); // c(o), c++(x)char* pb = (char*)malloc(sizeof(char)); // c(o), c++(o)위의 두 문장은 C, C++ 환경에서 문제없이 잘 돌아갈까요? (정답은 질문 옆을 아주 잘~ 보면 보입니다.) C언어에서는 명시적으로 형 변환을 하지 않아도 컴파일러는 알아서 잘 짰거니 하고, 개발자를 믿고 실행합니다.논리적으로 잘못됐어도 에러를 내지 않으니 개발자는 월화수목금금금... 이와 달리, C++에서는 타입 체크가 강화되어 타입을 명시하지 않으면 컴파일 에러가 납니다.♥ 따라서 C++에서는 타입을 정확히 명시해주어야 합니다. 그러나 (char*) 이런 식으..
2. 인터페이스 이번에는 핸드폰 예제를 이용합니다! 쌈쏭의 자랑 애니콜(Anycall) 핸드폰의 통화(call)기능을 구현합니다.사람(Person)은 use_phone()을 통해 이 기능을 사용합니다. 싸이언(Cyon) 핸드폰을 하나 더 구매했다고 합시다.싸이언은 통화 기능이 애니콜과 달리 send 함수를 사용하네요.역시 통화하기 위해 Person 클래스에 싸이언용 use_phone()을 구현합니다. 애니콜과 싸이언은 다른 타입으로, 다른 타입의 포인터끼리는 호환이 되지 않기 때문에void use_phone(Cyon *p, const char* n) { p -> send(n); }을 하나 더 만들어주어야 하는 것이죠. 메인함수에는int main() { Person p; Anycall a; p.use_ph..
Refactoring은 내부의 코드를 개선하는 하나의 방법론이자 솔루션입니다.대부분 리팩토링은 OS에 독립적인 Java에서 이루어지는데요.그러나 객체 지향의 내부 구조를 이해를 돕기 위해 C++로 진행하겠습니다. 리팩토링을 한마디로 말하자면, 나쁜 냄새가 나는 코드를 최적화하는 것입니다.여기서 주의할 점은 런타임에서의 최적화가 아니라!코드를 짤 때, 버그 없는 프로그램을 만드는 것입니다.외부 인터페이스는 그대로 두고 내부의 코드만을 개선하여 재사용과 가독성을 높이는 데 목적이 있습니다. 특히 전체적인 아키텍처에서 개선해나가는 디자인패턴과 떼어놓을 수 없는 관계입니다.리팩토링과 디자인패턴의 개념은 동일한데, 바라보는 관점이 다를 뿐 입니다! 이제 본격적으로 리팩토링을 시작합니다. 1. 순수 가상함수와 추상..
지난 해 10월 13일 가트너에서는 2015년도 IT 10대 전략 기술 동향을 발표했다. 가트너는 이렇게 매년 IT업계를 이끌 중요한 기술을 발표하는데, 이렇게 동향을 미리 살펴보면 미래를 내다볼 수 있게 될 거라 믿으며 지금부터 가트너가 제시한 10가지 전망에 대해 살펴보자. 10개의 기술을 크게 가상 세계와 실제 세계의 통합, 어디서나 똑똑하게, 새로운 IT 현실의 3파트로 구분지어놓았다. 가상 세계와 실제 세계의 통합 실제 세계와 가상 세계를 어우르는 것으로, 말 그대로 가상세계와 실세계의 통합에 중점을 둔다. 1위부터 살펴보면, 컴퓨터 에브리웨어, 사용자가 언제 어디서나 어느 기기를 사용해서 컴퓨팅을 할 수 있는 기술이 주목을 받고 성장할 것이라고 한다. 이동성을 가지면서 다양한 스크린과 센서들을..
Support Vector Machine에 대해 공부하기 전에 알아야 할 것들! Linear function은 을 통해 object x= 를 분류하게 된다. 이 때, X는 feature들을 vector로 표현한 것이다. b는 bias이며 wi는 feature xi의 가중치이다. F(X)의 값이 0보다 크면 X는 positive로, 0보다 작으면 negative로 분류된다. 이를 그림으로 표현하면 다음과 같다. 그럼 다차원의 공간에서는 어떻게 표현될까! 1) Linear((직)선의; 선으로 된) function 2) Quadratic((수학) 이차의) function 3) Polynomial (다항(식)의) function을 비교해보자 1) Linear: a sum of weighted features 앞..
WEKA 프로그램은 GUI를 제공하며, 5가지 모드(Explorer/Experimenter/Workbench/Simple CLI)를 제공한다. 직관적인 UI를 제공하여 쉽게 접근가능한 Explorer모드가 보편적으로 쓰이지만, Explorer모드에서 하지 못하는 심도 있는 실험을 위해 Experimenter 모드를 사용한다. 말그대로 실험자를 위한 모드ㅋㅋ Experimenter 모드는 Explorer 모드에 비해 사용법이 복잡하지만 이 또한 직관적이어서 크게 어렵지는 않다. 실험 프로세스를 원하는 대로 직접 제어할 수 있기 때문에 간단하지 않은 실험을 할 때 좀 더 편하게 진행할 수 있었다. 아래는 이안 위튼의 Data mining 책을 바탕으로 정리한 내용이다. 예제 프로세스를 한 번 따라 해본다면 ..