본문 바로가기
C++/이론

[C++] C++의 기초

by 씐 2023. 9. 5.
728x90

객체지향 언어 C++

C++은 객체지향 프로그래밍 언어이다.

프로그래밍 종류

  • 절차적 프로그래밍
    • 프로그램이 함수의 집합으로 구성되므로 함수를 정의하면서 함수에 필요한 데이터를 선언하여 사용
    • 대표적인 언어로는 C가 있다.
    • 프로그램의 시작을 주도하는 main함수에 기술된 내용이 순차적으로 수행된다. 그래서 main 함수는 대부분 다른 함수의 호출로 기술되어 있다.
    • 함수 중심으로 프로그램을 설계한 후 함수에 필요한 데이터를 정의
    • 프로그램을 작성할 때 어떤 함수를 사용해서 어떻게 진행할 것인지가 우선

 

  • 객체지향 프로그래밍
    • 객체(data)를 지향하는 프로그램 방식
    • 객체를 생성하기 위한 클래스를 설계한 후 이를 다룰 함수(사용자 인터페이스)를 정의하여 함수로 객체를 다루도록 한다.
    • 대표적인 언어로는 C++, JAVA, C# 등이 있다.
    • 객체지향 언어는 프로그램이 일정한 순서에 의해 진행되지 않는다. 즉, 사건이 일어날 때마다 그에 따른 처리를 한다.
    • 우선 필요한 객체를 설계해 둔 후 그 내부에 정의된 함수를 사용하면서 프로그램을 작성
    • 객체부터 먼저 선택한 후 그 객체 내부에 정의된 함수를 적절히 호출하며 프로그램을 작성

 

※객체

  •  구조체처럼 멤버변수를 가지고 있으면서 그들만의 함수도 함께 가지고 있는 것
  • 객체 또는 오브젝트(object)는 클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것
  • 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미
  • 변수, 자료구조, 함수 또는 메소드는 객체가 될 수 있다.
  • 메모리가 할당되기 전까지 객체는 존재하지 않는다.
  • 객체지향 프로그래밍에서 객체는 클래스의 인스턴스로서, 변수 대신 실제값(인스턴스)을 가진다.

객체지향 프로그래밍의 주요 특징

  • 캡슐화(encapsultion)와 데이터 은닝(data hiding)
    • 데이터를 직접 다루면 데이터가 손상될 수 있으므로 이를 방지하기 위해 제공되는 것
    • 객체 사용자가 데이터를 직접 사용하지 못하게 하고 대신 함수를 통해서 접근 가능하도록 함으로써 데이터의 유효성을 검증
    • 유효성 검증은 클래스의 접근 권한을 결정하는 접근 지정자를 사용해서 구현

 

  • 다형성(polymorphism)과 오버로딩
    • 다형성은 동일한 함수나 연산자를 자료에 따라 다르게 동작하도록 적용할 수 있음을 의미
    • 함수의 오버로딩 : 함수명은 동일하지만 매개변수의 자료형이나 개수를 서로 다르게 주어 함수명을 여러 번 정의
    • 연산자의 오버로딩 : 이미 사용 중인 연산자를 다른 용도로 다시 정의해서 사용

 

  • 상속성(inheritance)
    • 특정 객체의 성격을 다른 객체가 상속받아 사용할 수 있도록 하는 것
    • 상속은 이미 존재하는 클래스의 상속을 받기 때문에 매번 전체를 다시 만들 필요가 없으므로 개발 기간이 단축된다.
    • 부모 클래스 : 클래스를 설계할 때 여러 개의 클래스에 공통적으로 필요한 성격을 정의 해둔 기본 클래스
    • 자식 클래스 : 부모 클래스에 있는 내용을 상속받아 사용하고 새로운 내용을 추가한 새로운 클래스

void main()

C++은 기능 별로 함수를 구현한 후 구현한 함수를 호출해서 사용

//세상에서 가장 간단한 C++ 프로그램
void main() -> 함수의 머리
{                         ]-> 함수의 정의
}           -> 함수의 몸체

 

main()

  • 컴파일러는 ()를 함수로 인식하도록 설계
  • 위의 코드에서는 main에만 ()가 있으므로 한 개의 main 함수로 구성된 예제
  • C++에는 반드시 이 함수가 존재해야 하지만, 오로지 하나만 존재 가능하다.
  • C++을 실행시키면 main함수를 찾아 함수 내부에 기술된 문장을 수행한다.

