기본 콘텐츠로 건너뛰기

UWP 지원 종료 확정? 2025년 이후 WinUI3 전환해야 하는 이유

UWP 를 접한 계기는 마이크로소프트 스토어 때문이었다. 앱을 개발하고 소소한 수익이라도 만져볼 생각이었지만 2024년 11월 UWP에 대한 지원 중단에 대한 포스팅을 발견했고, WinUI 를 접하게 되었다. 둘 다 마이크로소프트 윈도우의 UI 프레임워크지만 UWP 지원을 중단하는 큰 이유는 개발자들의 참여도가 상대적으로 적은 것이 원인이었다. UWP의 지원이 중단되면서 대체재는 무엇일까? 했지만, 마이크로소프트는 WinUI를 권장하고 있다. WinUI는 윈도우 계열의 UI 프레임워크로 간단한 앱은 기존의 WPF , UWP와 흡사하기 때문에 이미 WPF나 UWP에 익숙해져 있다면 WinUI로 빠르게 옮기는 것도 방법일 듯 싶다. 마이크로소프트 UWP 지원 중단과 WinUI 3 권장 UI 프레임워크 UWP 앱, 지금 당장 이전해야 할까? 결론부터 말하면, 모든 UWP 앱을 지금 즉시 WinUI 3로 옮길 필요는 없다. 하지만 “어떤 앱이냐”에 따라 판단은 완전히 달라진다. 아래 중 하나라도 해당된다면, UWP 유지보수는 장기적으로 리스크가 된다. 신규 기능 추가 계획이 있는 앱 Windows 최신 UI/기능을 활용해야 하는 앱 1년 이상 운영 예정인 서비스형 앱 기업/업무용으로 장기 지원이 필요한 앱 반대로, 단순 내부 도구이거나 기능 추가 계획이 없는 경우라면, 단기적으로는 UWP 유지도 가능하다. 중요한 건, ‘지금 이전하느냐’보다 ‘이전을 전제로 설계하고 있느냐’다. UWP 극복하지 못한 비운의 UI 프레임워크 UWP를 처음 접했을 때는 마이크로소프트 스토어 때문이었다. 소소한 윈도우 앱으로 소소한 수익을 기대한 것이지만, 상당히 불편했다. `윈폼보다 못한 기능` 이 한가지만 해도 이미 모든 것을 말해준다. 심지어 WPF보다도 못했다. ( 다행인건 개발환경은 비슷했다는 점에 있다.) 윈도우 계열의 모든 기기에서 사용할 수 있는 `원소스-멀티코드`가 목적이었지만, 욕심이 과했던 것인지 내부의 문제였던 것인지, 문제를 제기해도 UWP에 대한 지원은 미미했다. ...

C언어 exit() 함수 종류와 사용 방법

C언어에서 exit() 함수는 프로그램을 즉시 강제 종료하는 함수이다.

종료의 목적은 여러가지가 있지만, 치명적인 오류로 비정상 동작하는 프로그램를 강제로 종료시킬 수 있으며, 정상적인 종료인 경우 OS에 상태 코드를 포함하여 종료 상태를 전달할 수 있다.

C언어 exit() 함수 종류와 사용 방법
C언어 exit() 함수 종류와 사용 방법

1.C언어 exit() 종료 함수 목적

시작이 있으면 종료가 있다.

C언어 또한 종료를 위한 함수가 존재하는데, exit() 함수이다.

return 이 프로그램 흐름의 종료를 위한 목적이라면, exit() 종료 함수는 윈도우, 맥OS, 리눅스와 같은 OS 시스템에 프로그램의 종료를 명시적으로 전달한다.

프로그램의 정상적인 흐름은 희망사항일 수 있고, 역사가 깊은 윈도우 또한 지금도 유지보수를 위한 업데이트를 꾸준히 하고 있다.

프로그램의 비정상적인 동작은 오류를 발생하고, 하나의 프로그램 때문에 전체 프로그램을 사용하지 못하는 경우도 발생할 수 있다.

이런 예상치 못한 에러들이 발생하여 프로그램이 비정상적인 동작을 멈추고자 할 때 exit() 함수를 사용하여 강제 종료하고 OS 시스템에 프로그램의 종료를 알리고, OS는 프로그램이 사용했던 메모리부터 리소스 등을 모두 회수하도록 한다.

즉, exit() 종료 함수는 프로그램을 강제로 종료하면서 OS에 알리고, OS는 이런 종료된 프로그램이 사용한 모든 요소를 다시 돌려받고, 다른 프로그램의 동작에 문제가 없도록 한다.

