본문 바로가기

CS/Cpp

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++에서 사용하는 리다이렉션 기호는 >>와 더보기