본문 바로가기

C++ Programming

클래스

OOP


  • 소프트웨어 위기
    기존 절차식 프로그래밍의 방법의 낮은 생산성이 문제가 됨. 절차식 프로그래밍은 간결하고 빠른 실행 파일을 만들기는 하지만 규모가 커지면 개발뿐만 아니라 유지 모수에 한계를 드러냄. 그래서 대안으로 여러 가지 개발 기법들이 제시되었는데 그 중에서 가장 탁월한 기법으로 인정받은 것이 바로 절차가 아닌 데이터를 중심으로 개발을 진행하는 객체 지향적 프로그래밍(Object Oriented Programming) 방식임
  • OOP의 특징

캡슐화

표현하고자 하는 자료와 동작을 하나의 단위로 묶는 것이며 이렇게 묶어 놓은 것을 객체라고 함


정보 은폐

객체는 자신의 상태를 기억하기 위한 속성과 속성을 관리하는 동작을 정의함


추상화

현실의 사물을 객체로 표현하기 위해서는 이 사물이 어떤 특징을 가지며 어떤 동작이 가능한지를 조사해야 하는데 이를 데이터 모델링이라고 함


상속

상속은 이미 만들어진 클래스를 파생시켜 새로운 클래스를 정의하는 기법


다형성

똑같은 호출이라도 상황에 따라, 호출하는 객체에 따라 다른 동작을 할 수 있는 능력을 다형성이라고 함





C++로의 확장


  • 개선 사항

범위 연산자

지역변수에 의해 가려진 전역변수를 참조


명시적 캐스팅

(int)var 형식이 아닌 int(var) 형식으로 캐스팅


인라인 함수

본체가 호출부에 삽입되는 함수


디폴트 인수

실인수가 생략될 때 형식 인수에 적용되는 기본값


함수 오버로딩

같은 이름의 함수를 여러 개 정의하는 기능


태그가 타입으로 승격됨

구조체 태그로부터 변수를 바로 선언할 수 있음


이름없는 공용체

공용체 이름없이 멤버들이 기억 장소를 공유


한줄 주석

//로 줄 끝까지 주석 달 수 있음


레퍼런스

변수에 대한 별명을 붙임


bool 타입

1바이트의 진위형 타입

  • IOStream

C++에서는 모든 것을 객체로 표현하기 때문에 입출력을 담당하는 것도 함수가 아니라 객체임.

cout은 C++의 가장 기본적인 출력 객체이고 cin은 입력 객체임.

입출력이 가능해야 언어의 동작을 확인할 수 있기 때문에 C++에서는 이런 기본적인 입출력 수단은 바로 입출력 스트림이며 cin, cout이 입출력 객체임

  • new

new, delete는 C의 malloc, free에 대응되는 C++의 메모리 할당 연산자이며 실행 중에 메모리를 할당한다는 점에서 용도가 비슷.


new의 기본 형식

포인터 = new  타입[(초기값)];



구조체의 확장


  • 멤버 함수

구조체는 타입이 서로 다른 이형 변수의 집합

구조체와 함수는 한 상으로 볼 수 있는데 C++은 연관된 코드와 데이터를 하나의 범위에 포함시킬 수 잇는 방법을 제공. 이 개념이 바로 캡슐화인데, 구조체가 다양한 타입의 멤버 변수를 포함하듯이 함수도 포함할 수 있음

  • 멤버 함수 작성법

멤버 함수 기본 형식

리턴타입 소속구조체::멤버함수(인수)

{

본체

}

  • 액세스 지정

private

이 속성을 가지는 멤버는 외부에서 액세스할 수 없으며 구조체의 멤버 함수만 액세스할 수 있음


public

이 속성을 가지는 멤버는 외부로 공개되어 누구나 읽고 쓸 수 있고 함수의 경우는 호출할 수 있음


protected

private와 마찬가지로 외부에서는 액세스할 수 없으나 단, 상속된 파생 클래스는 이 멤버를 액세스 할 수 있음


클래스


  • class

확장된 의미의 구조체에 새로운 이름을 붙여 주었는데 그것이 바로 클래스.

구조체라는 용어를 그냥 사용해도 별 문제는 없겠지만 C의 전통적인 구조체와 C++에서 확장된 구조체의 차이를 명확하게 구분하고 싶었고 그래서 이름을 바꿈


클래스의 기본 형식



  • 클래스는 타입이다

