5주차 요약

김서영·2021년 10월 3일
0

구조체

구조체에는 변수만 들어갈 수 있다.
C에서 struct은 구조체로만 사용할 수 있다.
C++에서는 class도 사용할 수 있다.

(C++에서의 구조체는 함수도 들어갈 수 있다.)

C++에서는 struct을 생략해도 구조체로 사용이 가능하다.
구조체는 클래스와는 기본 접근 속성이 다르다.
struct은 public, class는 private

포인트 변수

포인터 변수는‘->’로 접근한다.

구조체 변수의 초기화와 멤버 대입

예시

#include <iostream>
class Man { 
public:
	char name[10]; 
	int age; 
	double weight; 
};
int main(void)
{
	Man gildong, sunhee, comso[160];
	gildong.age = 20;
	sunhee.weight = 52.5;
	comso[0].age = 25;
	std::cout << gildong.age << " " << sunhee.weight << " "<< comso[0].age << std::endl;
	return 0;
}

Man구조체 선언

예시

#include <iostream>
class score {
public:
	char hakbun[10];
	char name[10];
	int kor, eng, tot;
	double ave;
};
int main(void)
{
	score h = { "202345678","하니",80,90 }; 
	h.tot = h.kor + h.eng;
	h.ave = h.tot / 2.0;
	std::cout << h.hakbun << " " << h.name << " " << h.kor << " " << h.eng << " " << h.tot << " " << h.ave << std::endl;
	return 0;//202345678 하니 80 90 170 85.00
}

구조체 변수들의 대입 연산

예시

#include <iostream>
using std::cout;
using std::endl;
typedef class score {
public:
	char hakbun[10];
	char name[10];
	int kor, eng, tot;
	double ave;
}SCORE;
int main(void)
{
	SCORE j, h = { "202345678", "하니",80,90 };
	h.tot = h.kor + h.eng;
	j = h;
	cout << h.hakbun << " " << h.name << " " << h.kor << " " << h.eng << " " << h.tot << endl;
	cout << j.hakbun << " " << j.name << " " << j.kor << " " << j.eng << " " << j.tot << endl;
	return 0;
}

Software crisis

소프트웨어는 시간이 지날수록 비싸진다.
(대부분의 비용은 인건비로 나간다.)
사람마다 개발 스타일이 다른 경우가 많아서 유지보수가 어렵다.
->개발이 힘들어진다.

이를 막기 위한 대응 방안

이를 막기 위한 대안이 여러 가지 나왔다.
ex. 객체 지향 프로그래밍, 구조적 프로그래밍

구조적 프로그래밍 (structured programing)

구조적 프로그래밍은 기능에 따라 함수가 세분되어있다.
수정하기가 어렵기 때문에 프로그램이 복잡해질수록 유지보수가 어려워진다.
구조적 프로그래밍의 단점을 보완하기 위해 나온 것이 객체 지향 프로그래밍이다.

객체 지향 프로그래밍 (OOP, Object-Oriented Programing)

실세계에 존재하는 객체들을 중심으로 생각한다.
실세계를 반영한다.
프로그램을 수정하기 수월해지기 때문에 소프트웨어 확장 및 재사용 기회가 늘어났다.
자료와 처리 동작(연산=함수, method)을 하나로 합친
객체(object)개념이 도입되어 있다.
객체는 구체적이며 실체를 가졌다.

객체 지향 언어의 실질적 원조는 스몰 토크(Smalltalk, 1972-1980)이다.

C++언어

C++은 클래스를 가진 C언어다.
C언어는 객체 지향 언어가 아니다.
C언어와 C++ 언어는 프로그래밍 스타일이 매우 다르다.
printf()를 cout으로 변경하는 것은 C++에 포함되어 있지만 C++ 학습은 아니다.

중요한 C++ 문법

  • inline 함수
  • 클래스의 생성자(Constructor)와
    소멸자(Destructor)
  • 함수 중첩(Function Overloading)
  • 디폴트 인자(Default Parameter)
  • 클래스 상속
  • 가상 함수(Virtual Function)

클래스(Class)

각 객체의 속성을 정의하는 수단, 즉 객체의 타입이며 객체의 기본 규격이다.
설계도에 비유되는 추상적인 개념이다.
필수적인 것은 아니다.
그러나 클래스가 없으면 프로그래밍하는 데 어려움이 많다.

클래스로부터 만들어진 객체는 인스턴스(instance)라고 한다.
우리나라에서는 객체와 인스턴스를 혼용해서 말한다.
(객체라고 말하는 경우가 많다.)
영어권에서는 주로 인스턴스라고 말한다.

객체 지향 프로그래밍의 중심 기술

캡슐화(Abstraction Data Type,추상 자료형)

사용자 정의 자료형이다.
C++에서는 class로 지원한다.
캡슐화된 정보는 외부에서 접근할 수 없다.
->이 특징 때문에 캡슐화된 정보 안에는 완성된 소스가 있다.

상속(Inheritance)

기존에 있는 자료 및 연산을 상속받는 것을 의미한다.

  • 자료 및 연산을 물려주는 상위 클래스는 기본 클래스, 부모 클래스라고 한다.
  • 상속을 받는 하위 클래스는 파생 클래스, 자식 클래스라고 한다.

상위 클래스일수록 일반화되어 있으며, 하위 클래스일수록 세분되고 구체화한 클래스다.
상위 클래스가 필요한 경우는 직접 만들기보다 상속받는 것이 더 프로그래밍하기 수월하다.

다형성(Polymorphism)

poly와 morph가 결합한 단어로, 사전적 의미로 많은 형태를 뜻한다.
유사한 기능을 하나의 이름으로 묶어 복잡도를 감소시킨다.
Overloading은 다형성을 구현하는 방법의 하나다.
유사한 기능을 하나의 이름으로 묶어 복잡도를 감소시킨다.
이름은 하나로 써야 한다. (함수 중첩, 연산자 중첩 등)

UML

다이어그램을 그리는 언어

객체지향 용어비교

조작, 즉 행위는 C++을 제외한 언어에서는 메소드(method)라고 한다.
C++에서는 예외적으로 멤버 함수라고 한다.

데이터는 언어마다 부르는 명칭이 다른데, Swift, Delphi, VB에서는 프로퍼티(Property), JAVA, C#,VB·NET에서는 필드(Field), C++에서는 멤버 변수/자료 멤버(Member variable / Data member), Objective-C에서는 Instance variable이라고 한다.

정수(Intenger) 클래스

변수 앞에서는 private를 사용하고, 함수 앞에서는 public을 사용한다.
객체 앞에 클래스를 사용해 객체를 정의하는 방법이 있다.

C++에서의 클래스 멤버 접근 권한

전용(Private)

해당 클래스 내부에서만 접근할 수 있다.
캡슐화되어있어 자료 및 연산을 감추는 데 유리하다.

범용(Public)

어디에서나 접근할 수 있다.

보호(Protected)

자신과 자식 클래스 외에는 접근할 수 없다.
(private와 비슷하다.)


C++프로그래밍(21-2학기)한성현교수 강의 내용 변형 및 요약

0개의 댓글