본문 바로가기

programming/Computer

C/C++ 프로그래밍 언어 완벽정리!!

728x90
반응형


C 언어





운영체제의 어머니라고 할수있는 UNIX 운영체제를 보다 쉽게 개발하기 위해서 만들어졌습니다


• C 언어의 장점


효율성이 높으며 간결하다

효율성이 좋아 대규모의 고기능 프로그램을 만들 수 있다. 제작된 프로그램의 크기가 작고 속도도 빠르다.

문법이 간결하다. 예약어가 적고 제공하는 연산자가 다양하기 때문에 짧은 명령으로 많은 일을 할 수 있다.

모든 분야에 두루 활용할 수 있을 정도로 범용적이다. 사무 처리, 과학 기술, 상업용 등 거의 대부분의 응용 프로그램을 개발할 수 있다.

제한없이 자유로운 프로그래밍이 가능하여 장치제어 등의 Low level 프로그래밍에는 여전히 C가 많이 사용된다

C언어로 할 수 없으면 다른 언어로도 할 수 없다고 보면 된다


하드웨어를 직접 제어하는
저수준 / 고수준의 프로그래밍도 가능하다.

다른 언어들에 비해 어셈블리어와 같은 저수준(low-level)언어에 가깝습니다. 고급언어 이지만 메모리 관리와 같은 하드웨어 제어도 가능합니다. 실제 컴퓨터가 작동하는 과정과 구조를 C언어를 통해 파악할 수도 있습니다.
운영체제 개발을 목적으로 만든 언어이므로 저수준 프로그래밍이 가능하며 어셈블리 수준의 하드웨어 제어를 할 수 있다.


절차 지향적 특성이며 이해하기 쉽다
C언어는 인간의 사고방식, 일 처리방식과 유사합니다. 따라서 C언어의 정해진 순서에 따른 실행흐름을 이해하기가 쉽습니다.

 
이식성이 좋다.
다른 말로는 기계 독립성이 있다고 할 수 있습니다.
대부분의 컴퓨터에는 종류에 관계없이 C언어의 컴파일러, 인터프리터가 내장되어있습니다.

대부분의 플랫폼에서 C/C++ 언어를 사용할 수 있으므로 재컴파일만 하면 타 운영체제에서 실행되는 프로그램을 쉽게 만들 수 있다.


실행 속도가 빠릅니다.
프로그래밍 과정과 구조에 따라 다를 수도 있지만 다른 언어들은 인터프리터가 한 줄씩 읽어 들여 프로그램을 실행하는 반면에 C언어는 컴파일 후 링크를 통해 실행파일을 만들기 때문에 속도가 더 빠릅니다. 이러한 이유로 속도가 중요한 임베디드 계열에서는 C언어(C++)을 사용하는 경우가 대다수입니다.
 



• C 언어의 단점

프로그래밍 하는데 많은 주의를 요한다. 완전한 고급 언어에 비해 상대적으로 어렵다.

문자열 타입의 부재
C언어는 문자열이 저장될 때 항상 null문자가 마지막에 옵니다. 따라서 프로그래머가 마지막 문자를 신경 쓰지 않고 처리하게 되면 심각한 오류가 발생할 수도 있습니다. 또한 문자열에 대한 자료형이 없어서 배열로 저장하는데 이를 다른 언어의 자료형과 헷갈리면 오류가 발생할 수도 있습니다.
 
C언어는 이식성이 좋다?
C언어가 다양한 하드웨어와 컴파일러에서 작동 가능한건 사실입니다. 하지만, 이는 하드웨어의 각각의 특성을 고려해서 코드를 짰을 때 가능합니다. 예를 들어 하드웨어마다 int자료형의 정의된 크기가 다 다르기 때문에 기존의 코드와 오차가 생길 수도 있습니다. 이는 결국 작동이 불가능 하다는 것을 말해줍니다.
 
나온지가 오래되다 보니 요즘 언어들에서 1~2줄로 끝나는 기능구현을 위해서 수백, 수천줄의 암호문을 작성해야 한다는게 단점입니다


성능을 위해 불필요한 에러 처리를 하지 않는다. 타입의 불일치나 배열 경계 점검 등은 프로그래머가 직접 해야 하므로 개발자는 항상 이 점을 주의해야 한다.



• C 언어의 활용 범위

