안녕하세요! 코딩하는 경제학도 쏘코입니다.
본 카테고리의 포스팅에서는 학교에서 듣는 객체지향프로그래밍 수업을 정리하도록 하겠습니다.
아주 기초적인 내용은 짧게 다루거나 생략하고 넘어갈 수 있음을 참조해 주시면 감사하겠습니다!
목차
0. 프롤로그
객체지향 프로그래밍을 이해하기 전에 가장 기본적인 내용을 짚고 넘어가는 시간을 갖도록 하겠습니다.
우리는 흔히 프로그래밍언어라고 하면 Python, C, Java, Ruby, Go 등을 쉽게 떠올립니다. 하지만 이 친구들은 프로그래밍 언어 중에서도 일부에 속합니다. 컴퓨터는 우리가 이해하고 작성하는 이 컴퓨터스러운 언어들을 더 컴퓨터스러운 언어들로 바꿔서 인식합니다. 실제로 컴퓨터는 0과 1만 이해하기 때문입니다.
프로그래밍 언어는 크게 세 가지로 나눌 수 있습니다. Machine language(기계어), Assembly language(어셈블리어), High-level language(고수준 언어)로 나뉘는데, 우리가 흔히 아는 언어들은 모두 High-level language 범주에 속합니다.
간단하게 정리하면 아래와 같습니다.
● Machine language
- 저수준 언어
- 컴퓨터의 CPU, ALU, 레지스터, 메모리 등을 직접 관리
● Assembly language
- 저수준 언어
- 상징적 언어
- 어셈블러
● High-level language
- 자연어 사용
- 컴파일러, 인터프리터
- C, C++, Python, Java, Fortran, COBOL 등등..
또한, 개발툴에 대한 이해도 필요합니다.
개발 툴은 에디터, 컴파일러, 디버거, 프로파일러로 나눠집니다.
■ Editors (핵심!)
- 프로그렘 텍스트(소스 텍스트)를 작성하는 도구 (.cpp 작성)
■ Comfilers (핵심!)
- 전처리기, 컴파일러, 링커로 구성
- 전처리기는 컴파일 하기 전에 먼저 처리하는 것
- 컴파일러는 프로그래밍언어를 컴퓨터가 알아들을 수 있게 처리하는 것 (.cpp를 .obj로 만드는 과정)
- 링커는 실행 가능한 코드로 만들어주는 것 (.obj파일들을 연결시켜서 하나의 실행가능한 .exe파일로 만들어줌)
■ Debuggers
- 오류를 체크하는 것
■ Profilers
- 프로그램 분석을 동적(dynamic)으로 해주는 것 (static과 반대!!)
※ static은 컴파일시점에 동작하는 것, dynamic은 실행 시간에 동작하는 것이라는 차이가 있습니다.
그리고 IDEs(integrated development environments)는 통합개발환경(집적개발환경)으로, 공통된 개발자 툴을 하나의 그래픽 사용자 인터페이스(GUI)로 결합하는 애플리케이션을 구축하기 위한 소프트웨어입니다. 앞으로 있을 포스팅에서는 Visual Studio(VS)를 기본 IDE로 사용할 예정입니다.
1. C++이 뭘까??
C라는 절차지향 프로그래밍 언어가 1972년에 만들어지고, 더 나은 환경의 객체지향 프로그래밍언어로 개선되어 1982년에 C++로 업그레이드가 되었습니다.
여기서 절차지향은 순차적인 처리가 중심이 되는 것이고, 객체지향은 기능별로 묶어서 모듈화한 객체가 중심이 되는 것입니다. 절차지향에 비해 필요한 친구들을 묶어서 처리함으로써 하드웨어의 처리양을 획기적으로 줄였습니다.
그렇다고 해서 C보다 C++가 무조건 나은 언어라고 말하기는 어렵습니다.(아직도 속도 면에서는 로우레벨언어에 가까운 C가 C++보다 월등히 빠릅니다.)
아무튼, C++는 1982년 첫 출시 이후로 계속해서 발전해나가고 있고, 현재는 C++11부터 C++14, C++17, C++20 순으로 3년 주기로 개선되고 있습니다.
C는 stdlib.h라는 표준 라이브러리를 사용하지만, C++는 iostream이라는 표준 라이브러리를 사용합니다.
사용법은 기존과 동일하게 include 전처리를 사용하고, main 역시 동일하게 사용합니다. main의 경우 void가 아닌 int형태로 만드는 것이 일반적입니다. 따라서 int값을 return해줘야 정상적으로 종료됩니다.
또한 파일의 확장자 역시 기존의 .c 에서 .cpp로 변경되었습니다.
그 외에도 많은 것들이 유사하며, 입출력 함수명 등 몇 가지 다른 요소들이 존재하는데, 이런 부분들은 차근차근 알아보도록 하겠습니다.
위의 예에서 std::cout 라는 부분이 들어갔는데, 이 std는 standard의 약자입니다.
std라는 namespace안에 존재하는 cout(출력함수)를 사용하겠다는 말이죠.
그리고 ::(scope)는 namespace 안에 존재하는 무언가를 사용할 때 붙여주는 것입니다.
:: 앞쪽은 namespace 이름, 뒷쪽은 함수 이름을 적으면 되죠.
혹은 전처리구문 바로 아래에 using namespace std;를 넣어서 사용할 수도 있는데, 이렇게 선언하게 되면 본 .cpp 파일 내에서 std 안에 있는 함수를 사용하겠다는 말과 같습니다. std::를 함수 앞에 붙일 필요가 없어지죠. 이 방법은 간편하지만 추후 프로젝트가 커지면 namespace에 선언된 함수나 다른 요소들의 이름이 겹칠 수 있기 때문에 주의해서 사용할 필요가 있습니다. 이런 경우에는 반드시 namespace의 이름과 ::(scope)를 함수 앞에 붙여서 사용해야겠죠.
다음은 main() 부분입니다.
C++에서 main()함수는 필수적인 요소입니다. 이 main() 함수 안에 있는 명령문을 컴파일러가 실행하여 프로그램이 작동하게 됩니다.
함수는 리턴형, 함수명, 매개변수, 명령문으로 구성되어있습니다.
리턴형은 이 함수가 돌아가고 나면 남는 결과값이고, 함수명은 말 그대로 함수의 이름, 매개변수는 함수의 동작에 필요한 요소를 받는 과정입니다. 그리고 명령문은 함수가 처리하는 내용이 들어가게 됩니다.
아래 사진은 C style이기 때문에 출력함수가 cout가 아니고 printf로 나와있고, 매개변수도 void가 들어가 있습니다.(C++에서는 void가 아니라 그냥 ()만 작성해도 됩니다!)
이런 부분은 소소한 C와 C++의 차이이니, 개념적인 부분만 이해하시면 됩니다.
함수의 기본에 대한 내용은 아래 C의 함수 포스팅을 참조하시면 더욱 자세하게 설명되어 있습니다!
다시 main함수로 돌아가겠습니다.
우리는 int main()형태로 main함수를 설정했기 때문에 int값을 반환해야합니다.(리턴형을 int로 했기 때문입니다!)
그래서 main함수의 맨 끝에
return 0;
을 적어주면 됩니다. 아니면 c style로 void로 해도 별 다른 지장은 없습니다.
마지막으로 C++ 프로그램의 기본적인 구조를 나타낸 사진으로 포스팅을 마무리하겠습니다! 감사합니다 :)
최근댓글