즐겁게 개발을...

개발보다 게임이 더 많이 올라오는 것 같은...

블로그/나의생각

[2021.03] Visual Basic 6.0 개발 노하우

다물칸 2021. 3. 19. 15:27
728x90
반응형

VS98의 비주얼베이직 6.0에서의 노하우를 약 6~7년전에 비주얼베이직을 메인으로 했던 어떤 회사에 공유했던 글입니다. 아직도 비주얼 베이직을 사용하고 있는 분들을 위해 올려봅니다. 

 

1. 편의 또는 디자인을 위해서 많은 상용 콘트롤을 사용하지 말아라. 

  - VB런타임도 무거운데 상용 콘트롤까지 덕지덕지 붙어있으면 더 무거워진다. 실행자체가 느려짐.

 

2. 꼭 상수를 선언해서 사용해라. (하드코딩해서 일일히 숫자로 사용하지 말 것)

  - 그 상수가 향후 변경이라도 되면 그거 바꾸는데 골 뽀개진다. 

 

3. 색상을 단조롭게 해라. 

  - 회색,흰색,검정색이 가장 오래간다. 원색은 일주일만 지나도 식상해진다.

 

4. 선언한 객체는 꼭 해제해라. (메모리 문제)

 - VB도 .net만큼은 아니지만 원래 자동으로 메모리 관리를 해주는 방식이라 무심코 지나치면 나중에 골빠개진다. 객체는 nothing로 해제할 수 있으니 꼭 해제한다. 이미지도 로드한 후, 다 쓰면 해제 필요

 - 보이는 부분만 코딩해라. 쓸데 없이 200만 레코드를 모두 메모리에 올릴 필요가 없다. 화면에 보이는 부분만 가져와 보여주자. (이 알고리즘은 게시판 알고리즘이나 스크롤바 내리면 가져오는 방식등이 있음)

 

5. 가급적 함수에 예외처리를 해라. (On error goto err) + 로그처리 꼭 할 것. 

 - 실행 중 런타임 오류 방지. 파일로 로그를 남겨서 어디에서 발생한 오류인지 기록하여 나중에 문제 처리할 때 사용하면 좋다. 

 - 개발 테스트 할 때는 잘되던 것들이 몇일 운영하다가 오류가 나는 케이스도 있다. 원래 하드웨어 쪽 개발 및 테스트를 할 때 꼭 들어가는 것이 에이징 테스트라는 것이 있는데 이상하게 소프트웨어 개발업체는 이 테스트 항목이 없음. 

 

6. 중복되서 사용되는 함수나 클래스는 공용으로 만들어서 사용하자. (그룹프로젝트일 경우 이것을 관리하고 배포/교육하는 1인 관리자가 필요함)

 - 이미 만들어져있는데 사전공지나 교육이 제대로 되어져 있지 않아서 또 만드는 경우 코드는 쓸데없이 늘어나는 것을 방지한다. 

 - 혼자 개발해도 이런 경우 허다함. 

 

7. 쿼리를 하드코딩하지 마라. (밖으로 빼내던가 프로시저/뷰/펑션을 만들어서 사용한다. 후자일 경우 이것을 관리하고 배포/교육하는 1인 관리자가 필요함)

 - 검색이 느려서 쿼리 튜닝만 했을 뿐인데 프로그램을 컴파일하고 버전을 올려야 한다. 추후 버전관리가 힘들어진다.  

 - 기능을 나열하고 그에 맞는 Function ID를 부여한 후, 관리한다. 

 - 검색조건등은 치환법을 사용하면 된다. 프로시저라면 커맨드 객체 이용.

 

8. 배포는 한군데서 하자. 

 - 여기저기서 소스를 내려받아 여기저기서 배포(릴리즈)하면 역시 버전관리가 되지 않는다.

 - 만약 불가피할 경우 주석처리 및 프로젝트가 끝난 후, 그룹원 전체에 대해서 기능 리뷰가 아닌 코드 리뷰를 실시한다. (현재 한달에 한번씩하는 교육은 기능리뷰임)

 - 병원 별 버전은 피할 것. 가급적 통합하여 개발하고 옵션화한다. (여긴 엄두가 안나 시도도 못하는 듯, 마로테크가 이렇게 하다가 부도났는디)

 