시스템 프로그래밍
임베디드 시스템 
드라이버
보안 솔루션
안티바이러스
게임 개발 
교육용





C++


기존의 C언어에 몇 가지 강력한 기능이 추가된 언어입니다. 그러므로 C++언어는 C언어의 발전된 형태라고 말할 수 있으며, C언어와 동일한 기능을 수행하는 언어입니다.

C++언어는 C언어의 상위 버전이라는 주장을 내리는 학자가 있는 반면에
C언어와 C++언어는 서로 다른 언어라고 보는 학자도 있습니다

C++ - 딜레마가 적용되지 않는 전지전능, 마스터 하면 신이 될 수 있음

C++언어는 C언어에 비해 클래스, 상속, 다형성, 템플릿 등이 추가되었습니다


C++ 장점

C++언어의 장점은 '강력하면서도 유연하다'는 점입니다. 이런 장점 때문에 지구상에 설치된 컴퓨터 중에서 가장 많은 컴퓨터가 지원하는 컴퓨터언어가 되었습니다.

C++은 C언어를 모두 포함하면서 객체지향 프로그래밍까지 가능한 언어입니다.

내용이 매우 방대하고 어려운 게 특징입니다.

잘 사용하면 로우레벨 프로그래밍이 가능하기에 성능향상을 기대할 수 있습니다


구조화된 프로그램을 짤 수 있습니다.
우선 C++언어는 구조화된 프로그램을 짤 수 있습니다. 구조화된 프로그램은 어느 한 부분이 잘못 만들어질 경우 그 부분만 수정함으로써 문제를 해결할 수 있는 간편하고 경제적인 프로그램을 말합니다. 

예를 들어서 타자기와 컴퓨터의 워드프로세서 프로그램의 차이를 들겠습니다. 한 사람은 컴퓨터로 문서를 작성해서 문서를 출력했고 한 사람은 타자기로 문서를 작성했습니다. 그런데 나중에 문서 앞머리나 중간에 문단 하나를 더 추가해야 할 일이 생겼습니다. 이때 타자기를 사용하는 사람은 문단이 추가된 이후의 내용을 전부 다시 타자쳐야 합니다. 그러나 컴퓨터를 이용하는 사람은 추가된 문단만 입력해서 파일을 고친 뒤에 프린터로 출력하면 됩니다. 

BASIC이라는 언어는 구조화되지 못했기 때문에 프로그램을 짤 때 줄번호를 붙입니다. 처음 프로그램을 짤 때 150번째 줄로 가라고 명령을 내렸는데, 중간에 프로그램을 고치면서 줄이 세 줄 삽입되었다고 합시다. 이러면 150번째 줄로 가라는 명령을 153번째 줄로 가라고 고쳐야 합니다. 이런 식으로 모든 줄번호를 일일이 고쳐줘야 합니다. 그러나 C++언어는 이런 일을 할 필요가 없습니다. 구조화되지 않은 프로그램은 하나를 고칠 경우 전체를 전부 고쳐야 하는 어려움이 있으나 구조화된 프로그램은 그 부분만 고치면 되는 겁니다. 그래서 C++언어가 좋은 겁니다. 


컴퓨터를 강력하게 제어할 수 있습니다.
C++언어는 컴퓨터의 기능을 많이 활용할 수 있도록 해줍니다. 이에 비해서 BASIC은 컴퓨터가 지닌 기능을 많이 활용하지 못합니다. 그래서 C++언어는 강력한 도구라고 합니다. 물론 제어능력면에서 가장 강력한 언어프로그램은 어셈블리어겠지만 이 프로그램은 너무나 사용법이 어려워서 보통 사람은 손댈 엄두도 나지 않습니다. 

사용법이 쉬우면서도 어셈블리어에 크게 뒤지지 않는 제어능력을 가진 언어가 C++언어입니다. 또한 C++언어는 어셈블리어를 가져와서 사용할 수 있는 융통성이 있습니다. 즉 C++언어 자체의 능력만으로 해결이 어려울 때는 어셈블리어의 능력을 빌려와 프로그램을 만들 수 있기 때문에 다른 언어가 할 수 없는 강력한 컴퓨터 제어능력을 발휘할 수 있습니다. 


