활동 목표
- CLI 텍스트 에디터 개발하기
- PDCurses 라이브러리를 설치/빌드하고, 함수 살펴보기
활동 결과
PDCurses 간략 소개 및 사용 이유
PDCurses
는 Curses 라이브러리를 Windows 환경에서도 활용할 수 있도록 구현한 라이브러리다.- 원래 Unix 계열 환경에서 많이 쓰이는 Curses를 Windows 콘솔용으로 사용할 수 있게 해주어, 콘솔 창에서 텍스트 기반 UI를 쉽게 구축할 수 있다.
- 텍스트 기반 애플리케이션을 제작할 때, 화면 갱신(새로 고침, 줄바꿈, 위치 이동 등)과 키보드 입력 처리를 효율적으로 처리하기 위해 사용했다.
- 여러 운영체제 간 이식성도 높아, 비슷한 코드로 다양한 환경에서 동작 가능하다.
PDCurses 빌드 과정
- GitHub 클론
- PDCurses clone
git clone https://github.com/Bill-Gray/PDCurses.git
- 디렉터리 이동
- Windows 콘솔 환경(wincon)용 빌드 폴더로 이동
cd PDCurses/wincon
- 빌드 수행
- MSYS2 환경에서 Clang 컴파일러를 사용해 정적 라이브러리(
pdcurses.a
)를 생성 make -f Makefile CC=clang WIDE=Y UTF8=Y
WIDE=Y UTF8=Y
플래그를 사용하면 유니코드(UTF-8) 문자를 처리할 수 있도록 빌드할 수 있다.
- MSYS2 환경에서 Clang 컴파일러를 사용해 정적 라이브러리(
동적 라이브러리와 정적 라이브러리
- 동적 라이브러리(Dynamic Library): 프로그램 실행 중에 로드되는 라이브러리다. Windows의 경우 주로
.dll
(Dynamic Link Library) 확장자를 사용한다. 여러 애플리케이션이 같은 라이브러리를 공유할 수 있어 메모리 사용량을 절약할 수 있고, 라이브러리 업데이트 시 애플리케이션 재빌드 없이 적용하는 것이 가능하다. - 정적 라이브러리(Static Library): 링크 과정에서 실행 파일 내부에 포함되는 라이브러리다. Windows의 경우
.lib
파일, 혹은Makefile
등을 통해.a
파일이 생성되기도 한다. 실행 파일만으로 동작하므로 배포가 간단하며, 런타임 의존성을 고려할 필요가 적다. 대신 라이브러리를 수정하면 재빌드해야 한다.
curses 라이브러리 사용
curses
라이브러리(여기서는 PDCurses를 통해 구현됨)를 사용하면, 콘솔 화면을 다루는 세부 로직을 일일이 작성할 필요 없이 제공되는 API로 화면 초기화, 커서 이동, 텍스트 입력 처리, 색상 속성 등을 빠르게 구성할 수 있다.- 예를 들어,
initscr()
함수는 curses 모드로 진입해 화면을 제어할 준비를 마친다.getch()
함수는 키보드 입력을 기다려 그 값을 반환한다.endwin()
함수는 curses 모드를 해제하고, 원래 콘솔 상태로 복원해준다.
- 이러한 함수들을 활용하면 복잡한 로직 없이도 콘솔 창에서 텍스트 에디터 같은 인터랙티브 프로그램을 비교적 간단히 만들 수 있다.
아래는 코드 일부 예시로, PDCurses 라이브러리를 활용할 때 필요한 일반적 구성이다:
#include <curses.h>
int main() {
initscr(); // curses 모드 초기화
noecho(); // 입력 문자가 화면에 바로 표시되지 않도록 설정
keypad(stdscr, TRUE); // 특수키(화살표 등) 처리 활성화
printw("Hello, PDCurses!\n");
refresh();
getch(); // 사용자 키 입력 대기
endwin(); // curses 모드 종료
return 0;
}
위와 같이 호출을 구성해두면, 이후 화면 출력, 화면 갱신, 키 입력 처리 등을 구현할 수 있다.
참고 자료
'모각코 > 2025 동계 모각코' 카테고리의 다른 글
[2025 동계 모각코] 모각코 회고 (0) | 2025.02.16 |
---|---|
[2025 동계 모각코] 모각코 6차 활동 기록 (0) | 2025.02.13 |
[2025 동계 모각코] 모각코 4차 활동 기록 (0) | 2025.02.03 |
[2025 동계 모각코] 모각코 3차 활동 기록 (0) | 2025.01.28 |
[2025 동계 모각코] 모각코 2차 활동 기록 (0) | 2025.01.16 |