C++에서는 구조체의 태그가 타입으로 승격되어 태그로부터 바로 구조체 변수를 선언할 수 있음. 구조체가 하나의 타입으로 인정되는 것과 마찬가지로 클래스도 하나의 타입으로 취급됨. 클래스의 이름은 int, double, char 같은 기본형 타입과 동등한 자격을 가지며 사용 방법도 똑같음


클래스가 완전한 타입이 되기 위한 여러 가지 언어적 장치



  • 인스턴스

클래스는 어디까지나 타입일 뿐이지 그 자체가 정보를 저장하는 변수는 아님.

구조체를 선언한다고해서 구조체 변수가 생기는 것이 아닌 것처럼 클래스를 선언한다고 해서 실제로 값을 기억할 수 있는 메모리가 할당되지는 않음. 클래스 선언은 어떤 타입의 어떤 멤버들이 포함되어 있는지를 컴파일러에게 알리는 역할만 할 뿐이며 클래스형의 변수를 선어해야 실제 메모리가 할당됨


인스턴스

메모리가 구현된 것을 말함


오브젝트

독립성을 가진 부품이라고 생각하면 됨






C와 C++의 차이점



1. C는 절차적 프로그래밍(Procedural), C++은 다중 패러다임 언어(Multi paradigm)

C는 프로그램의 함수간의 단계나 절차에 초점이 맞춰지나,
C++은 프로세싱 과정보단, 개별 데이터에 초점이 맞춰집니다.
그래서 C++의 소스 코드를 구현 / 수정하는 것이 더 쉽습니다(상대적으로)

2. C는 데이터의 보안(Secured)이 불가능하나, C++은 데이터의 보안(Secured Hidden)이 가능

구체적으로는 OOP(객체지향프로그래밍)의 장점이라고 할 수 있습니다
C는 가질 수 없는....

3. C는 low-level 중에서도 중간 수준(middle-level)의 언어

C는 low-level의 언어(해석/설명/이해하기 힘들고, 사용자 중심이 아님)이나,
C++은 low-level(하드웨어에 집중)과 high-level(프로그램에 집중)의 특징을 모두 보유합니다
그래서 C++은 전체 언어 중에서도 중간 수준(middle-level)의 언어로 분류할 수 있습니다

4. C는 하향식 접근 방식(top-down), C++은 상향식 접근 방식(bottom-up)을 사용

C는 기본 요소간의 순차적 수행이 되도록 서로간의 연결이 중요해,
단계별 공식화(linked-together) 이후 세부 사항으로 나눠집니다

5. C는 함수 기반(function-driven), C++은 객체 중심(object-driven)

C 프로그램은 함수 중심으로 구축되고,
C++은 객체 중심으로 구축이 됩니다

6. C는 지원하지 않는 오버로딩(Overloading)을 C++은 지원

오버로딩은 동일한 이름을 가진 두 함수를 의미합니다
OOP의 다형성이란 특성 중 하나입니다

7. 구조체(Structure) 안에서 함수(function) 사용

C++은 할 수 있지만,
C는 하지 못하는 것입니다

8. NAMESPACE가 C++엔 있으나 C엔 없음

NAMESPACE의 기본 기능은 충돌 방지입니다
예를 들면, 다른 대학의 두 학생이 같은 학번을 가질 수 있으나, 같은 대학의 두 학생이 같은 학번을 가질 순 없습니다
같은 대학(one namespace)에서 두 학생을 구분하기 위해 서로 다른 학번(identifier)을 부여하는 의미입니다
즉, 같은 기능을 중복해 사용하는 것을 막기 위함입니다

9. 표준 입출력(standard input & output)의 차이

C는 scanf와 printf를 사용하지만,
C++은 cin>>과 cout<<을 사용해 표준 입출력의 차이를 보입니다

10. C++은 참조 변수(reference variable) 허용

참조 변수는 두 변수가 동일한 메모리 위치를 참조(reference)할 수 있습니다
그러나 C에서는 참조 변수를 사용할 수 없습니다

11. C++은 예외 처리(Exception handling)를 지원

C는 "공식적(Formally)"으론 지원하지 않지만,
다른 방법(user creative method)을 이용해 사용할 순 있습니다.
일반적으론 C에서 사용할 throw&catch 함수는 개인 사용자에게 제공되는 프레임워크엔 포함되지 않습니다

12. 알파벳이 다릅니다

C의 뜻은, "C language" 이고,
C++의 뜻은, "C plus plus language"입니다

13. 두 언어의 제작자가 다릅니다

C는 데니스 리치(Dennis Ritchie)와 친구, 직장 동료들이 만들었고,

C++는 뱐 스트라우스트럽(Bjarne Stroustup)과 친구, 직장 동료들이 만들었습니다