이식성이 좋고 유연합니다
C++언어가 지닌 가장 큰 장점은 역시 유연성과 이식성이 좋다는 점입니다. C++언어를 배우려고 하는 가장 큰 이유도 바로 C++언어가 가진 이식성 때문입니다. 이식성이 좋다는 말은 다양한 컴퓨터 기종에서 큰 수정 없이 사용할 수 있다는 뜻입니다. 또한 다양한 운영체제에서 큰 수정 없이 사용할 수 있습니다. 대부분의 컴퓨터기종에서 C++언어를 지원하기 때문입니다. 그래서 도스용으로 짠 프로그램도 유닉스나 리눅스라는 운영체제로 가져가서 크게 손보지 않고 그대로 사용할 수 있습니다. 또한 IBM용으로 짠 프로그램도 매킨토시나 아미가 등의 다른 PC와 대형컴퓨터에서 큰 수정 없이 사용할 수 있습니다. 

그러나 요즘 많이 사용하는 비주얼베이식은 IBM PC에서만 사용할 수 있습니다. 또 윈도우나 윈도우95라는 운영체제에서만 사용할 수 있습니다. 

많은 컴퓨터와 운영체제가 C++언어를 지원한다는 것을 다른 예로 비유해보겠습니다. 한국어는 한국에서만 사용할 수 있으며 한국사람만이 이해할 수 있습니다. 그러므로 '일 더하기 일은?'이라고 말하면 외국인은 못알아 듣습니다. 마찬가지로 'one plus one?'이라고 말해도 우리는 못알아들을 겁니다. 지구인을 대상으로 한글로 '하나', 한자로 '一', 영어로 'one'라고 써놓을 때 알아듣는 사람의 숫자하고 '1'이라고 했을 때 알아듣는 사람의 숫자를 비교해보면 쉽게 이해가 갈겁니다. '일+일=?'이라고 해놓으면 한국인만 알아들을 수 있는 언어고, 약속입니다. 그러나 '1+1=?'이라고 해놓으면 전세계 사람 대부분이 알아들을 수 있는 언어고 약속입니다. 

지구상의 국가 중 가장 많은 국가가 아라비아 숫자를 사용(지원)하는 것처럼 지구상의 컴퓨터 중에서 가장 많은 컴퓨터가 C와 C++언어를 사용(지원)합니다. 그래서 C와 C++언어는 이식성, 호환성이 좋다고 하는 겁니다. 

이외에도 C++언어는 매우 많은 장점을 가지고 있습니다. 그러나 C++언어의 장점을 요약하자면 '강력하면서도 유연한 언어'라는 점입니다. 이런 장점 때문에 지금도 가장 많은 사람들이 배우는 언어가 되고 있는 겁니다. 

C++
C언어 + 객체지향(OOP: Object Oriented Programming) = C++ 입니다.
(참고로, C++ = C + 1 이란 뜻 입니다. 여기서 더해진 1이 객체지향이죠.)
C언어를 기본으로 하기 때문에 역시나 가장 강력한 언어중에 하나입니다.
포인터가 주는 자유로움과 객체지향의 편리함이 합해진 언어입니다.

C++

능숙하지 못한 프로그래머가 사용한다면
버그가 매우 많이 생길 우려가 있습니다.

C에대한 이해가 없으면 접근하기 쉽지 않습니다.


C++는 “C+OOP", 즉 ”C언어 + 객체지향 프로그래밍“ 이라고 할 수 있다. 이 말은 C++는 C와 호환성을 가지고 있으면서 OOP의 특성이 가미된 언어임을 의미한다. 그러므로 C++컴파일러에서 C프로그램을 컴파일하면 아무런 문제가 발생하지 않지만 C컴파일러에서 C++프로그램을 컴파일하면 에러를 발생한다. C++와 C를 포함하는 모양이다. C++는 C에 대해상위 호환성을 갖고 있다는 것을 알 수 있다.


C의 모든 예약어는 C++에서 거의 비슷한 의미로 해석되며, C++는 C 의 예약어에 OOP와 기타 개선된 사양을 지원하는 몇 가지 예약어들을 더 지원한다. 그리고 분할 컴파일, 헤더 파일의 작성, 전 처리기 등도 거의 동일하다. 그러므로 C를 사용하던 사람이면 C++에 쉽게 적응 할 수 있다.


 C/C++ 차이점

