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
: 객체 설계 모델링 다이어그램 표기법
中 클래스 다이어 그램을 살펴보자.
-각 클래스는 사각형으로 표현
클래스이름
필드:자료형
메소드:반환형
-클래스 간의 관계는 화살표로 표현
연관, 집합, 상속, 의존 ...등의 관계가 있다.
'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 |