단순히 생각하면, 비정상적인 동작 중인 프로그램 강제종료라 생각하자.

우리가 생각하는 윈도우의 Ctrl+Alt+Del 기능의 `작업 끝내기`와 같다.

2.종류와 목적

C 프로그래밍을 하면서 프로그램을 강제로 종료하는 경우들이 있겠지만, 섬세한 조건 처리가 동반되면 이런 종료 함수들은 잘 사용하지 않게 될 것이고, 종료를 해야 하는 특정 조건 만이 눈 앞에 보일 것이다.

어쨌든, return 문 외의 사용되는 시스템적인 강제 종료 방법은 다음과 같다.

  • exit()
    - 정상 종료
  • abort()
    - 비정상 종료
  • _Exit()
    - 즉시 종료

모두 프로그램을 강제 종료하는 것들이며, 일단 이 구문을 만나는 순간 동작 중인 프로그램은 종료되고, 이후 구문은 실행되지 않는다.

3.예제 코드

이제 C언어에서 사용하는 종료 함수 3가지를 사용해 보자.

C언어에서 종료함수는 exit(), abort(), _Exit() 가 있다.

공통점은 종료이며, 각각 정상, 비정상, 즉시 종료라는 차이가 있다.

이들의 차이를 살펴보기 위해 하나씩 코드를 만들어 본다.

3.1.exit() - 시스템에 프로그램의 종료를 알린다.

C언어에서 exit() 함수는 즉시 종료이다.

프로그램을 강제로 종료시키고 시스템 ( OS ) 에 프로그램의 종료를 알린다.

이 때 OS 시스템은 종료된 시스템이 차지한 메모리와 리소스 등을 반환받고 재사용하기 위해 준비한다.

exit() 함수에 파라미터를 추가하는 경우 0 또는 N 의 숫자를 설정하여, 실행할 수 있다.

exit(0) 인 경우, OS 시스템에 프로그램의 정상 종료임을 알리고, exit(1 또는 N)인 경우 비정상적 동작에 의한 종료임을 알린다.

아래는 exit() 함수의 종료에 대한 예제 코드이다.

#include <stdio.h>

/* 함수 선언 */
void CallExit(void);

/* 프로그램 시작 */
int main(void)
{
    printf("\n----- Start 04-Exit \n\n");

    /* 프로그램 종료 */
    CallExit();

    printf("\n----- End \n\n");

    /* 정상 종료 */
    return 0;
}

void CallExit(void)
{
    printf("----- 프로그램 종료\n\n");
    exit();
}

exit() 함수를 호출하는 CallExit() 함수를 만들어 main() 에서 호출하도록 하였다.

exit() 함수를 만나는 순간 프로그램은 중단되며, 이후 코드는 실행되지 않는 것을 볼 수 있다.

종료 함수 exit() 실행결과
종료 함수 exit() 실행 결과

3.2.abort()

C 언어에서 abort() 함수의 목적은 프로그램을 즉시 비정상 종료시키는 것이다.

프로그램이 아무리 잘 만들어 졌다고 해도, 어딘가 버그는 존재하고, 특히 불특정 사용자가 많을 경우 예상치 못한 오류가 발생할 수 있다.

이런 경우 치명적 오류로 인한 프로그램의 정상적인 동작을 할 수 없을 때 abort() 함수를 사용하여 실행 중인 프로그램그램을 종료시킬 수 있다.

다만, 이런 치명적인 오류가 어떤 경우인지 찾는게 문제일 것이며, 지금의 OOP 에서 try~catch 정도로 생각할 수도 있을 것이다.

abort() 함수를 사용하는 예제 코드는 다음과 같다.

#include <stdio.h>

/* 함수 선언 */
void CallAbort(void);

/* 프로그램 시작 */
int main(void)
{
    printf("\n----- Start 04-Abort \n\n");

    /* 프로그램 종료 */
    CallAbort();

    printf("\n----- End \n\n");

    /* 정상 종료 */
    return 0;
}

void CallAbort(void)
{
    printf("----- 프로그램 종료\n\n");
    abort();
}

결과가 조금 다르다.

프로그램이 즉시 종료된 것은 exit() 함수와 같지만 메세지창이 표시된다.

메세지창의 의미는 비정상적인 흐름 때문에 프로그램이 강제 종료되었다는 것을 의미한다.

물론, 이것은 시스템에 abort() 종료 함수를 사용해 시스템 OS에 전달했기 때문이며, 코드 자체로는 정상이다.

종료 함수 / abort() 실행 결과
종료 함수 / abort() 실행 결과

3.3._Exit()