C++가 C에 대한 상위 호환성을 가지고 있지만 몇 가지 차이점 이 있다. 이전에 C프로그램을 작성해 본 사용자가 C++프로그램을 작성할 때는 다음의 몇 가지 차이점을 고려해서 프로그램을 작성해야 한다.

C와 C++의 차이는?

C언어는 현재 가장 기본이 되는 컴퓨터 언어입니다.

현재에는 사용비중이 많이 줄긴했지만


C언어는 절차지향이라고 해서 1~10의 순서가 있으면

그대로 진행이 되는 형식이고


C++은 4,5,7.1.10 등 원하는 순서로 진행을 할 수 있는 차이죠

C를 개선시킨 언어가 C++언어입니다

프로그램을 만드는 방식에 차이가 있습니다. 프로그램은 데이터와 명령어로 구성됩니다. C언어로는 어떠한 명령어들을 어떠한 순서도 몇 번씩 실행시킬지(절차)를 결정하는 방식으로 프로그램을 만듭니다. 그래서 절차적 프로그래밍이라고 합니다. 그러나 C++언어나 자바로는 관련있는 데이터와 명령어를 하나로 묶어 객체라는 조립단위를 만들고 객체들을 조립하는 방식으로 프로그램을 만듭니다. 그래서 객체 지향 프로그래밍이라고 합니다.


컴퓨터언어는 컴퓨터프로그램을 만드는 도구인데 컴퓨터 언어 중에서 가장 널리 사용하는 언어는 베이식, 코볼, 파스칼, C, 어셈블리어 등입니다. 이중 가장 많이 사용하는 언어는 C와 C++라는 언어입니다. 국내에서는 C++을 씨위드더클래스나 씨플러스플러스라는 이름보다 씨뿔뿔이라는 애칭을 더 많이 사용합니다. 
C언어는 B라는 언어를 개선시켜 나왔기 때문에 C라고 이름지었습니다. 마찬가지로 C++도 C언어를 개선시켜 나온 언어입니다. 그렇다면 DBASE III와 DBASE VI사이에 DBASE III+가 나온 것처럼 C와 C++ 사이에도 C+라는 언어가 나와 중간다리 역할을 했을까? 정답을 말하면 'C+는 나오지 않았다'입니다. 그럼 C++언어를 개선시킨 이 언어를 왜 D나 C+라고 이름 짓지 않고 C++로 지었을까요? C 다음에 붙은 ++은 무슨 의미일까요? 

C++의 ++은 증가연산자의 의미로 C++의 원래 이름은 'C with Class'입니다


C++에 붙은 ++는 C언어에서 사용하는 증가를 뜻하는 연산자입니다. 즉 C언어에 몇 가지 함수가 더해진 것이 아니라 C언어의 개념이나 기능이 전체적으로 증가한 것이므로 ++라는 증가연산자를 뒤에 붙인 것입니다. 

그리고 원래부터 이 언어가 C++이라는 이름을 가진 것은 아닙니다. 처음에는 'C with Class'라고 불렀습니다. 객체를 구현하기 위해서 클래스를 제공하는 C언어라는 뜻입니다. 

C++은 스트라우스트럽이 만든 언어로 C언어와 호환성이 있도록 만들어졌습니다.


C++은 1979년에 미국의 벨 연구소에서 일하던 스트라우스트럽이 만든 컴퓨터언어로 C, 알골, 시뮬라 등의 언어를 기초로 해서 만들었습니다. 특히 1987년에 결성된 위원회에서 기존의 C언어와 호환성을 갖도록 규정했기 때문에 C 프로그래머들은 큰 어려움 없이 C++을 사용할 수 있게 되었습니다. 기능과 문법이 C에서 영향을 받은 반면, C++의 대표적인 장점인 객체 지향 언어의 성격은 객체 지향 언어의 시초라고 할 수 있는 시뮬라에서 많은 영향을 받았습니다. 그리고 C++이 국내의 프로그래머에게 많은 사랑을 받는 요인을 손꼽으라면 C언어와의 호환성과 어셈블리어의 연결사용을 들 수 있습니다. 

이처럼 C++언어는 앞서 살펴본 C언어의 장점은 그대로 가지면서 여기에 클래스의 추가와 객체지향 언어라는 장점이 추가된 것입니다. 