9. Msgbox 절대 쓰지 말자. (아래 설명 상태가 필요하면 쓸수도 있다.)

 -. MsgBox가 뜨는 순간 백그라운드 소스는 멈춘다. (ShowDialog와 같은현상)

 -. 서버용/데몬용 프로그램일 경우 사용자 입력이 없기 때문에 이 메시지를 띄우면 프로그램이 안도는 것처럼 보이게 된다. 

 -. 대체용도는 WIN API인 MessageBox를 사용하면 된다. 

 

10. 리스트뷰나 그리드 사용 시 

 -. 레코드가 수십만개를 Load할 때 쿼리는 절대로 느리지 않다. 뿌려줄 때 느릴 뿐

 -. 결과가 수십만개라면 Display되는 영역만 보이게 루틴을 짜야 한다. (방법은 많은데 다 골빠개짐)

 -. 혹은 결과가 100개나 500개이하로만 검색이 되도록 해야 한다. 

 -. doevents를 활용하면 표시가되면서 다음 동작이 가능하므로 응답없음 같은 멈춤현상은 뜨지 않는다. (너무 난무하면 더 맛이 가니 적절하게 사용하자.)

 

11. Doevents 활용 (VB를 쓰레드 처럼 동작하도록 만든다.)

 -. 펑션 2개가 있을 때 둘다 수천만개 레코드를 각각의 그리드에 뿌린다고 상상하자. 

 -. 원래 VB라면 첫번째 펑션에서 수천만개 레코드가 Add될때까지 먹통현상이 발생된다. 

 -. 다 끝나면 두번째 펑션에서 수천만개 레코드가 Add될때까지 먹통현상 발생

 -. 이때 첫번째/두번째 펑션에 Add다음에 Doevents문을 추가하면 동시에 그리드에 Add되는 것을 볼 수 있으며 먹통현상도 사라진다. 

 -. 두개의 펑션 뿐만 아니라 키보드/마우스 이벤트 및 Refresh이벤트 등이 동시에 이뤄진다. 

 -. 진짜 스레드도 서브클래싱을 이용하면 가능하다. 하지만 디버깅하다가 VB IDE가 뻑난다.(뻑나면 디버깅하다가 수정한 코드가 날라감) 이거 도전했다가 맨붕에 빠져 절대 사용하지 않음. 

 

12. 객체 즉, 공용클래스(or DLL)나 사용자 정의 콘트롤을 만들 때, MS가 제공한 기본상속 외에 사용자가 만든 것을 상속받아 사용하지 마라. 

 -. 공용1 클래스, 공용2 모듈등을 서로 상속해서 사용하면 나중에 소스분석하거나 소스를 인계받거나 할때 무지 복잡해져서 보기어려워진다. 

 -. DLL두개를 만들었는데 서로 상속관계가 되면 안된다는 말.

 -. 객체지향프로그래밍(OOP)는 객체하나가 모든 것을 다해야 한다. 를 명심하자. 

 -. 단 공용모듈이 절대 앞으로 변경될 상황이 아니라면 이를 DLL로 만들어 관리할 수는 있다. (버전관리 때문에)

 

13. 숫자 변수 선언 시 Byte선언

 -. Byte - 255, Integer - 65535, Long - 2천만 

 -. 단순 인덱스형 변수를 Byte로 선언했다가 255가 넘어가서 에러난 것을 며칠을 붙자고 삽질을 한적이 있다. 

 -. 정수형 변수를 사용할 때는 수치가 정해진 값이면 해당하는 형을 사용하고 그외에는 Long을 사용한다. 

 -. 그렇다고 무조건 Long을 사용하면 그만큼 메모리를 사용하는 것이기 때문에 프로그램 자체로서의 성능에 문제가 될 수 있으니 자제하자. 

 

 

 

반응형