캡슐화의 의미 객체는 스스로 독립적이며 기초적인 부품처럼 사용할 수 있다. 캡슐화를 위해 추상화(속성과 동작 정의)와 정보 은폐(외부에서 사용하는 기능만 공개 / 멤버 변수는 숨기고 멤버 함수를 통해 멤버 변수에 접근)가 사용된다. 정보 은폐(몰라도 된다, 몰라야 한다)의 예시 자동차의 예시를 들 수 있다. 자동차를 타는 사람은 타는 방법만 알면 되고 자동차 부품의 내부 동작은 몰라도 된다. 불필요한 정보는 숨김으로써 사용자는 최소한의 정보만으로 부품을 쉽게 사용할 수 있다. 그리고 모터 제어 등 치명적인 부분은 부주의한 사용으로부터 스스로를 방어하기 위해 사용자가 몰라야 한다. 추가로, 몰라야 하는 또다른 이유로는 클래스의 안정적인 기능 개선이 있다. 클래스의 성능을 개선하기 위해 비공개 영역을 수정하..
15-1장 1. const 장점 const는 변수를 통제해서 좋다. 변경되지 않아야 하는 변수라면 const를 사용하는 것을 습관화 하는 것이 유지보수 측면에서 좋다. 15-4장 2. 레퍼런스를 사용하는 이유 보기 편하다 16-3장 3. 인라인은 빠르다. 코드가 짧고 간결할 때 사용한다. 속도 문제를 해결한다. 때는 생성자와 파괴자를 일일이 호출한다. (for loop) 컴파일된 함수 코드가 프로그램의 코드 안에 직접 삽입된다. 실행 속도를 고려하여 사용한다. c언어에서 많이 쓴다. 재귀 호출 코드는 인라인 함수를 사용하지 못한다. 속도 측면에서 유리하고, 메모리 측면에서 불리하다. 4. 매크로를 사용하지 않는 이유 디버깅이 되지 않는다. 가장 치명적인 이유이다. ex) opencv dll debug 모..
15-4.레퍼런스 15-4-가.변수의 별명 레퍼런스(Reference)는 C++에서 새로 추가된 기능이며 변수의 별명(alias)을 정의한다. 별명을 붙이게 되면 한 대상에 대해 두 개의 이름이 생기게 되고 본래 이름은 물론이고 별명으로도 변수를 사용할 수 있다. 레퍼런스를 선언하는 기본 형식은 다음과 같다. type &변수=초기값; 포인터 변수를 선언할 때 구두점 *를 사용하는데 비해 레퍼런스를 선언할 때는 구두점 &를 사용한다. 포인터가 기본 타입에 대한 유도형이듯이 레퍼런스도 유도형이라는 점에서 동일하되 특정 대상체에 대한 별명이므로 선언할 때 어떤 대상체에 대한 별명인지를 반드시 밝혀야 한다는 점이 다르다. 다음이 레퍼런스를 사용하는 가장 간단한 예제이다. 예제 : Ref1 #include "Tu..

18-1.타입 컴퓨터의 메모리는 0과 1만을 기억할 수 있는 비트로 구성되어 있다. 이 절에서는 이 단순한 비트의 집합으로 큰 수와 복잡한 실수 등이 어떻게 기억되고 관리되는지에 대해 연구해 본다. 이 내용은 당장 실무에 도움을 줄 수 있는 실용적인 이론은 아니므로 꼭 몰라도 상관은 없다. 하지만 타입의 내부 구조를 이해함으로써 컴파일러의 동작을 좀 더 깊이있게 이해하고 메모리에 저장된 값을 직접 평가하고 다룰 수 있는 직관력을 키울 수 있다. 18-1-가.정수의 내부 컴퓨터가 정수를 다루는 방법은 비교적 간단하다. 1과 0을 기억할 수 있는 하나의 비트로 두 가지 상태를 표현할 수 있으며 이런 비트를 여러 개 모으면 1과 0의 조합으로 더 큰 이진수를 나타낼 수 있다. 먼저 부호가 없는 경우의 정수 구..