void

  • 모든 함수는 반드시 자료형을 지정해야함.
  • 자료형은 함수 앞에 붙인다.
  • void는 함수가 값을 갖지 않을 경우 붙이는 자료형

 

※요즘은 void main()이 아니라 int main()을 쓴다고 한다. void main의 경우 컴파일러에서 오류를 뱉는 경우가 있다.


#include와 iostream

#include <iostream>
int main()
{
   std::cout<<"C++ 세계에 오신 것을 환영합니다.\n";
}

 

#include

  • #include 문은 대부분 프로그램 시작 부분에 기술
  • #include 문은 <> 안에 있는 iostream 파일을 포함시키라는 의미

iostream

  • io는 input(입력) 및 output(출력)을 의미 -> cin, cout을 사용하기 위해 필요하다.
  • iostream과 같은 파일은 프로그램 소스코드 앞부분에 들어간다고 해서 헤더파일이라고 부른다.

헤더파일을 포함시키는 방법

  • iostream 확장자에 .h를 붙여 include하는 방식
    • ex) #include <iostream.h>
  • namespace를 지정하여 확장자를 생략하는 방식
    • ex) #include <iostream>

※1번의 방식은 C언어에서 쓰던 방식이기 때문에 2번의 방식으로 많이 사용

※헤더 파일 : 함수의 호출보다 정의가 먼저 나와야함. 근데 함수의 호출이 먼저 나오고 정의가 나올 경우에는 미리 함수 선언이 되어 있어야 함. 헤더파일은 함수 선언을 모아둔 것.


std namespace

std::cout<<"Hello world!\n";

namespace

  • 함수명 등을 사용할 때 동일한 이름을 사용하여 발생하는 ‘충돌’을 해결하기 위해 사용
  • 이름이 소속된 공간을 명시해주어 한 프로그램 안에서 동일한 이름을 사용해도 ’충돌‘ 발생 안함.
  • C++에서는 ‘네임스페이스::함수’ 형식으로 사용
    • ex) std::cout<<"Hello world!\n";
    • std : cout이 속한 네임스페이스, cout : 네임스페이스 std 소속 출력 객체

 

main 함수 전 namespace 선언

  • 일일이 ’네임스페이스::함수‘ 형식으로 함수를 선언할 필요없이 자주 사용하는 namespace는 main 문 전에 선언해 준다.
    • ex) using namespace std;
  • 그러면 간단하게 cout<<"Hello world!\n"로 사용할 수 있다.

cout과 cin

cout은 출력을 담당, cin은 입력을 담당하는 객체

#include <iostream>
using namespace std;
int main()
{
  int unit, count, total;
  cout << "상품의 단가를 입력하시오->";
  cin >> unit;
  cout << "구입할 상품의 개수를 입력하시오->";
  cin >> count;
  total = unit * count;
  cout << "총 금액 : " << total << "\n";
}

 

cout 객체와 <<(출력연산자)

  • cout은 출력을 담당하는 개체, 출력을 위한 다양한 연산자와 함수를 제공
  • <<은 출력을 위해 스트림 삽입 연산자, 오른쪽에 있는 내용을 출력 스트림 객체인 cout에 전달

 

cin객체와 >>(입력 연산자)

  • cin은 입력을 담당하는 객체, 키보드에서 입력한 값을 변수에 저장하려고 입력 담당 객체인 cin을 제공
  • >>은 입력을 위한 스트림 삽입 연산자, 기술된 변수에 키보드에서 입력받은 값을 저장
  • 사용자는 어떤 행동을 취해야하는지 모르기 때문에 어떤 행동을 해야하는 지에 대한 메시지를 출력해주어야 한다.

행바꿈과 주석

행바꿈 \n

  • 행을 바꾸어 출력하기 위한 것

 

주석

  • 행 단위 주석 //
  • 블록 단위 주석 /* */

”C++ 하이킹 객체지향과 만나는 여행“을 기준으로 모든 게시물을 작성할 예정이다.

다시 공부를 시작하는 것이기 때문에 미흡할 수 있다.

 

'C++ > 이론' 카테고리의 다른 글

[C++] 보조 제어문 (break문, continue문)  (0) 2023.09.30
[C++] 반복문 (for문, while문)  (0) 2023.09.29
[C++] 제어문과 선택문(if~else 문, switch 문)  (0) 2023.09.28
[C++] 연산자  (0) 2023.09.07
[C++] 자료형  (0) 2023.09.06