본문 바로가기

CS

Information-hiding Information-hiding (정보 은닉) 객체 지향 언어에서는 객체는 다른 객체의 내부적인 데이터를 직접 컨트롤하지 않는다. 즉, 내부 데이터를 외부로 노출하지 않는 다는 말이다. (그렇게 구현해야 하고.) 더보기
Encapsulation encapsulation (캡슐화) function ⊂ class 하나의 class에 그의 속성처럼 function들이 줄줄줄 달려 있다.따라서 class 단위로 호출하면 필요 함수들을 중복 할 필요가 없어진다.이것이 캡슐화의 장점!.즉, 라이브러리다. 다만 C(절차지향언어)와 다르게 범위가 더 확장되었다고 생각하면 된다.절차 지향 언어에서는 라이브러리를 함수 단위이지만, 객체 지향 언어에서는 라이브러리가 클래스 단위이다. 더보기
Inline inline (인라인) keyword assembly language의 MECRO와 같은 기능이다. 함수를 호출하게 되면 오버헤드가 발생한다.하지만 인라인을 사용하면 컴파일 시 해당 블럭으로 분기하는 것이 아니라 해당 코드를 호출한 부분에 끼워 넣는다.그럼 분기가 발생하지 않아 오버헤드 역시 발생하지 않는다. 그러나 이것을 사용하면 호출한 부분의 코드가 그만큼 늘어나게 된다. 즉, 여러 번 사용할 경우 호출한 코드는 계속 늘어난다는 것이다. 그럼 나중엔 어마어마한 덩어리가 되겠지... 이럴 땐 그냥 함수 호출이 낫다. Inline ex)#includeusing namespace std; // 정수값을 제곱하는 함수inline double square(double i){ return i *i;} int m.. 더보기
Reference reference (레퍼런스) 참조하는 레퍼런스를 변경하면 참조 당하는 변수도 변한다. 여기서 레퍼런스와 포인터의 차이점은 ?! 포인터 : 변수 레퍼런스 : 변수가 아니다. 따라서 포인터는 어떤 대상이든 바로바로 바꾸어서 참조할 수 있지만, 레퍼런스는 자기만의 메모리를 할당받지 못하므로 참조 대상을 변경할 수 없다. 또한 레퍼런스는 null 이 될 수 없다. Reference ex)#includeusing namespace std; int main(){ int var; int &ref = var; var = 10; cout 더보기
Namespace namespcae (네임스페이스) 네임스페이스에 속한다면 같은 이름의 구성 멤버를 가질 수 있다. 네임스페이스는 변수나 함수 등의 내용을 선언한다. 선언된 내용을 멤버라 부른다. 네임스페이스는 변수 뿐만 아니라 함수도 있으므로 파일의 선언부에서 선언한다. 네임스페이스에 선언된 내용을 사용할 때는 범위 연산자(::)로 나타낸다.>> [namespace]::member 여러 개의 네임스페이스를 매번 선언하는 일은 여간 귀찮다. 따라서 using을 사용하는데 using namespcae [namespcae name];과 같이 표현한다. (본문 참조. p.142)그리고 나서 네임스페이스의 멤버를 사용할 때는 그냥 변수명만 갖다 쓰면 된다. 하지만 변수명이 겹치는 경우엔 어쩔 수 없이 일일이 다 지정해줘야 한다... 더보기
Runtime Error runtime error (런타임 에러) 변수의 초기값이나 잘못 할당된 기억공간 때문에 프로그램 실행 중에 잘못된 메모리 참조나 논리적 오류가 발생하는 에러. 초기화하지 않은 상태에서 변수를 사용하는 것은, 변수에 할당된 기억 공간에 잔류하는 쓰레기 값들이 남아있다. 더보기
Redirection Redirection (리다이렉션) C++에서 사용하는 리다이렉션 기호는 >>와 더보기
Variadic is 가변인수.함수는 인자 개수를 고정하지 않고 가변으로 사용할 수 있다. 1. 가변 인수를 사용하려면 stdarg.h 헤더 파일을 첨부해야한다.※stdarg.h 의 정의 typedef struct{char *a0; //첫 번째 인자를 가리키는 포인터int offset; //다음 매개변수의 바이트 단위의 변위(offset)}va_list; 2. 가변 인수 내부구조.1) va_list구조체로 가변 인자의 내부 상태를 저장한다.stack에 저장되며 함수는 stack에서 인수를 꺼내 쓴다.(stack에서 읽을 때 포인터 연산을 해야한다.)∴현재 읽고 있는 번지를 기억하기 위해 va_list형의 포인터 변수 하나가 필요하다.2) va_start(va_list arg, parmN v)가변 인수 arg를 사용하기 위해 .. 더보기
What is pointer? 포인터란??포인터는 가리키는 변수의 시작 주소(메모리의 위치)를 기호화(&변수)한 것으로 "무엇을 가리키는 것"을 의미.즉, 6칸인 장롱에 각 서랍의 고유이름(1번 칸, 2번 칸, 3번 칸, 4번 칸, 5번 칸, 6번 칸)에 여름 옷, 겨울 옷 등의 라벨을 붙이고 서랍 안에 옷들을 넣는다.그럼 여기서 서랍의 고유이름들은 변수의 주소가 되겠고, 따로 붙인 라벨은 변수가 되겠으며, 서랍 안에 옷들은 data들이 되겠다. ※ 메모리 주소.메모리는 위치를 구분하기 위해 바이트 단위로 표시하는 물리적인 주소값을 갖는다.하나의 변수를 선언하면 컴퓨터는 그 데이터 타입의 크기만큼 메모리에 연속된 바이트의 메모리 영역을 할당한다. 1byte의 메모리 주소는 4bit씩 묶어서 16진수로 표현하면 2개의 숫자 00~FF까.. 더보기