코드 설계에 대해 공부하고 싶었습니다.
Code Complete를 읽던 중 그리고 동료에 의해, 객체지향을 알아야 코드 설계를 할 수 있다는 것을 알게 되었습니다.
그래서 C로 객체지향 프로그래밍을 해보기 위해 Extreme_C를 읽고 있습니다.
파일명의 의미 EC_8_3_8_11_student.h EC: ExtremeC EC_예제8_번호3_코드박스8_번호11_파일명.확장자
따로 실험을 해보는 코드는 파일명에 Expt가 추가됩니다. Expt == Experiment
20250403
시간이 많이 흘렀네요. 객체지향 C 프로그래밍을 어느 정도는 할 수 있게 되었습니다. 당신이 42(Born2Code)를 하고 있다면, 4 circle graphic 과제 전까지는 추천드리지 않습니다. 42(BeyondTheCode)라면 그냥 생각조차 하지 마십쇼. 대부분의 과제는 대형 프로그램을 만들지 않기 때문에, 모든 데이터를 public으로 관리하는 게 더 편합니다. ft_printf(bouns), minishell에 대해서는 고려해볼 수도 있습니다만, 일단 절차지향으로 해보십쇼. 특히 성능을 중요시 한다면 더더욱 절차지향을 고려해보십쇼.
다만 g++ 기반 C++를 깊게 공부하고 싶으시거나, C로 TDD를 하고 싶으시거나, 대형 프로젝트를 하실 생각이라면 의미가 있습니다. Extreme_C에서 가르치는 C의 컴파일 결과가 g++로 CPP를 컴파일 했을 때의 결과가 매우 유사하기 때문에 도움이 될 것 입니다. Testable Code(테스트 가능한 코드)에서 중요한 것은 Dependency Injection(의존성 주입)인데 C의 OOP는 이를 하기가 유용합니다. 대형 프로젝트에서는 실수와 반복을 줄이기 위해 클래스를 만드는 게 편하실 겁니다.
저는 간이 gc(garbage collector)와 errhdlr(error handler)라는 클래스를 만드는데 가장 많이 활용되었습니다. (추후에 올려보도록 하죠) 간이 gc는 단순히 메모리 누수를 방지하는 클래스이며, errhdlr는 간이 errno와 간이 try-catch를 지원하는 클래스입니다. 이 과정에서 객체지향의 편리함 보다 오하려 if-else 기반의 구조적 프로그래밍과 절차지향 프로그래밍의 소중함을 알게 되었습니다.
동료가 말해준 것은 결국에는 아키텍처가(또는 디자인 패턴이) 객체지형 프로그래밍으로(특히 JAVA로) 많이 연구되었기 때문이었던 것으로 해석됩니다. 제가 깨달은 것은 다른 것을 학습하기 보다는 일단 C와 프로그래밍 자체에 익숙해지는 것이 먼저였다는 것이었습니다. 전통적인 C 프로그래밍 만으로도 충분히 쉽게 프로그램이나 함수를 만들 수 있고, 오히려 이해하기 쉽고 논리에 집중할 수 있는 코드를 짤 수 있습니다. 부디 객체지향 C 프로그래밍이나 디자인 패턴을 고려하시기 전에 C문법에 대한 완전한 숙지를 먼저 해보시길 바랍니다. 객체지향 C에서 얻을 수 있는 것은 구조체 사용에 대한 높은 이해와 C에서 정보은닉을 하는 방법이지만, 나중에 하셔도 늦지 않습니다. 앞으로 저는 C 프로그래밍을 객체지향과 절차지향을 섞어서 사용할 것 같습니다. 객체지향적으로만 사고하려는 경향은 오히려 독이 됩니다. 하나의 패러다임에 갇히지 않기를 바랍니다. 20260212