**요약: C++은 C언어와 호환성이 있도록 만든 컴퓨터언어로 C언어가 가진 기능에 새로운 개념과 문법내용이 추가된 언어입니다.


++의 개발이 C언어를 기반으로 이루어졌기 때문에 대부분의 C 프로그램은 C++ 컴파일러에서도 문제없이 컴파일된다. 초기 C++ 컴파일러는 일단 C++ 코드를 C로 변환하고 그걸 C로 컴파일하는 방식을 사용했을 정도. 하지만 OOP나 일반화 프로그래밍이란 것은 단순한 문법이 아니라 코딩의 패러다임을 말한다. 그래서 C++ 방식으로 코딩하려면 해당 코드에서 C++에 새로 도입된 것을 추가하는 게 아니라 설계부터 시작해서 완전히 새로 해야 하는 경우가 많으므로, 초심자 입장에서는 서로 다른 별개의 언어로 보고 접근하는 것이 안전하다. 그래서 C로 프로그래밍에 발을 들어 놓은 후 C++/Java로 업그레이드(...) 테크를 타는 학생에게 C++ 프로그래밍을 해 오라 하면, C에서는 구조체라는 개념이 있더라도 잘해봐야 C++의 입출력 객체를 이용하는 정도를 넘지 못하고 절차적 프로그래밍을 그대로 따라가는 영락없는 C 스타일의 프로그램이 튀어나오기 일쑤다.

그 이유는 C++의 객체지향이 다른 객체 지향 언어에 비해 이해하기가 그렇게 만만한 개념이 아닌 데다가 C++의 객체지향은 C를 유지하면서 그대로 얹어놔서 뭔가 기묘하기 그지 없으므로 다른 객체지향 언어에서보다 잘 다루는데 더 많은 공부가 필요하다. 사실 C++의 객체지향이 다른 언어와 비교하였을 때 개념적인 면에서는 아주 심각한 차이가 있는 것은 아니나, 실제로는 다른 언어에서는 무조건 new를 통해 힙에 생성해야 하는 객체를 스택에도 생성하고, 함수 인자 전달 시 이것저것 규칙이 많아 복잡해 보인다. 큰 맥락을 꿰뚫으면 직관적으로 이해되는 부분이지만, 그렇게 되는데 시간이 오래 걸린다. 재밌는 것은, 반대로 C++ → C 테크도 만만치가 않다. C → C++은 절차지향 언어의 사고방식, C++ → C는 객체지향 언어의 사고방식이 머릿속에 굳어버리기 때문이다. C++가 C의 모든 기능을 포괄하고 있으므로 C++을 할 줄 알면 C도 할 줄 안다고 생각하기 쉽지만, 사실 C++가 명시적으로 비교적 간단히 사용할 수 있도록 제공하는 기능들을 C에서는 암묵적으로 여러 가지 수많은 '트릭'을 통해서 쥐어짜내듯이 만들어 사용하는 경우가 많다.[8] incomplete type declaration 트릭을 이용하여 캡슐화를 흉내내고, 매크로와 컴파일러 확장을 이용해서 type-generic function을 만들어 쓰고, struct hack을 이용하여 vector를 흉내 내는 식이다. 게다가, 저런 트릭은 언어 차원에서 정식으로 제공한다기보다 말 그대로 '트릭'에 가까우므로 이상한 조건들이 붙는 경우가 종종 있고, 그것들을 정확히 파악하고 있지 않으면 상당히 찾아내기 어려운 에러를 내는 경우도 많다. 말 그대로 C와 C++은 완전히 다른 언어로 파악하고 접근하는 것이 좋다. "잘 짜인 C 프로그램은 C++ 컴파일러로 컴파일할 수 있어야 한다"는 말도 1999년에 C99 표준이 나오면서 틀린 말이 되어버리기도 했고...

그래서 많은 대학에서 컴공 1학년 1학기 때 C를 먼저 가르치고 빠르면 2학기, 늦어도 2학년에 C++를 가르치지만, 교수가 절차지향이 머리에 굳어버린다며 컴공에서 C 대신 C++와 객체를 먼저 가르치고 C는 아예 건드리지도 않고 다른 하드웨어 관련 학과에서만 가르치는 대학들도 많다. 객체지향만 배운다면 Java부터 시작하는 게 낫지만, 포인터 등을 통해 메모리와 각종 Low Level적인 프로그래밍과 객체지향을 함께 배울 수 있기 때문이다. 컴공의 경우에는 C++를 모르면 2학년부터는 강의를 전혀 이해할 수 없기 때문에 의외로 많은 학생들이 중도포기를 하게 되며 컴공을 나왔는데도 프로그래밍을 전혀 못하는 학생이 수두룩하게 발생하고 있다.

