IT이야기/입코딩2017. 6. 26. 16:16

-[IT용어]하드코딩과 날코딩 정의

프로그래밍을 하다보면, 하드코딩을 해놨니, 날코딩을 했니 등등의 이야기를 간혹 듣습니다.

말도 비슷한데, 이 말들이 정확히 하드코딩이 어떤 뜻이고 날코딩이 어떤뜻인지 정의해보겠습니다.



1.하드코딩에 대해서

-하드코딩의 정의

데이터를 코드 내부에 직접 입력하는 것입니다. 

기술적으로는 데이터가 실행 바이너리(exe 파일 등)에 합쳐져 있는 상태를 말합니다. 반대말은 로딩이라 합니다.

프로그램의 소스 코드에 데이터를 직접 입력해서 저장한 경우, 즉 모든 '상수'는 하드코딩입니다. '변수'의 초기값이나 기본값도 하드 코딩입니다. 

기본값 자체를 외부 리소스 파일로부터 읽어서 초기화하는 경우도 있지만 그 '리소스' 파일의 로딩은 실패 확률이 존재하기 때문에 로딩 전까지는 null, 0, nil등의 값이 하드 코딩 돼 있습니다.

주로 파일 경로, URL 또는 IP 주소, 비밀번호, 화면에 출력될 문자열 등이 대상이 됩니다.


-하드코딩의 장점

코드의 목적이 매우 직관적이라 가독성도 괜찮은 편이고 컴퓨터의 입장에서는 타입 체크나 유효성 검사 등이 빠지고 별도의 로딩 절차가 없어서 속도가 올라가므로 정말 절대로 변경되지 않을 것이라고 자신할 수 있는 작은 부분에 한정적으로 사용하면 좋습니다. 

또는 데이터를 수정하면 로직도 수정이 불가피해서 재컴파일을 피할 수 없는 경우에도 하드 코딩이 적절합니다. 

예를 들어 SQL같은 경우에는 조회 변수 외의 식 자체는 하드 코딩하는데 SQL의 식을 변경하면 SQL이 수행된 뒤의 처리 로직 전체도 바꿔 줘야 해서 재컴파일이 불가피해지기 때문입니다.


-하드코딩의 문제점

하드코딩은 프로그램의 유연성 있는 운용이나 향후의 유지보수에 큰 어려움을 줍니다.

예를 들자면, 특정 DB에 접속하여 자료를 조회하는 프로그램에 DB 비밀번호가 하드코딩된 경우, DB의 비밀번호가 노출되어 변경해야 한다면 프로그램 역시 수정하고 다시 배포해야 하는 번거로운 절차를 거쳐야 합니다. 

이런 경우에는 DB 비밀번호를 별도의 파일에 저장하고 불러와 사용하도록 개발하는 것이 적절합니다.

다국어를 지원하는 프로그램의 경우 화면에 출력해야 하는 문자열을 소스코드에서 분리하면 번역과 다국어 지원 작업이 훨씬 수월하게 이루어 집니다. 윈도우 응용프로그램 개발 시 사용하는 String Table이 좋은 예입니다.


2.날코딩에 대해서

-날코딩의 정의

프로그램 개발자들의 은어로 막코딩이라고도 합니다. 

프로그래밍에 도움이 되는 개발도구를 거의 사용하지 않고 오직 텍스트 에디터로만 프로그래밍을 만드는 행위를 말합니다. 반대말은 통합 개발 환경을 포괄하는 WYSIWYG이 있습니다.


-날코딩을 하는 이유

주로 웹개발 하는쪽에서 날코딩을 하는 사람들이 많은데, 웹개발의 특성상 수많은 언어들을 사용하게 됩니다. 

HTML, CSS, JavaScript는 기본에 PHP, JSP, ASP등의 서버 사이드 스크립트와 각종 템플릿 문법, 거기다 DB쿼리를 위한 SQL, 데이터 교환 포맷으로는 XML과 JSON을 사용합니다. 

