Rezzo에 대한 3가지 불만 : C언어 버전

제 차는 레조입니다. LPG를 사용하고, 수동 변속기와 수동 에어컨을 장착했습니다.
원래 차라는 것이 운용하다 보면 불만이 생기기 마련이겠죠.
차를 운영한지 2년이 좀 넘었는데, 시간이 좀 되니까 이런 저런 불만들이 구체화되어 가더군요.

이리 저리 말로 표현할 수 있는 불편들(차의 모양이 곡선이라서 운전석에서 평행 맞추기 어렵다는 등의 원시적인 것들) 말고, 설명하기는 복잡해서 차라리 C언어 스타일로(즉, 인간보다는 차라리 컴퓨터가 알아듣기 쉬운 표현으로) 표현하는 것이 더 나을 것 같아 C언어 스타일로 표현해보기로 했습니다.



사용자 삽입 이미지
1. 파워윈도우

문제점 : 인간 언어 버전
  1. Lock(잠금 스위치)이 걸린 상태에서 운전석이 아닌 자리에서 버튼을 누를 때 운전석에서 같이 누르면 운전석의 버튼도 동작하지 않는다.

  2. 운전석 윈도우는 내릴 때 (살짝 누르면 일반 모드로 동작하고, 꽉 누르면 자동 모드로 동작하는 것이 상식적이나) 무조건 자동(Auto) 모드로 동작한다.
네. 몇 줄 되지 않지만, "이해하기 어렵습니다." 제가 썼지만요.


문제점 : C 언어 스타일 버전

void 운전석윈도우스위치()
{
      if (눌렀는가)
            if (자동으로 내려가고 있는가) 내려가기 중지;
            else 자동으로 내려가;
      else if (당겼는가) 올라가;
}

void 나머지윈도우스위치()
{
      if (Lock && (각 자리 눌렀는가 || 각 자리 당겼는가)) return;
      if (운전석 눌렀는가) 내려가;
      else if (운전석 당겼는가) 올라가;
      else if (각 자리 내렸는가) 내려가;
      else if (각 자리 당겼는가) 올라가;
}



버그수정 : C 언어 스타일 버전

void 운전석윈도우스위치()
{
      if (꽉 눌렀는가)
            if (자동으로 내려가고 있는가) 내려가기 중지;
            else 자동으로 내려가;
      else if (눌렀는가) 내려가;   //누르는 경우를 구분하는 코드 1줄 추가
      else if (당겼는가) 올라가;
}

void 나머지윈도우스위치()
{
      if (운전석 눌렀는가) 내려가;
      else if (운전석 당겼는가) 올라가;
      else if (!Lock)    // Lock을 구분하는 코드는 여기 위치해야 정상
      {
            if (각 자리 눌렀는가) 내려가;
            else if (각 자리 당겼는가) 올라가;
      }
}



사용자 삽입 이미지

2. 점화스위치/오디오

문제점 : 인간 언어 버전
  1. 점화스위치를 ON→START로 돌리면 오디오 전원이 꺼졌다 켜짐

  2. 점화스위치가 START→ON으로 변할 때는 그런 일 없음
※ 특히 이 문제가 마음에 들지 않는 이유가 있습니다.
    저는 경차인 마티즈(마티즈 1 오리지날 수동)를 탔는데, 마티즈에도 이런 멍청한 문제는 없었습니다.


문제점 : C 언어 스타일 버전

void 점화스위치변경()
{
      switch (현상태)
      {
      case LOCK : 몽땅 끄기;    break;
      case ACC :
            if (시동이 걸린상태인가) 시동끄기;
            if (!(전원이 들어왔는가)) 전원 올리기;
      case ON :     break;
      case START :
            전원 내리기; //이 줄이 왜 있냐구 (1/2)
            전원 올리기; //이 줄이 왜 있냐구 (2/2)
            시동걸기;   //시동이 걸려있더라도 고고씽
      }
}


버그수정 : C 언어 스타일 버전

void 점화스위치변경()
{
      switch (현상태)
      {
      case LOCK : 몽땅 끄기;    break;
      case ACC :
            if (시동이 걸린상태인가) 시동끄기;
            if (!(전원이 들어왔는가)) 전원 올리기;
      case ON :     break;
      case START :
            if (!(시동이 걸린상태인가))  시동걸기;   //이게 맞지 않을까요
      }
}



사용자 삽입 이미지

3. 수동에어컨

문제점 : 인간 언어 버전
  1. 풍량조절스위치에 무관하게 외기차단스위치가 꺼져 있으면 외기가 들어옴

  2. 외기차단스위치가 꺼져있고, 에어컨이 켜진 경우에는 에어컨은 동작하지 않고 외기만 들어옴
풍량이 0이면 아무런 외기도 들어오지 않아야 합니다. 이 문제 역시 마티즈에도 없었습니다!!!


문제점 : C 언어 스타일 버전

void 송풍및에어컨()
{
      if (외기차단스위치 켜졌는가) 외기흡입구 열기;
      else 외기흡입구 닫기;
     
      if (풍량조절스위치 > 0) 에어컨 및 송풍 동작
      else 에어컨 동작 중지
     
      //에어컨ㆍ송풍이  동작하지 않아도 외기흡입구는 열릴 수 있음
}


버그수정 : C 언어 스타일 버전

void 송풍및에어컨()
{
      if (풍량조절스위치 > 0)
      {
            //에어컨ㆍ송풍이 동작하지 않으면 외기흡입구도 닫혀야 정상임
            if (외기차단스위치 켜졌는가) 외기흡입구 열기;
            else 외기흡입구 닫기;
           
            if (에어컨스위치 켜졌는가) 에어컨 동작;
            송풍동작;
      }
      else 외기흡입구 닫기;
}





쉽고 재미있게 표현하려고 했는데, 정작 문제는 GM DAEWOO에서 이 글을 봐줘야 한다는 것과, 이 글을 보는 사람이 C언어를 알아야 한다는 문제가 있었군요. 게다가… 돈이 안 된다는 문제도 있군요. 즉,

bool 읽고서 레조의 문제를 수정(독자 A)
{
      if (!(A가 C언어를 아는가)) return false;
      if (!(A가 GM DAEWOO 직원인가)) return false;
      if (!(A가 GM DAEWOO 에서 직급이 높은가)) return false;
      if (!(이 문제 수정하면 GM DAEWOO에는 돈이 되는가)) return false;
      if (!(GM DAEWOO 사장은 레조를 타는가)) return false;
      if (!(자발적 리콜하면 사장이 좋아하는가)) return false;
    
      수정;
      자발적 리콜;

     
return true;
}

하군요. 흠… 그냥 타야겠네요. 불만을 조용히 삼키고 말이죠.