C를 알고 있다고 C++을 쉽게 할 수 있는 것은 아니다. 두 언어는 추구하는 설계 구조가 상당히 다르기 때문이다. C언어는 절차 지향이고 C++은 객체 지향이다. 그래서 C언어를 알고 있는 사람이 C++ 초보자용 교재를 1권 끝내고 프로그램을 만들어 보라고 해도 대부분 C 방식에서 벗어나지 못한다. C++ 방식을 잘 활용하려면 STL까지 배운 다음 자료구조와 스트림, 템플릿 정도는 쓸 수 있어야 한다.

한편, C, C++ 중 어디가 쉽다라던가(...) 하는 건 어디까지나 간단한 프로그램의 예일 뿐이다. 둘의 설계 구조가 다르고 성능상 미묘한 차이밖에 안 난다. C의 함수구조에서는 다중의 인자값 전달이 필수적인데 구조체에 전부 때려박더라도 전역변수가 아닌 이상 적어도 1개는 전달해야 한다. 반면에 C++ 측은 클래스의 this를 활용하면 인자 전달없이 클래스에 속한 멤버함수 호출만 할 수 있다. 참고로 전역변수는 보통 단일객체인데 여러 이유들로 복수객체, 쓰레드세이프(thread-safe) 구조를 따르는게 일반적으로 좋다. 헤더참조 구조가 중복정의로 복잡해지는건 덤. Node.js 모듈구조를 참고 해보면 module.exports로만 다른모듈과 상호작용 할 수 있는데 C 계열은 헤더를 넣으면 그안에 있는 모든 건 상호작용되고 원치 않으면 소스파일과 분리해야한다. 다만, C++20 부터는 모듈 개념이 도입될 예정이므로[9] 이러한 단점은 점차 시간이 지남에 따라 극복될 것이다.















 C/C++의 장점
 
C/C++ 언어는 다른 고급 언어들에 비해 다음과 같은 특징(장점)이 있다.
  1. 문법이 간결, 예약어가 적음, 연산자가 다양.
  2. 효율성이 좋음, 대규모의 고기능 프로그래밍 가능, 제작된 프로그램의 크기가 작고 속도가 빠름.
  3. 저수준 프로그래밍이 가능, 어셈블리 수준의 하드웨어 제어 가능.
  4. 범용적임.
  5. 불필요한 에러 처리를 하지 않음.
  6. 이식성이 좋음.



 Visual C++
그냥 C++ 컴파일러의 일종입니다. 이름과는 다르게 그닥 Visual하지는 않습니다 -_-
특히 Microsoft Windows에서 돌아가는 프로그램을 만들기 위한 기능들이 강화된 놈입니다. (MFC, ATL등등)
지금 이 페이지를 보고계실 Internet Explorer도 이 VC++로 작성되었습니다.
Visaul Basic, Java등등보다 훨씬 강력하고 자유도 높은 프로그래밍이 가능합니다.
(물론 그만큼 어렵습니다 -_-)
 
4. C#






C - C++ - Java - C# 정도의 순서라고 보시면 되겠네요.

가장 최근에 나온 C/C++계열 언어입니다. 현재는 .Net Framework에서만 돌아가죠.

훨씬 쉽고 편리하게 강력한 프로그램들을 만들 수 있습니다.

다만, 포인터나 형변환등에 제약사항이 많아져서 자유도는 좀 떨어집니다.

대신 안정성이 높다


C# - 웹/모바일(안드로이드/IOS/Windows/Tizen)/프레임워크/윈도우 응용 프로그램/솔루션/머신러닝/교육용으로 적합


728x90
반응형

'programming > Computer' 카테고리의 다른 글

Algorithm 이란?  (0) 2020.05.30
컴퓨터 메모리 단위  (0) 2019.07.12
이진수, 십진수, 16진수  (0) 2019.07.10
프로그래밍언어란?  (0) 2019.07.07
컴퓨터 프로그램이란 ?  (0) 2019.07.06