이게 현업 레벨의 웹 개발에서 요구하는 사실상의 최소입니다. 

이걸 전부 다 통합적으로 지원하는 IDE는 이클립스 정도를 제외하면 거의 없고 그나마도 저것들이 한 파일 안에 다 섞여 있는 경우가 많아 IDE도 헷갈려 합니다. 

이런 상황이니 그냥 텍스트 에디터를 써 버리는 것입니다.

어느정도 프로그래밍에 익숙해지면 개발툴보다 날코딩이 더 빠르고 편해서 이쪽을 택하는 경우도 있습니다. 

Java의 경우 UI를 만들때 적당한 개발툴이 없다보니 역시 날코딩으로 UI를 만듭니다. 

이클립스 플러그인으로 비주얼 스튜디오처럼 UI를 그릴수 있도록 해주는 물건도 있지만 쓰기 불편하고 비주얼 스튜디오에 비하면 불친절하거나 귀찮은 부분들이 많습니다. 

더불어 개인이나 서드 파티에서 만드는 플러그인이라 불안정한 요소도 있고 하여 조금 익숙해지고 나면 코드를 직접 타이핑쳐서 해결하는 경우가 많습니다.

이러한 요소들 외에도 개발툴에서 제공하는 UI 기능을 사용할 때 자동으로 생성해주는 코드가 거지같아서 마음에 안든다는 이유, 개발툴에서 제공하는 소스코드 자동 들여쓰기가 마음에 안든다는 이유 등으로 개발툴은 대충 클래스나 사용할 메소드 틀을 잡는데 쓰거나 아예 컴파일 돌릴 때만 쓰고, 코드 작성은 날코딩하는게 더 편하다는 이유로 텍스트 에디터만 고집하는 사람들도 제법 있습니다. 

코드 작성은 vim/Emacs으로, 컴파일은 gcc와 Makefile로, 디버깅은 로그 찍거나 gdb로 하는 경우가 일반적입니다.


-날코딩을 위한 툴

메모장은 말 그대로 텍스트를 메모하는 용도이기 때문에 날코딩을 하기에 좋은 툴은 아닙니다. 

그 때문에 변수나 메소드 등에 색깔을 넣어 예쁘게 꾸며주고, 함수의 영역을 표현해주거나 여는 괄호와 닫는 괄호 등의 위치를 파악할 수 있게 알려주는 텍스트 에디터들을 애용합니다. 

대표적으로 윈도우 환경에서는 EditPlus나 UltraEdit 등이 있습니다. 

만약 비주얼 스튜디오를 사용한다면 Visual Assist라는 탁월한 도구를 사용할수 있습니다. 

Notepad++(메모장++) 이라는 오픈소스 에디터도 있습니다. 이름이 메모장같다고 해도 기능은 확연히 차이가 납니다. 

유닉스 환경에서는 vim과 Emacs라는 탁월한 에디터계의 2강이 있습니다. 

리눅스 데스크톱 환경에서는 저것보다 더 좋은 에디터를 쓸 수 있습니다. 

맥 환경에서는 XCODE라는 종결자가 있고. 그리고 상용 프로그램인 서브라임 텍스트도 있습니다. 

원래 IDE이지만 언어를 굉장히 폭넓게 지원하는 Visual Studio Code도 IDE치고는 매우 가벼워서 날코딩용으로 쓰기에 좋습니다. 

단 Visual Studio Code는 실행 후 메모리를 좀 많이 잡아먹는 편입니다.


사실 하드코딩은 좀 부정적으로 쓰입니다. 

심각한 경우. 전달 받은값이 로직을 타고 나온게 아니라 하드코딩된 값을 보이면서 정상적인 값인척 하는 경우도 있기 때문이죠.근데 날코등도 하드코딩 처럼 부정적으로 쓰이는줄알았는데, 그냥 IDE를 쓰지 않고 코딩한다 정도의 의미였던거같네요.물론 하드코딩도 어쩔수없이 쓰는게 나을때는 고정된 값을 넣어줘야 합니다.



Posted by Joseph514