[네이버 지식백과]state 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 스테이트 패턴은 좀 헷갈리는 부분이 있습니다. 대부분의 패턴은 if 문과 같이 버그를 유지보수나 버그를 양산하기 쉬운 코드를 없애고 확장하기 쉽게 하도록 구조를 가져갑니다. 이중 스테이트 패턴은 각 상태가 바뀔 때 마다 늘어나는 if문을 없애는 패턴입니다. 즉 상태들 끼리 서로의 상태를 바꿔가며 동작하기 때문에 유지보수도 쉽고 확장도 용이합니다. 그러나 상태변화에 대한 명확한 이해와 구조를 어떻게 가져가야 할지에 대한 고민이 필요합니다. 다소 생소하게 보일지 모르지만 한번 구현해 보도록 하겠습니다.예제는 아주 단순한 불을 끄고 켜고하는 기능을 스테이트 패턴으로 구현해 보았습니다. 실제로 구동해..
과연 C로 Class를 만들 수 있을까요? 완벽한 Class를 만들 수는 없지만, 비슷하게 만들 수 있으며 Class와 동일한 역할을 하게 할 수 있습니다. C에서 typedef와 structure 그리고 함수 포인터를 이용하면 class를 따라서 만들 수 있습니다. 여기서 왜 C로 그런 뻘짓을 하냐고 물어보신다면, 이번 챕터에서는 딱히 할말이 생각나지 않습니다. 하지만 분명한 것은 그 뻘짓은 자바를 이해하는데 도움을 주기도 하고 좀 더 효율적은 C프로그램을 가능하게 합니다. 여기서의 예제는 극단적인 C Class입니다. 실제로 이렇게 사용한는 예는 정신이 나간 프로그래머 이외에는 없을 것입니다. 그냥 이렇게 있구나 정도만 이해했으면 좋겠습니다. 이미 알고 있거나 더 좋은 방법이 있다며 댓글을 남겨주세요..
첫번째로 typedef에 대해 먼저 살펴보겠습니다. C언어에서 typedef 는 새로운 타입을 만드는 지시어입니다. bool 타입은 true, false를 가지고 있는 기본적인 타입인데, 아쉽게도 C언어 안에는 bool 타입이 없습니다. 다행히도 아래 코드와 같이 typedef를 통해 간단하게 bool타입을 만들 수 있습니다. typedef enum { false = 0, true = 1 }bool; bool isRegistered; isRegistered = false; if(isRegistered == true) { printf("It is registered!"); } 좀 더 활용해 보겠습니다. 아래 예는 네자리 숫자를 네개로 분리하는 새로운 타입입니다. typedef struct { u8 D0; ..
자바의 Class는 마치 C의 typedef와 비슷해보입니다. 그러나 실제로 많은 차이가 있습니다. 자바 Class는 생산성과 효율성을 높이기 위해, 궁극적으로 객체지향을 목표로 만든것이 이므로 typedef보다 훨씬 사용하기 편하다. 자바에서는 궁극적으로 Class를 통해 instance를 만들어 냅니다.자바에서 다음 구문Class class = new Class(); 는 무엇을 의미할까요?이것은 class라는 이름의 메모리를 확보한 후 포인터를 넘겨준것과 같은 효과를 냅니다. new와 동시에 memory allocation이 발생한 것입니다. 메모리를 확보했으니 사용 후 반환을 해야 하는데, 자바는 가비지 콜렉션이 알아서 해줍니다. 로컬영역에서 빠져나오면 로컬변수가 없어지는 것 처럼.C는 다릅니다. ..
객체지향 언어에서 패턴은 어쩌면 매우 당연한 프로그램 기법이라고 할 수 있습니다. 패턴은 객체지향 언어의 지향점을 잘 살리도록 하면서 개발의 재미와 더불어 효용성을 높이는 역할을 하기도 합니다.물론 협업을 하거나 짝프로그램, 소스를 공유할 때 타인도 패턴에 대해 이해도가 높아야 패턴의 활용도가 높아지며 커뮤니케이션에 문제가 없을 것입니다. 그런데, C와 같은 절차적 언어에서는 사용하기 어려울 까요? 이제 시작할 C언어의 패턴은 객체지향 언어에서 패턴을 다소 억지로 따왔습니다.굳이 이렇게 까지 구현 해야하나 생각이 들수도 있으나, 옳고 그름을 떠나 프로젝트에 맞는 것을 선택하는 것이 최선입니다. 이제 억지스런 C 패턴을 천천히 시작해 보도록 하겠습니다. 물론 제가 올린 내용 틀릴 수도 있다. 무조건 옳겠지..