윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 04. 클래스의 완성.

Slides:



Advertisements
Similar presentations
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
Advertisements

01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
최윤정 Java 프로그래밍 클래스 상속 최윤정
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 07. 반복실행을 명령하는 반복문.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
5장 배열 작성자 : 변재현.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
윤성우의 열혈 C++ 프로그래밍 Chapter C++에서의 구조체 윤성우 저 열혈강의 C++ 프로그래밍 개정판.
Chapter 25. 메모리 관리와 메모리의 동적 할당
5장. 참조 타입.
제 3장. C보다 나은 C++ II.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Chapter 06. printf 함수와 scanf 함수 정리하기
자바 5.0 프로그래밍.
23장. 구조체와 사용자 정의 자료형 2.
Java 6장. 클래스 : 속성 public class SumTest {
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 03. 변수와 연산자.
Sungkyunkwan University OS Project Dongkun Shin
14장. 포인터와 함수에 대한 이해.
자바 5.0 프로그래밍.
11장. 1차원 배열.
C#.
13. 연산자 오버로딩.
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
7장 인터페이스와 추상 클래스.
Method & library.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
20장. 객체지향 프로그래밍 01_ 객체지향 프로그래밍의 시작.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
12. 상속 : 고급.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Chapter 16. C++ 형 변환 연산자와 맺는 글
Chapter 13. 템플릿(Template) 1
Chapter 15. 예외처리(Exception Handling)
Chapter 09. 포인터 1.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
3. 모듈 (5장. 모듈).
Chapter 27. 파일의 분할과 헤더파일의 디자인
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Numerical Analysis Programming using NRs
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 23. 구조체와 사용자 정의 자료형2.
Chapter 11 구조체.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 07. 상속의 이해.
상속 (Inheritance) private 전용부분 전용부분 공용부분 공용부분 public 기본 클래스
13. 포인터와 배열! 함께 이해하기.
7 생성자 함수.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 04. 클래스의 완성

윤성우의 열혈 C++ 프로그래밍 Chapter 04-1. 정보은닉 윤성우 저 열혈강의 C++ 프로그래밍 개정판

정보은닉의 이해 윤성우의 열혈 C++ 프로그래밍 정보은닉 실패 정보은닉 실패 예제에서 보이듯이 멤버변수의 외부접근을 허용하면, 잘못된 값이 저장되는 문제가 발생할 수 있다. 따라서 멤버변수의 외부접근을 막게 되는데, 이를 가리켜 정보인닉이라 한다. Point의 멤버변수에는 0~100 이외의 값이 들어오는 것을 막는 장치가 없고, Rectangle의 멤버변수에는 좌우 정보가 뒤바뀌어 저장되는 것을 막을 장치가 없다.

Rectangle 객체의 이해 윤성우의 열혈 C++ 프로그래밍 클래스의 객체도 다른 객체의 멤버가 될 수 있다.

Point 클래스의 정보은닉 결과 윤성우의 열혈 C++ 프로그래밍 클래스의 멤버변수를 private으로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의해서, 안전한 형태로 멤버변수의 접근을 유도하는 것이 바로 ‘정보은닉’이며, 이는 좋은 클래스가 되기 위한 기본조건이 된다! 정보은닉! 정보은닉으로 인해서 추가되는 엑세스 함수들! 벗어난 범위의 값 저장을 원천적으로 막고 있다! 함수만 한번 잘 정의되면 잘못된 접근은 원천적으로 차단된다! 하지만 정보은닉을 하지 않는다면, 접근할 때마다 주의해야 한다!

Rectangle 클래스의 정보은닉 결과 윤성우의 열혈 C++ 프로그래밍 좌 상단과 우 하단이 바뀌는 것을 근본적으로 차단!

const 함수 윤성우의 열혈 C++ 프로그래밍 멤버함수의 const 선언 이 둘은 멤버함수입니다. const 함수는 const가 아닌 함수를 호출하지 못한다! 간접적인 멤버의 변경 가능성까지 완전히 차단! const로 상수화 된 객체를 대상으로는 const 멤버함수만 호출이 가능하다! GetNum이 const 선언되지 않았다고 가정!

윤성우의 열혈 C++ 프로그래밍 Chapter 04-2. 캡슐화 윤성우 저 열혈강의 C++ 프로그래밍 개정판

콘택600과 캡슐화 윤성우의 열혈 C++ 프로그래밍 약의 복용순서가 정해져 있다고 한다면, 캡슐화가 매우 필요한 상황이 된다! 콘택 600을 표현한 클래스들... 코감기는 항상 콧물, 재채기, 코막힘을 동반한다고 가정하면 캡슐화 실패! 캡슐화란! 관련 있는 모든 것을 하나의 클래스 안에 묶어 두는 것!

캡슐화 된 콘택600 윤성우의 열혈 C++ 프로그래밍 캡슐화의 이점 A 클래스가 캡슐화가 잘 되어있다면, A 클래스가 변경되더라도, A와 연관된 B, C, D 클래스는 변경되지 않거나 변경되더라도 그 범위가 매우 최소화된다. 코감기와 관련 있는 것을 하나의 클래스로 묶었다. 묶음으로 인해서 복잡한 복용의 방법을 약 복용자에게 노출시킬 필요가 없게 되었다. 아무리 CONTAC600 클래스가 바뀌어도, 약의 복용순서가 바뀌더라도, 이와 관련있는 ColdPatient 함수는 바뀌지 않는다.

윤성우의 열혈 C++ 프로그래밍 Chapter 04-3. 생성자와 소멸자 윤성우 저 열혈강의 C++ 프로그래밍 개정판

생성자의 이해 윤성우의 열혈 C++ 프로그래밍 클래스의 이름과 동일한 이름의 함수이면서 반환형이 선언되지 않았고 실제로 반환하지 않는 함수를 가리켜 생성자라 한다! 생성자는 객체 생성시 딱 한번 호출된다. 따라서 멤버변수의 초기화에 사용할 수 있다. 생성자도 함수의 일종이므로, 오버로딩이 가능하고 디폴트 값 설정이 가능하다.

생성자의 함수적 특성 윤성우의 열혈 C++ 프로그래밍 생성자도 함수의 일종이므로 오버로딩이 가능하다. 생성자도 함수의 디폴트 값 설정이 가능하다.

Point, Rectangle 클래스에 생성자 적용 윤성우의 열혈 C++ 프로그래밍 이 위치에서 호출할 생성자를 명시할 수 없다! 이에 대한 해결책으로 이니셜라이저 제시!

멤버 이니셜라이저 기반의 멤버 초기화 윤성우의 열혈 C++ 프로그래밍 멤버 이니셜라이저는 함수의 선언 부가 아닌, 정의 부에 명시한다. 이니셜라이저의 실행을 포함한 객체 생성의 과정

이니셜라이저를 이용한 변수 및 상수의 초기화 윤성우의 열혈 C++ 프로그래밍 왼쪽에서 보이듯이 이니셜라이저를 통해서 멤버변수의 초기화도 가능하며, 이렇게 초기화 하는 경우 선언과 동시에 초기화되는 형태로 바이너리가 구성된다. 즉, 다음의 형태로 멤버변수가 선언과 동시에 초기화된다고 볼 수 있다. int num1 = n1; 따라서 const로 선언된 멤버변수도 초기화가 가능하다. 선언과 동시에 초기화 되는 형태이므로...

멤버변수로 참조자 선언하기 윤성우의 열혈 C++ 프로그래밍 이니셜라이저의 초기화는 선언과 동시에 초기화 되는 형태이므로, 참조자의 초기화도 가능하다!

디폴트 생성자 윤성우의 열혈 C++ 프로그래밍 생성자를 정의하지 않으면 인자를 받지 않고, 하는 일이 없는 디폴트 생성자라는 것이 컴파일러에 의해서 추가된다. 따라서 모든 객체는 무조건 생성자의 호출 과정을 거쳐서 완성된다.

생성자 불일치 윤성우의 열혈 C++ 프로그래밍 이 형태로 객체 생성이 가능하기 위해서는 다음 형태의 생성자를 별도로 추가해야 한다. SoSimple( ) : num(0) { } 생성자가 삽입되었으므로, 디폴트 생성자는 추가되지 않는다. 따라서 인자를 받지 않는 void형 생성자의 호출은 불가능하다.

private 생성자 윤성우의 열혈 C++ 프로그래밍 그러나 이렇듯 클래스 내부에서는 private 생성자의 호출이 가능하다. AAA 클래스의 멤버함수 내에서도 AAA 클래스의 객체 생성이 가능하다! 생성자가 private이라는 것은 외부에서의 객체 생성을 허용하지 않겠다는 뜻이다!

소멸자의 이해 윤성우의 열혈 C++ 프로그래밍 AAA 클래스의 소멸자! 객체 소멸 시 자동으로 호출된다. 생성자와 마찬가지로 소멸자도 정의하지 않으면 디폴트 소멸자가 삽입된다.

소멸자의 활용 윤성우의 열혈 C++ 프로그래밍 생성자에서 할당한 메모리 공간을 소멸시키기 좋은 위치가 소멸자이다.

Chapter 04-4. 클래스와 배열 그리고 this 포인터 윤성우의 열혈 C++ 프로그래밍 Chapter 04-4. 클래스와 배열 그리고 this 포인터 윤성우 저 열혈강의 C++ 프로그래밍 개정판

객체 배열과 객체 포인터 배열 윤성우의 열혈 C++ 프로그래밍 Person arr[3]; Person * parr=new Person[3]; 객체 배열! 객체로 이뤄진 배열, 따라서 배열 생성시 객체가 함께 생성된다. 이 경우 호출되는 생성자는 void 생성자 Person * arr[3]; arr[0]=new Person(name, age ); arr[1]=new Person(name, age ); arr[2]=new Person(name, age ); 객체 포인터 배열! 객체를 저장할 수 있는 포인터 변수로 이뤄진 배열! 따라서 별도의 객체생성 과정을 거쳐야 한다. 객체 관련 배열을 선언할 때에는 객체 배열을 선언할지, 아니면 객체 포인터 배열을 선언할지를 먼저 결정해야 한다.

this 포인터의 이해 윤성우의 열혈 C++ 프로그래밍 실행결과 this 포인터는 그 값이 결정되어 있지 않은 포인터이다. 왜냐하면 this 포인터는 this가 사용된 객체 자신의 주소값을 정보로 담고 있는 포인터이기 때문이다.

this 포인터의 활용 윤성우의 열혈 C++ 프로그래밍 this->num1은 멤버변수 num1을 의미한다. 객체의 주소 값으로 접근할 수 있는 대상은 멤버변수이지 지역변수가 아니기 때문이다!

Self-reference의 반환 윤성우의 열혈 C++ 프로그래밍 실행결과

Chapter 04가 끝났습니다. 질문 있으신지요?