[Eclipse] 폰트 색상 변경

이미지
이클립스에서 아래 이미지와 같이 Window - Preferences 메뉴를 선택한다. 메뉴를 클릭하면 아래 이미지와 같은 창이 뜨는데 아래 이미지와 같이 Java - Editor - Syntax Coloring 메뉴를 선택한다. 아래 이미지에서 빨간 네모로 표시된 부분에서 항목 하나하나 체크하면서 폰트 색상과 기울임 등을 설정한다.

[C#] 접근 불가능한 폴더를 제외한 모든 폴더에서 파일 리스트 얻어오기

private void GetFileList(string strFolder) { int folderIdx = 0; string[] folders; try { folders = Directory.GetDirectories(strFolder, @"*", SearchOption.TopDirectoryOnly); } catch { return; } if (folders.Length != 0) { for (folderIdx = 0; folderIdx < folders.Length; folderIdx++) { GetFileList(folders[folderIdx]); } } DirectoryInfo di = new DirectoryInfo(strFolder); foreach (FileInfo fi in di.GetFiles(@"*.*", SearchOption.TopDirectoryOnly)) { listBox1.Items.Add(fi.FullName); } } 탐색 대상을 C:\로 했을 때 메모리 부족으로 죽는데... listBox1.Items.Add 부분이 문제가 되는건가...?

[C] 프로그래밍 방법의 3가지

출처 - 한눈에 보이는 C프로그래밍(무작정 따라하기) 순차적 프로그래밍 컴퓨터가 처리해야 할 순서에 따라 기술하는 방식. 한 번에 하나의 작업만을 할 수밖에 없다는 단점이 있지만 프로그래밍의 구조가 간단하고 작성하기도 쉽기 때문에 지금도 종종 사용되고 있다. 구조적 프로그래밍 기본적인 개념은 중복되어 사용할 수 있는 기능을 하나로 묶는다는 것이다. 다시 말해, 서로 다른 프로그램이라고 할지라도 같은 기능을 사용해야 할 경우라면 굳이 프로그램마다 이 기능을 위해 똑같은 소스 코드를 생성할 필요 없이, 공통 부분의 소스코드를 만들어 놓고 필요한 프로그램에서 이 코드를 사용하면 된다는 것 이렇게 공통적으로 사용할 수 있는 기능을 묶어놓은 것을 모듈 이라고 한다. C언어에서는 함수라고 부른다. 비슷한 기능을 하는 함수들을 묶어놓은 것을 라이브러리라고 한다. 단점으로는 기능별로 분리하여 함수를 만들도록 되어 있기 때문에 필요한 데이터라도 기능에 따라 분리된다는 점과 구조적 프로그래밍으로 작성한 프로그램들은 재사용이 생각보다 어렵다는 점이 있다. 객체 지향 프로그래밍 공통적으로 사용할 수 있는 기능을 따로 추려서 만든 것을 함수 라고 하고 객체 지향 프로그래밍 방법에서는 기능을 따로 추릴 때 그 기능과 관련된 데이터를 함께 묶어서 프로그램을 만드는 개념이 있는데 이것을 클래스라고 한다. 기능과 데이터를 하나로 묶을 수 있기 때문에 구조적 프로그래밍 방법에 비해 프로그래밍 과정이 훨씬 간단해졌다.

[C] 컴파일러와 인터프리터의 차이점

출처 - 한눈에 보이는 C프로그래밍(무작정 따라하기) 인터프리터(Interpreter)도 컴파일러와 비슷한 역할을 한다. 텍스트로 되어 있는 소스 파일을 CPU가 이해할 수 있는 이진 코드로 변환해준다. 그러나 컴파일러가 소스 파일을 번역하여 이진 파일인 오브젝트 파일을 생성하는 것이 비해, 인터프리터는 소스 파일을 한 줄씩 읽어서 이진 코드로 바꾸어 CPU가 바로 실행할 수 있도록 해준다. 이런 특징은 간단한 프로그램의 경우에는 소스 파일을 실행하는 데 컴파일과 링크 등의 과정이 필요없으므로 편리할 수는 있지만, 실행 파일이 생성되지 않으므로 소스 파일을 실행하기 위해서는 항상 인터프리터가 필요하다. 또한, 소스 파일의 첫 번째 줄부터 한줄씩 실행되므로 프로그램의 실행 속도가 컴파일러에 의해 생성된 실행 파일보다 현저하게 느리다.

[C] 컴파일과 빌드의 차이점

출처 - 한눈에 보이는 C프로그래밍(무작정 따라하기) 컴파일(Compile) 이란, 텍스트 형태로 되어 있는 소스 파일을 기계어 파일(바이너리 파일, 이진 파일)로 만드는 과정을 의미한다. 단순히 텍스트 파일로 되어 있는 것을 해당 프로그래밍 언어의 문법에 맞는지 검사하여 특별한 오류가 없다면 기계어 파일로 변경해 준다. 그러나 컴파일 된 파일은 실행 파일이 아니다. 다시 말하면 우리가 윈도우 환경에서 실행할 수 있는 .exe 파일의 형태가 아니라는 의미다. 비주얼 C++에서는 .c로 되어 있는 소스 코드를 컴파일하면 .obj 파일로 변환한다. 마찬가지로 리눅스나 유닉스에서도 .c로 되어 있는 소스 코드를 컴파일하면 .o 파일로 변환한다. 이와 같은 obj 파일이나 .o 파일을 일반적으로 오브젝트(Object) 파일이라고 부른다. 빌드(Build) 는 기본적으로 실행 파일을 만드는 것을 의미한다. 사실상 하나의 소스 파일이 하나의 실행 파일로 생성되기 위해서는 컴파일(Compile) 과정과 링크(Link) 과정을 거쳐야 한다. 링크(Link)라는 것은 말 그대로 실행 파일로 만드는 데 필요한 기능들을 컴파일 된 파일에 연결시킨다는 의미이다. 따라서 .c 파일을 컴파일한 후에 생성된 오브젝트 파일들을 이용하여 링크 작업을 해야 .exe 파일이 생성된다. 비주얼 C++에서는 빌드를 통해서 링크(Link)과정을 실행한다. 만약 .c 파일이 컴파일되어 있지 않은 상태에서 빌드를 실행하면 컴파일과 링크를 모두 실행하며, 이미 .obj로 컴파일 된 파일이 존재하면 빌드를 실행했을 때 컴파일 작업을 생략하고, 링크 작업을 한 후에 실행 파일을 생성하게 되는 것이다.

[C] 오류와 경고의 차이점

출처 - 한눈에 보이는 C프로그래밍(무작정 따라하기) 오류(Error) 는 단 하나라도 발생하면, 해당 소스 파일이 컴파일되지 않습니다. 결국 오류를 모두 수정하지 않고서는 컴파일을 완료할 수 없다는 의미가 된다. 경고(Warning) 는 프로그래머에게 나중에 문제가 발생할지도 모른다는 것을 알려주는 것으로, 컴파일 과정과 실행 파일 생성 과정에는 별 영향을 미치지 않고 무사히 진행된다. 흔히 1~2년 정도 경력을 가진 프로그래머들은 이러한 경고 메시지를 무시하는 경향이 있는데, 이것은 결코 좋은 프로그래밍 습관이 아니다. 오류가 됐던, 경고가 됐던 메시지로 출력된 내용을 보고 오류나 경고가 나타나지 않도록 소스 코드를 올바르게 수정하는 습관을 가져야 한다. 나중에는 무시했던 경고들이 쌓이고 쌓여서 치명적은 오류를 만들어낼 수도 있기 때문이다.

Microsoft Windows에서의 system32폴더와 syswow64폴더

64비트 윈도우즈에서 GetSystemDirectory 함수를 호출하면 어떤 결과가 나올까. 만약 32비트 프로세스에서 실행을 한다면 c:\windows\system32 가 나오게 된다. 그리고, 64비트 프로세스에서도 마찬가지로 c:\windows\system32 가 나오게 된다. 하지만 이건 같은것이 아니다. 32비트 프로세스에서 c:\windows\system32 폴더에 뭔가를 쓰게 되면 실질적으로는 c:\windows\syswow64 폴더에 써지게 된다. 즉, 내부적으로 저렇게 리다이렉트가 되는 것이다. 경로를 코드상에 c:\windows\system32 로 하드코딩한 경우도 있을 것이고 GetSystemDirectory 같은 함수로 구했을 수도 있을 것이다. 두 경우 다 보이기에는 c:\windows\system32 로 보이지만, 운영체제 내부적으로 syswow64 폴더로 리다이렉트를 해주게 된다. 이렇게 64비트 운영체제에서 32비트 프로세스가 호환되도록 해놓은 것이다. 64비트 프로세스에서는 c:\windows\system32 가 코드상으로나 물리적으로나 시스템 폴더가 된다. 용어상으로는 32비트 프로세스는 system32, 64비트 프로세스는 syswow64 일거 같으나, 위와 같이 전혀 그렇지가 않은 것이다. SysWow64 폴더는 32비트 프로세스를 위한 폴더인 것이다. 간단한 테스트로, 탐색기로 c:\windows\system32에 있는 cmd.exe 와 c:\windows\syswow64 에 있는 cmd.exe 를 실행시킨다. 작업 관리자로 보면 system32에 있는 cmd.exe는 64비트로 실행되고 있고, syswow64에 있는 cmd.exe는 32비트로 실행된다. syswow64에 있는 cmd.exe 에서 경로를 cd c:\windows\system32 로 옮겨 본다. 그런 후 그 폴더로 파일을 하나 복사해본다. 탐색기로 그 복사된 파일을 찾아보면 c:\windows\system32 폴더에는 없고...

코딩 습관

1. 함수(매서드) 내에서 return문을 여러 번 쓰는 것보다 가능하면 변수를 사용해서 리턴값을 저장했다가 마지막에 한 번만 사용하는 것이 좋다. int max(int a, int b) { int result = 0; if(a > b) { result = a; } else { result = b; } return result; } 2. 객체지향 코드를 작성할 시 인스턴스 변수를 사용하지 않는 함수(메서드)가 있을 경우 static을 붙이는 것을 고려한다. static을 안 붙인 메서드(인스턴스 메서드)는 실행 시 호출되어야 할 메서드를 찾는 과정이 추가적으로 필요하기 때문에 시간이 더 걸린다. 3. 하나의 함수는 특수한 경우가 아니면 하나의 기능만 하도록 한다. 4. 주석은 필수다. 5. 단순하고 보기 쉬울수록 좋은 코드다. 6. 상수 값들은 따로 한군데에 모아서 관리하는게 편하다. 버튼에 들어가는 텍스트라던지... 아니면 나중에 일일이 화면마다 찾아서 수정해줘야 함 7. 내 생각이 맞다는 생각은 하지 말아라. 항상 틀릴수도 있다고 생각하라. 내가 틀리고 남이 맞을수도 있다. 8. 배우는걸 창피해하지 말아라. 초등학생 아니 유치원생한테도 배울게 있다면 배워라. 9. 빈번한 함수 호출은 속도 저하를 가져온다. 10. 되도록이면 실수형을 사용하지 마라. 마찬가지로 속도 저하를 가져온다. 11. 반복문 내를 최대한 간단하게 하라. 12. 재귀 호출은 사용하지 마라. 13. 불가피한 경우가 아니라면 표준 라이브러리를 사용하자. 14. 비슷한 이름(변수명)들을 함께 쓰는 일은 피할 것. 15. 이름(변수명) 짓는 방식은 일관성을 유지하자. 16. 이름(변수명)을 선택할 때는, 구현에 신경 쓰지 말고 의미에 각별히 신경 쓸 것. 17...

함수 주석 양식

/******************************************************************************** * 간단한 설명 : * 매개변수로 넘겨준 사이즈만큼의 별로 된 나비 넥타이 모양을 그려줌 * 파라미터 : * int size - 그려줄 나비 넥타이의 크기, 3이상의 홀수 * 리턴 값(int) : * 0 - 정상 종료 * 추가 설명 : * 함수 구현 제한 조건 - 두개의 반복문과 하나의 조건문 * 사용 예 : * Drow_NAVI(7); * 만든 사람 : * Moong * 만든 날짜 : * 2023년 01월 26일 15시 50분 * 최종 수정한 사람 : * Moong * 최종 수정 날짜 : * 2023년 01월 26일 15시 50분 * 참고 : * 서적 또는 블로그 주소 등등 *********************************************************************************/ int Drow_NAVI(int size) { int height = 0, width = 0; int head = 0, tail = 0; int i = 0, j = 0; height = size;  //줄수 = 5줄, 리본의 크기, 홀수만 입력 width = height;  //칸수 = 5칸 head = 1; tail = width - 2; system("cls"); for (i = 0; i < height; i++) // 줄 { for (j = 0; j < width; j++) // 칸 { (i != (height / 2) && ((j >= head && j <= tail) || (j >= tail + 2 && j <= head - 2))) ? printf(" ") : printf("*"); } head++; // 그 다음 ...

C++ 창시자의 조언

인터넷에 떠돌아다니는 글을 가져온건데 실제 비야네 스트롭스트룹(Bjarne Stroustrup)이 쓴 글인지는 모르겠음. C++ 창시자의 조언 1 1. 프로그래밍이란 어떤 문제에 대한 해결책 안에 여러분의 아이디어를 구체적으로 표현한 문장을 써 넣는 것이다. 프로그램의 구조는 이런 아이디어를 최대한 직접적으로 드러내도록 하자. a. 별도의 아이디어로 생각되는 '것'은 클래스로 만든다. b. 별도의 개체(entity)로 생각되는 '것'은 클래스의 객체로 만든다. c. 공통의 인터페이스를 가지면, 이 인터페이스는 추상 클래스로 만든다. d. 두 클래스의 구현 코드가 주요 부분에서 똑같으면, 공통된 부분을 뽑아 기본 클래스로 만든다. e. 객체의 컨테이너가 될 클래스는 템플릿으로 만든다. f. 컨테이너에 대한 알고리즘을 구현하는 함수는 동일 계열의 컨테이너군에 모두 적용할 수 있는 알고리즘을 구현하는 템플릿 함수로 만든다. g. 어떤 클래스, 템플릿이 서로 논리적으로 가까운 관계를 가지고 있으면 이런 것들은 공통의 네임스페이스에 넣는다. 2. 배열이나 복소수처럼 수학적 의미를 가진 개체를 구현하지 않은 클래스를 정의하거나 연결 리스트 같은 하위 수준 타입을 정의하는 경우에는 다음을 따른다. a. 전역 데이터를 사용하지 않는다(멤버를 사용한다). b. 전역 함수를 사용하지 않는다.  c. public 멤버 데이터를 사용하지 않는다.  d. 프렌드를 사용하지 않는다. 단, a와 c를 피하기 위한 경우는 예외이다. e. 클래스에는 '타입필드'를 넣지 않는다. 대신에 가상함수를 사용한다. f. 인라인 함수를 사용하지 않는다. 단, 무시할 수 없는 최적화가 필요한 상황에서는 예외이다. C++ 창시자의 조언 2 1. 어떤 문제에도 당황하지 말자! 시간이 약이다. 생각하고 생각하면 풀린다. 2. 훌륭한 프로그램을 만들기 위해 C...

질문하는 법

서론 누구나 프로그래밍을 하다보면, 모르거나 막히는 부분이 생깁니다. 문제를 어떻게 해결 할 것인가는 수많은 방법이 존재하겠지만, 그 방법조차 모를경우 우리는 타인에게 도움을 요청합니다. 다행히도 프로그래머에게 허용된 몇 안되는 커뮤니티가 아직 존재하기에 우리는 익명의 누군가에게 도움을 요청하고 그 해답을 얻을 수 있는 기회를 얻게 된겁니다. 다만, 질문의 방법을 몰라 제대로 된 답변을 얻지 못하거나 무시당하는 경우가 비일비재 하여 몇가지 적어볼까 합니다. 다음 항목들을 가능한 지켜준다면 누군가의 마음을 움직여 좋은 답을 얻을 수 있지 않을까요? (본문에 사용된 예시는 게임코디 연구소 질답란에서 발췌, 가공했습니다) 명심할 것 - 질문하는 상대는 선배입니다. 가끔, 반말이나 통신체등으로 질문하는걸 보는 경우가 있는데, 이것은 예의에 어긋나는 행동입니다. 친근함을 표현하고 싶을지 모르겠지만 보는 사람에겐 기분나쁜 태도가 될 수도 있는겁니다. - 대답하는 사람이 시간이 남아돌아서 대답해주는게 아닙니다. 질문하기 전에 내가 충분히 노력했는지에 대해 다시 생각해보세요. 답변자의 시간의 가치는 상상을 초월하는 가격입니다. - 답변자는 돈을 받고 답변해주는게 아닙니다. 숙제 해결을 묻거나 코드 분석을 의뢰하지 마세요. 제목 짓기 - 질문에 관련된 제목을 적으세요. 간혹, '도와주세요', '살려주세요' 등의 제목을 보는데, 이런건 119게시판에 적으세요. 답변자가 클릭해서 본문을 읽는 시간조차 상당한 값어치를 한다는 점을 명심하세요. 제목은 짧되 한눈에 무엇에 관한 내용인지에 대해 적어야 합니다. - 답변자가 흥미를 느낄 수 있게끔 적으세요. 답변자가 답변을 적는 경우는 '그 항목에 정통했을때' 와 '그 항목에 관심이 있을 때' 입니다. 제목이 모호...

Path(경로) 네이밍

어디 규칙이나 관습 같은게 아니고 변수명 지을 때마다 헛갈려서 내 맘대로 정의한 것임 FilePath (or Path) - C:\Dir\fileName.dll FileDir (or FileDirectory or Directory) - C:\Dir FolderName (or Folder) - Dir FileName (or Name) - fileName.dll FileExtension (or Extension) - dll

인증서(certmgr.msc)의 실제 저장 위치 (공인인증서 아님)

%UserProfile%\AppData\Roaming\Microsoft\SystemCertificates\My\Certificates 인증서 더블 클릭했을 때 "자세히" 탭에서 "필드" 값 지문(Default인 경우 맨 아래에 있음)의 값이 위 경로의 파일명과 일치.

[Delphi] 델파이 산술 연산문

키워드 설명 예 비고 + 더하기 3 + 2 = 5 - 빼기 3 - 2 = 1 * 곱하기 3 * 2 = 6 div 정수 나누기 3 div 2 = 1 / 실수 나누기 3.0 / 2.0 = 1.5 mod 나누기의 나머지 5 mod 3 = 2 C언어에서 %와 동일

[Delphi] edit에 숫자만 입력하기

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key in ['0'..'9', #25, #08, #13] then else begin Key := #0; ShowMessage('숫자만 입력하세요'); end; end;