Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 04. 클래스의 완성."— Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

24 객체 배열과 객체 포인터 배열 윤성우의 열혈 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 ); 객체 포인터 배열! 객체를 저장할 수 있는 포인터 변수로 이뤄진 배열! 따라서 별도의 객체생성 과정을 거쳐야 한다. 객체 관련 배열을 선언할 때에는 객체 배열을 선언할지, 아니면 객체 포인터 배열을 선언할지를 먼저 결정해야 한다.

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

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

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

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


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

Similar presentations


Ads by Google