타입 코드(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. 순수 가상함수와 추상..