C언어에서 _Exit() 함수는 현재 실행 중인 프로그램을 즉시 종료하는 함수이다.

다만, 종료 과정을 무시하고, OS에 종료를 직접 요청한다는 점에 차이가 있다.

모든 시스템에는 코드와 눈에 보이지 않는 절차라는 것이 있는데, 그 절차를 무시하고 OS에 직접 종료를 알리는 것이다.

요청 보다는 통보에 가깝다고 볼 수 있다.
( 중간 관리자 패싱 ~ 뭐, 이런 느낌이다. )

C언어에서 사용되는 _Exit() 함수에 대한 코드는 다음과 같다.

#include <stdio.h>

/* 함수 선언 */
void CallExit(void);

/* 프로그램 시작 */
int main(void)
{
    printf("\n----- Start 04-_Exit \n\n");

    /* 프로그램 종료 */
    CallExit();

    printf("\n----- End \n\n");

    /* 정상 종료 */
    return 0;
}

void CallExit(void)
{
    printf("----- 프로그램 종료\n\n");
    _Exit();
}

결과를 보자.
즉시 종료하는 상황은 같고, 메세지 또한 다른 즉시 종료 함수와 다르지 않다.

_Exit() 함수 이후 코드는 실행되지 않으며 프로그램은 즉시 바로 종료되었다.

다만, 눈에 보이지 않는 내부적인 프로세스에 따라 차이가 발생할 뿐이다.

_Exit() 함수가 종료 처리 절차를 무시하고, 프로그램을 즉시 종료한 후 종료에 대한 결과만 OS에 요청하는 점에 주목하자.

종료함수 / _Exit() 실행결과
종료함수 / _Exit() 실행결과

댓글

이 블로그의 인기 게시물

C# WinUI 3 - 계산기 만들기 - 개발부터 배포까지 - 마이크로소프트 스토어

마이크로소프트 스토어는 개발한 윈도우 앱을 배포하고 판매할 수 있는 곳이다. 여기서는 시리즈로 해당 과정을 포스팅을 이어갈 것이며, 언어는 C#을 사용하고, UI는 WinUI 3를 사용할 것이다. 제작할 앱은 계산기가 될 것이다. MVP로 하기에도 간단한 것이지만, 일단 뼈대가 있다면 확장이 가능할 것이다. 마지막으로 마이크로소프트 스토어에 배포를 할 것이며, 가능하다면 광고 배너까지 추가하여 다시 배포를 이어갈 것이다. 단, 여기서 고려해 볼 것이 있는데, 광고 배너의 경우 구글 또는 애플과는 다르게 편의성이 많이 부족하다. C# WinUI 3로 계산기 앱을 설계하고 UI 구성, 이벤트 처리, 패키징, MS Store 배포까지 전 과정을 단계별로 정리한 실전 개발 가이드이다. 누구나 따라 할 수 있도록 소스 코드 예제와 빌드, 설치 파일 생성 방법을 공유해 본다. C# WinUI 3 - 계산기 만들기 - 개발부터 배포까지 - 마이크로소프트 스토어 1. C# WinUI 3 - 계산기 만들기 - 개발부터 배포까지 - 마이크로소프트 스토어 일단 시작을 해보자. 과정의 시작은 쉽지만, 끝을 보기 까지는 오래걸린다. ( 포스팅 때문에, 하지만 코드는 이미 완성된 상태이다. ) 마이크로소프트 스토어라는 곳에서 어떻게 무엇을 해야 할지 모르겟지만, 순서는 간단하다. 만들고, 테스트하고, 배포한다. 하지만, 이런 일련의 과정이 쉽지는 않다. ( 번거로울 뿐이다. ) 하나씩 진행해 보도록 하자. 전체적인 내용은 다음과 같다. 2.진행 목표 본격적으로 시작하기 전에 목표를 정해보자. 시리즈로 진행하는 만큼 나름 시간이 들어갈 것 같다. ( AI는 이럴 때 사용하라고 있는 것이다. 더욱이 한 달에 지출되는 책값을 많이 줄였다.) 목표는 `간단한 윈도우용 계산기 앱을 만들고, 마이크로소프트 스토어에 배포하는 것`이다. 최근 새로 출시한 비주얼스튜디오 2026 버전을 사용하여 프로젝트를 진행한다. WinUI3 + C# 코드를 사용하여 앱을 만들고, 테스트를 진행한다. 다운로드 형태...

C언어 return 종류와 차이 / return, return 0, return -1, return n