16-3.인라인 함수 인라인 함수, 디폴트 인수, 오버로딩은 C++에서 새로 추가된 기능들이다. 따라서 C 컴파일러에서는 컴파일되지 않는다. 16-3-가.인라인 함수 함수는 반복된 동작을 정의함으로써 프로그램의 기본 부품을 구성하는 단위가 된다. 입력과 출력, 내부 동작을 한 번만 잘 작성해 놓으면 필요할 때마다 불러서 똑같은(또는 비슷한) 작업을 여러 번 수행할 수 있다. 다음 예제는 인수로 전달된 n보다 작은 정수 난수를 하나 생성한 후 돌려 주는 randfunc라는 함수를 정의하고 main에서 이 함수를 세 번 호출한다. 예제 : randfunc #include "Turboc.h" int randfunc(int n) { return rand()%n; } void main() { int i,j,k; ..
15-1. const 15-1-가.상수의 정의 키워드 const는 값을 변경할 수 없는 상수를 정의한다. 기본 형식은 다음과 같다. const 타입 변수명=초기값; 변수를 선언하는 일반적인 문장과 비슷하되 앞에 const를 붙이고 뒤에 반드시 초기값을 적어야 한다는 점만 다르다. 다음 예제는 세 개의 상수를 정의하고 있다. 예제 : Const #include const int HourPerDay=24; const int MinPerHour=60; const int SecPerMin=60; void main() { printf("하루는 %d초입니다.\n",HourPerDay*MinPerHour*SecPerMin); } 하루는 24시간이고 한 시간은 60분, 1분은 60초로 정의했다. 24*60*60이라고 ..
개념 1. 기본 생성자(Default constructor) 프로그래머가 정의한 생성자가 없는, 자동적으로 컴파일러에 의해 생성되는 생성자를 가리킨다. C++의 경우에는 생성자가 자동으로 생성되었는지나 사용자가 정의했는지와 관련 없이, 인자를 제공하지 않은 생성자를 말한다. 2. 복사 생성자(copy constructor) 어떤 객체의 초기화를 위해 그와 같은 타입의 객체로부터 초기화할 때 호출되는 함수이다. 간단히 왜곡하자면 func A 에 func B 를 복사해주는 것이라고 할 수 있다. 3. 복사 대입 연산자(copy assignment operator) 같은 타입의 다른 객체에 어떤 객체의 값을 복사하는 용도로 쓰이는 함수이다. 간단히 왜곡하자면 func A 에 func B 를 대입해주는 것이라고..

7-1.지역변수 7-1-가.전역변수와 지역변수 기억 부류(Storage Class)란 변수가 저장되는 위치에 따라 결정되는 변수의 여러 가지 성질을 의미한다. 변수가 어디에 생성되는가에 따라 통용 범위와 파괴 시기 등의 특징이 결정된다. 이 내용은 C의 문법 체계를 이해하는데 상당히 중요한 비중을 차지하므로 숙독하여 완전히 이해하도록 하자. 기억 부류에는 4가지 종류가 있는데 일단 도표로 특성을 요약하였다. 기억 부류전역지역정적레지스터 지정자 extern auto static register 저장 장소 정적 데이터 영역 스택 정적 데이터 영역 CPU의 레지스터 선언 위치 함수의 외부 함수의 내부 함수의 내부 함수의 내부 통용 범위 프로그램 전체 함수의 내부 함수의 내부 함수의 내부 파괴 시기 프로그램 종..
생성자 1. malloc/free보다 new/delete를 많이 쓰는 이유 new/delete는 생성자와 파괴자가 존재한다. 하지만 malloc/free는 생성자를 호출하지 않아서 직접 만들어서 사용해야 한다. 2. 생성자/파괴자와 가독성 가독성을 위해 아무것도 하지 않더라도 생성자와 파괴자를 모두 정의하기도 한다. 3. 초기화 초기화할 때는 생성자와 파괴자를 일일이 호출한다. (for loop) 4. 복사 생성자를 만들어야 하는 이유 동적 할당 시에 문제가 되기 때문이다. 복사 생성자에서 얕은 복사를 하게 되면 힙에 동적 할당된 메모리를 공유하게 되고 delete를 했을 때 각 객체의 파괴자에서 실행되어 이미 해제된 메모리를 다시 해제하려고 시도하게 되므로 에러가 뜬다. 복사 생성자를 통해 새롭게 메모..
클래스 1. new로 메모리를 할당할 때 배열보다는 struct type을 더 많이 쓴다. 배열 타입 처리는 영상처리에서 많이 쓴다. 2. malloc보다는 new를 많이 쓴다. 하나로 통일하는 것이 좋기 때문이다. new로 하면 재할당을 하기 어렵고 재할당을 하면 매번 번지가 바뀌며 심지어 축소할 때도 번지가 바뀐다. 그래서 할당 대상이 객체가 아니고 재할당을 빈번하게 한다면 malloc/free를 쓸 수도 있지만 객체를 할당할 때는 new/delete를 쓰는 것이 좋다. new/delete는 객체가 생성, 파괴될 때 생성자와 파괴자가 호출된다. 차이점을 확실하게 알아보면 다음과 같다. new의 구현을 살펴보면 malloc이 호출된다. 즉 간단히 말하면 new = malloc + something의 관..