C++ 객체지향프로그래밍_Ch04정리

728x90

ch04. 클래스와 객체

04-1. 객체 지향의 개념

[객체 지향]

: 다양한 기능 객체들이 존재하고, 이러한 객체들을 조합하여 원하는 기능 구현하는 기법

 

<절차 지향 프로그래밍>

-프로시저(함수)를 기반으로 하는 프로그래밍 방법

-전체 프로그램은 함수들의 집합

-설계 방법 : 하향식 설계(top down design)

- 단점 : 데이터와 함수가 분리된다.

1) 과도한 전역 변수의 사용

: 전역변수는 모든 함수에 대하여 개방되기 때문에 어떤 함수든지 쉽게 데이터 변경 가능

2) 프로그램의 이해 어려움

: 프로그램의 복잡도 일정 수준 넘어가면 코드의 이해가 어렵다.

3) 프로그램 변경 확장의 어려움

: 프로그램의 복잡도 높아질수록, 프로그램 수정도 어려워진다.

ex) 어떤 함수를 수정할 경우 다른 함수들의 영향 받는 경우

 

<객체 지향 프로그래밍>

-관련된 함수와 데이터를 하나의 덩어리로 묶어서 캡슐화 시키는 프로그래밍 기법

 

[객체]

-현실 세계에 존재하는 객체들을 소프트웨어 상에서 구현한 것

-객체는 상태와 동작을 가지며, 객체는 필드와 메소드 코드의 묶음

-필드(멤버변수) : 객체 안의 변수, 객체의 상태를 저장

-메소드(멤버함수) : 객체 안의 함수, 해당 객체의 특정 기능 동작 수행

 

[클래스]

-객체의 설계도

-인스턴스 : 클래스로부터 생성된 객체

-객체 생성될 때마다 각 객체 크기에 맞는 기억 공간이 할당됨

 

-클래스 정의(선언) : 객체를 찍어내는 틀 만든 것

class 클래스이름 { //첫 글자는 대문자

public: ..접근지정자

//필드

//메소드

}; //C++에서 클래스 정의 끝나면 반드시 ; 붙여야 한다,

 

-접근 지정자 3가지

private 멤버 : 클래스 안에서만 접근 가능

protected 멤버 : 클래스 안 + 상속된 클래스에서만 접근 간으

public 멤버 : 어디서나 접근 허용

[객체 생성]

-선언된 클래스의 정의는 객체 찍는 틀만 만들어놓은 것이다

-실질적인 객체 생성할 때, 클래스타입 변수 선언

Circle obj; //Circle클래스의 인스턴스 객체 obj 생성

-클래스(자료형) 변수(객체 이름) 형태로 작성하면 됨

 

[객체의 멤버 접근] : 도트(.) 연산자로 접근

-하나의 클래스로부터 많은 객체가 생성될 수 있으므로

어떤 객체의 어떤 멤버에 접근할 것인지를 도트 연산자로 알려준 뒤 멤버에 접근한다.

obj.radius = 3; // obj객체의 radius(필드)멤버에 3 값 저장

 

 

 

04-2. 클래스와 멤버함수(메소드)

[멤버함수 중복 정의] : 메소드 재정의

ex) 정수,실수,문자열 자료형의 데이터별로 처리해줄 용도로 재정의할 수 O

 

[이름 공간]

- :: 연산자 이름공간을 지정하는 연산자

식별자(자료형, 함수, 변수의 이름)의 영역

using namespace std; 문장 = 이름 공간을 std로 지정하는 역할

이 문장 사용하지 않으면 매번 변수나 함수의 이름 선언 시에 std:: 붙여야 함

하나의 프로그램에 여러 이름 공간 사용도 가능 O

 

[클래스의 선언과 정의 분리]

-클래스의 멤버함수(메소드) 코드가 너무 복잡한 경우,

클래스 안에서는 멤버함수의 원형만 선언해두고,

클래스 외부에 클래스이름::’을 함수이름 앞에 붙여서 멤버 함수를 별도로 정의함

-> ::연산자 사용하여 해당 함수가 정의되는 이름 공간이 클래스임을 지정

-> 생략 시, 일반함수가 된다.

ex) double Circle::calcArea() { };

-선언 : 컴파일러에게 식별자 정보 미리 알리는 것

-정의 : 식별자가 참조하는 대상을 생성하는 것

 

-클래스 선언 : 내부에 멤버함수 몸체 정의 비포함 (->, 외부에 멤버함수 별도 정의)

-클래스 정의 : 내부에 멤버함수 몸체 정의를 포함

 

-다른 소스 파일에서 클래스를 사용하려면 #include 클래스선언 포함시켜야 함 !

-여러 소스 파일에서 해당 클래스 사용 시

클래스.h 헤더파일 : 클래스 선언(멤버함수의 원형만 선언되어 있음)

클래스.cpp 소스파일 : 클래스 정의(클래스 외부에서 작성된 멤버함수의 몸체가 정의된 부분)

다른 .cpp 소스파일 : #include 클래스.h 포함시킨 뒤 객체 생성 시켜서 사용 O

04-3. 상속과 다형성

[캡슐화]

-이전 코드 재사용 위해 관련 데이터, 함수 하나로 묶음

-목적

1) 관련 데이터,함수 묶기

2) 객체 내부 데이터 보호(정보 은닉)

 

[정보은닉]

-필드는 private, 메소드는 public으로 선언하여 외부에서 객체 내부 데이터 접근 X

 

[상속]

-기존 코드 재사용 위해, 이미 작성된 부모 클래스를 상속받는 자식 클래스 생성 기법

-부모의 모든 필드,메소드 상속받고, 자체 메소드 추가, 변형 가능

 

[다형성]

-객체가 취하는 동작이 상황에 따라 달라지는 것을 의미

-C++에서 서로 다른 자료형의 객체들이 같은 이름의 멤버함수에 응답하여

서로 다른 동작 보여주는 다형성 구현 가능

-다형성 사용하면 코드가 더 간결해짐

 

 

[UML] Unified Modeling Language

: 객체 설계 모델링 다이어그램 표기법

클래스 다이어 그램을 살펴보자.

 

-각 클래스는 사각형으로 표현

클래스이름

필드:자료형

메소드:반환형

 

-클래스 간의 관계는 화살표로 표현

연관, 집합, 상속, 의존 ...등의 관계가 있다.

728x90

'C++, C언어 > [문법]_C++' 카테고리의 다른 글

C++_2주차_정리  (0) 2021.12.20
C++_1주차_정리  (0) 2021.12.20
C++ 객체지향프로그래밍_Ch03정리  (0) 2021.09.13
C++ 객체지향프로그래밍_Ch02정리  (0) 2021.09.13
C++ 객체지향프로그래밍_Ch01정리  (0) 2021.09.06