C언어에서 return은 함수의 실행을 끝내고, 필요 시 동작 또는 결과 값을 호출한 곳으로 함께 전달한다. 리턴의 종류는 크게 4가지로 return, return 0 , return -1 , return n 이다. 결과값이 없거나 0인 경우 종료, 0이 아닌 경우 에러 또는 특정 상태를 의미한다. C언어 return 종류와 차이 1.return 역할 모든 프로그램 언어들은 수행한 처리 결과를 전달할 수 있다. 수행한 처리 결과를 전달하는 때 사용하는 것이 return 이다. return 구문을 활용하면 처리되는 곳의 상태와 값을 알 수 있다. C언어 사용되는 return 구문의 종류는 반환값이 없는 경우와 있는 경우, 반환값이 0 인 경우와 0이 아닌 경우로 나눠진다. 2.프로그램 실행의 최소 단위 함수의 역할 C언어의 함수에 대해 잠깐 언급해 본다. OOP와 같은 프로그램 언어들이 소개되면서 함수란 용어 보다는 메서드란 용어를 주로 사용하는데 뭐, 같은 말이다. 프로그램이 실행되는 최소단위로 보면 된다. 그런데, 함수를 공부하고 있다면 return 구문을 자주 보게 된다. 보통 처리 결과를 호출한 곳으로 되돌리는 역할을 하는 것이 return 구문인다. 여기서 의미하는 함수는 프로그램의 시작점인 main() 함수도 포함된다. 그렇다면 main() 은 return 구문을 어디로 되돌릴까 ? 윈도우 또는 리눅스와 같은 main함수를 실행한 OS 이다. 함수는 이 정도로 간단히 언급해 본다. 3.리턴의 종류 return 의 역할은 프로그램의 흐름을 넘기고, 실행한 결과에 대한 값을 전달한다고 언급했다. 보통의 처리결과는 4가지가 있다. `종료(중단), 성공, 에러(실패), 사용자 지정`이다. 그럼에도 공통점은 처리를 중단한다는 점에 있다. 리턴 결과에 대한 코드와 내용은 프로그램을 제작한 곳마다 사람마다 다르다. 먼저 위에서 언급한 것에 대한 의미를 보자. 프로그램에서 언급하는 것은 좀 더 상세하게 나열 할 수 있다. 주목할 점은 여기에서 언급하는 함수는 프로그...

C언어 printf 사용 방법 콘솔 화면에 문자열 출력하기

C언어에서 printf 는 콘솔 화면에 문자열과 변수 값을 출력하는 필수적인 함수이다. 주로, 프로그램이 정상적으로 동작하는지 중간 또는 최종 결과를 시각적으로 확인할 수 있다. 개발 중에 변수 또는 프로그램의 흐름을 출력하여 오류를 찾는 디버깅 도구로 사용된다. C언어 / prinft / 문자열 출력 1. C언어 printf 사용하여 콘솔 화면에 문자열 출력하기 먼저, 결과 화면부터 보자. 아래는 C언어의 printf 함수를 사용하여 문자열을 출력한 결과이다. 숫자와 한글, 영어, 특수문자까지 잘 나오고 있다. 이제부터 이런 콘솔화면에서 문자열을 표시하는 것을 C언어를 사용해 진행해 볼 것이다. C언어 printf 출력 결과 2. 준비물 여기서는 `비주얼 스튜디오 커뮤니티`를 사용할 것이다. 더 이상 필요한 것도 없다. ( 비주얼 스튜디오 코드 / VSCode 를 사용하는 것은 개인 취향 문제이다. ) 비주얼 스튜디오 커뮤니티는 모든 사용자들에 무료로 공개된 개발용 IDE이며, 전통적으로 많이 사용된 것이며, 어지간한 개발은 이것을 사용해도 충분하다. 참고로 포스팅을 하는 시점 2025년 12월 18일 `비주얼 스튜디오 2026`이 공개되었다. 준비물 비주얼 스튜디오 커뮤니티 홈페이지 바로가기 3. 코딩 순서 하나씩 진행해 보자. 비주얼 스튜디오가 설치되어 있지 않다면 위에서 언급한 홈페이지에 접속하여 다운로드 한 후 설치하자. 프로젝트의 소스 파일에 .cpp 파일을 새로 추가한 후 확장자를 `.c`로 변경한다. 그리고 ` F5 `단축키를 사용해 실행하자. 비주얼 스튜디오 커뮤니티 실행하기 프로젝트 만들기 소스파일에 코드 생성( 확장자 `.c` )과 코드 입력하기 F5 단축키 클릭과 실행하기 코드의 내용은 다음과 같다. #include <stdio.h> int main(void) { /* 문자열 출력 */ printf("Say Hello~, OverTech!\n"); /* 문자열 출력 */ prin...