기초 12

C++ 공부하기 - 7.new&delete

이 내용은 저번에 포스팅 하려고 했습니다만... 제가 malloc&free의 개념이 모호해져서 다시 공부하고 오느라 조금 늦었습니다. 우선 C언어에서의 malloc&free는 동적할당을 함으로 정적할당보다 더 효율적으로 메모리를 사용할 수 있었습니다. 이 개념이 C++에서도 똑같이 적용되어 넘어왔으나 malloc&free의 단점인 할당 대상의 정보를 무조건 바이트로 받는다는 점 반환형이 void이기 때문에 적절한 형변환을 거쳐야한다는 점 이 두가지의 단점을 가지지 않은 다른 함수로 대체하여 나온 함수입니다. 이 함수가 바로 new&free 입니다. 그러면 저 두가지의 단점을 극복했다면 어떻게 극복했고 뭐가 더 좋기 때문에 C++에서 쓰이는지 알아보겠습니다. 우선 malloc을 대체한 키워드 new는 in..

C++ 공부하기 - 6.참조자와 함수

저번 시간에 이어서 참조자에 대해서 공부하겠습니다. 참조자란 마치 별칭을 달아주는 것과 같이 쓰인다고 했습니다. 그러면 그 참조자를 함수에서는 어떻게 쓰는지 알아보겠습니다. C언어에서 배운 함수 호출 종류로는 우선 Call-by-value가 있었고 다음으로 Call-by-reference(address)가 있었습니다. 포인터를 공부할 때 익히셨을꺼라 생각합니다. 간략하게 풀이해보면 Call-by-value는 값을 인자로 전달하는 함수 호출 방식이며 Call-by-reference는 주소 값을 인자로 전달하는 함수의 호출방식입니다. 차이점을 명확이 할려면 간단한 함수로 보는게 빠릅니다. void Swap(int num1, int num2) { int temp = num1; num1 = num2; num2 ..

C++ 공부하기 - 5.참조자(Reference)

참조자라는 것은 아마도 포인터에서 많이 들어보셨을겁니다. 하지만 이 참조자는 포인터와는 별개의 개념이니 굳이 포인터를 떠올리시지 않으셔도 됩니다. 변수란 할당된 메로리 공간에 붙여진 이름이고 그 이름을 통해서 호출하게 됩니다. 그렇다면 하나의 메모리 공간에 두 개 이상의 이름이 붙을 수 있을까요? 두 개 이상의 이름을 붙이는게 바로 참조자입니다. i라는 변수가 선언됬다고 가정해보면 i는 메모리에 일정 공간을 할당받으며 i라는 이름으로 접근이 가능합니다. 거기다 int &j = i; 라고 선언하면 i의 메모리 공간에 이름이 i와 j가 선언되는겁니다. (※ &는 주소 값을 반환해주는 연산자지만 이렇게 새로 선언하는 변수 앞에 오게 되면 참조자 선언을 뜻합니다. 이미 선언된 변수앞에 오면 주소 값을 반한합니다..

C++ 공부하기 - 4.이름공간(namespace)

오늘 배울 내용은 이름공간(namespace)입니다. 이러한 이름공간이 필요한 이유부터 말씀드리겠습니다. 프로그램이 커지면서 코드도 점점 복잡하면서 대형화 되어갑니다. 그러다보니 개발자들이 서로 다른 부분을 맡아서 개발하게 됩니다. 모듈화해서 어디는 다리 어디는 몸통 어디는 팔 어디는 머리, 이런식으로 개발해서 나중에 조립을 한 셈이죠. 이런 개발 방식에서 큰 문제점이 생깁니다. 바로 함수의 이름이 겹치는 겁니다. 함수 이름이 같다보니 계속 코드는 충돌이나고 그렇다고 이미 쓴 코드에서 누가 뭘 바꾸고 누구는 안바꾸고 이런 문제가 발생할 수 있어서 미연에 방지하기 위해 생긴 것이 바로 이름공간(namespace)입니다. 이러한 이름공간의 기본적인 원리는 마치 원산지를 지정한 것과 같은 원리입니다. 같은 함..

C++ 공부하기 - 3.인라인 함수

오늘 배워볼 내용은 인라인(inline)함수 대해서 공부하겠습니다. (여러분이 이미 C언어를 어느정도 익히셨겠지만 만약 까먹으셧다면 다시 보고오시거나 제 블로그 C언어 공부하기에서 보고오셔도 됩니다. 매크로 함수 바로가기 C언어에서 매크로함수에 대해 배우셨을 꺼에요. 매크로 함수의 장단점을 비교해보겠습니다. 장점 단점 전처리기를 통해 실행 속도가 빠르다 복잡한 함수를 매크로 함수로 정의하기 어렵다 코드의 가독성이 높아진다 증감 연산자 사용시 중첩된 결과로 잘못된 결과가 나온다 코드의 수정이 용이하다 " " 안의 내용은 적용이 안되서 #(문자열 변환 연산자)를 사용해야 한다 이런 매크로 함수가 전처리 과정을 거치면 함수의 몸체 부분이 함수의 호출문을 대신하게 된다. 위와 같은 형식으로 대체하게 되고 이렇게..

C++ 공부하기 - 2.함수의 오버로딩와 매개변수의 디폴트 값

오늘 배워볼 내용은 C++의 오버로딩과 매개변수의 디폴트 값에 대해서 공부하겠습니다. 우선 C언어를 공부하면서는 오버로딩이라는 것을 배우지 않습니다. 이유는 C언어에서는 오버로딩이 불가능하기 때문입니다 이 오버로딩은 동일한 이름의 함수가 정의되는것을 뜻합니다. 다만 매개변수가 다르지요. C언어에서 오버로딩이 불가능한 이유는 우선 C++과 C언어는 호출할 함수를 찾을 때 방법이 다르기 때문입니다. C언어는 함수의 이름으로 C++은 함수의 이름과 매개변수의 선언 이 두가지를 보고 찾기 때문에 오버로딩이 가능한 이유입니다. 그럼 한번 테스트를 해보겠습니다. #include int Add(int a,int b); int Add(int a,int b, int c); int main(void) { int a,b,c..

C++ 공부하기 - 1.C++의 입출력

C++은 C언어를 포함한다? 라고 말할 수 있습니다. 그렇기에 C언어로 작성된 대부분의 프로그램은 C++ 컴파일러로 컴파일이 가능하기도 하지요 허나 C++은 C언어가 가지고 있지 않는 객체 지향적 특징등이 있습니다. 처음 배우는 만큼 간단한 입출력에 대해서 배워보겠습니다. 처음 C언어를 배울 때 Hello World! 를 출력했었습니다. 기억 하시나요? 그래서 C++에서도 Hello World!를 출력해보겠습니다. #include int main(void) { std::cout

초급 C언어 공부 - 5.동적 메모리 할당

오늘 제가 배운 내용은 동적 메모리입니다. C++에서 새로운 키워드인 new&delete를 공부하려고 보니 C언어의 malloc&free가 기억이 안나서 다시 공부했습니다.. 프로그램이 메모리를 할당 받는 방식은 두 가지의 방법이 있습니다. 우선 우리가 C언어를 계속 공부하면서 자연스럽게 사용하던 정적 할당입니다. 예로 int나 double을 사용하면 4바이트 또는 8바이트를 할당 받는다는 것을 여러분은 알고 계실껍니다. 그렇다면 이러한 정적 할당이 뭐가 문제여서 동적 할당이 등장했냐고 물어보시면 정적 할당의 단점은 프로그램 실행 전에 먼저 정해진 메모리를 할당 받는게 문제입니다. 작은 메모리라면 별 신경 안쓰셔도 되겠지만 프로그램이 커지면 커질 수록 낭비되는 메모리도 많을 것이고 초과하는 메모리도 있을..

초급 C언어 공부 - 4.구조체(1)

우리가 알고 있는 자료형에는 int나 char 같은 기본 자료형이 있습니다. 기본 자료형 이외에도 파생 자료형으로는 포인터와 배열, 열거형 그리고 오늘 배울 구조체가 있습니다. 즉 구조체는 하나의 자료형입니다. 어떤 자료형이냐고 물어보시면 구조체는 다른 자료형을 묶기 위해서 사용하는 자료형입니다. 같은 자료형을 묶는게 배열이라면 다른 자료형을 묶는건 구조체입니다. 자료형은 struct라는 키워드로 선언하며 여러개의 멤버를 가집니다. 예시로 학생을 구조체로 만들어보면 struct student { char name[10]; int number; double grade; }; 이런 식으로 선언할 수 있습니다. 선언하였다고 해서 변수가 선언된게 아닙니다. 지금 위의 식은 그저 틀만 만들었다고 보시면 됩니다. ..

초급 C언어 공부 - 3.포인터(1)

오늘은 포인터에 대해서 간략하게 설명드리겠습니다. 간단하게 포인터란 메모리에 있는 데이터의 주소를 가지고 있는 변수입니다. 메모리 상에 있는 데이터들은 모두 주소를 가지고 있습니다. 마치 우리들이 사는 집의 주소와 같은 형식으로요 그런데 포인터는 데이터 값을 가지고 있는게 아니고 주소값을 가지고 있는 변수인겁니다. 굳이 왜 값이 아닌 주소를 가지고 있냐면 바로, 데이터의 복사를 피하고 복잡한 자료구조를 효율적으로 처리하며 메모리를 효율적으로 쓰기 위해서입니다. 즉 효율적이기 위해서 쓰는것입니다. 포인터를 보기 이전에 우리가 알고있는 변수는 모두 주소값을 가지고 있습니다. 우리가 변수를 선언하는 순간 그 변수는 주소를 부여받고 거기에 데이터값을 저장하는거지요 자료형을 보시다 싶이 자료형마다 데이터 크기가 ..