본문 바로가기
반응형

전체 글419

1Byte는 왜 8bit일까? 1Byte는 왜 8bit일까? 계산하기 편한 10진수를 놔두고 8bit를 1byte로 약속한 것일까? 수학을 배우면서 10진수에 익숙해진 우리들은 한 번쯤 궁금했던 질문일 것이다. 어느정도의 배경 지식이 받쳐준다면 이 질문에 대한 답을 이해하기 쉬울 것이다. 예전 컴퓨터를 찾아보면 byte를 4~10bit로 사용되던 것을 볼 수 있는데, 현대에 와서는 '1옥텟(8bit)'를 기준으로 삼는다. 단순한 계산부터 I/O기능을 처리하기 위해서는 작은 공간만 있어도 충분했지만, 문자를 처리하게 되면서 효율적인 공간 활용을 위해 적절한 크기를 찾아야만 했다. 지금은 가정용 컴퓨터만 봐도 256GB~1TB크기의 저장공간을 사용하고 있지만 당시에는 MB단위도 귀중하게 쓰였기 때문에 1bit의 공간도 소중하게 쓰여야 했.. 2022. 9. 28.
LV3 C++ 접근지정자 [lv3/C++] 접근지정자 접근지정자는 클래스의 멤버 변수나 멤버 함수들의 접근 권한을 설정하는 키워드이다. 3가지(private, protected, public) 키워드가 있으며 각각 접근할 수 있는 범위가 다르다. private- 클래스 자신 및 친구(friend)라 선언한 클래스만 접근 가능- private로 선언된 경우 자신의 멤버 함수 내부에서 멤버 변수들을 사용할 수 있다.- friend로 선언된 "함수"나 "클래스"는 private로 선언된 변수나 함수를 접근할 수 있다. protected- 클래스 자신 및 파생 클래스(자식 클래스)만 접근 가능- protected로 선언된 경우 자신의 멤버 함수 내부에서 멤버 변수들을 사용할 수 있다.- 상속받은 자식클래스의 경우도 멤버 함수 내에서 접.. 2022. 9. 21.
LV3 C++ 클래스와 객체 [lv3/C++] 클래스와 객체 객체지향 프로그래밍의 뿌리 클래스와 객체를 알아보자. 객체라는 단어를 사전에서 찾아보면 실제 세계에 존재하거나 생각할 수 있는 것이라고 나온다. 객체지향 이론에서는 개념이나 논리와 같은 무형적인 것들도 객체로 간주하는데 프로그램을 배울 때는 개념 잡기가 힘들다. 클래스는 쉽게 말해 객체를 찍어낼 수 있는 틀이라고 할 수 있다. 과거 한 교수님은 붕어빵 틀에 빗대어 가르치시곤 했는데 지금까지도 기억나는 것을 보니 잘 빗대어 가르치셨다고 생각되지만 붕어빵 예시는 들지 않겠다. 스무고개라는 어릴적 놀이를 기억하는지 모르겠지만, 우리는 스무고개를 할 때 어떤 것의 특징을 묻는다. 주제가 인물이라면 나이가 몇인지, 무슨 일을 하는지, 어떤 것을 먹는지 등을 물어보고 정답을 맞출 것.. 2022. 9. 14.
LV2 C++ 인라인(Inline) 함수 [lv2/C++] 인라인(Inline) 함수 인라인 함수란 정의된 함수들이 호출한 부분에 삽입되어 실행될 수 있도록 하는 함수이다. 일반적으로 정의된 함수는 호출되면 호출한 부분의 주소를 가지고 있다가 함수처리가 완료되면 기억했던 주소로 되돌아가는 과정을 거치지만 인라인 함수는 컴파일 하면서 호출 부분에 직접적으로 삽입되어 실행되기 때문에 실행속도가 빨라진다는 장점이 있다. 하지만 최신 컴파일러는 인라인 함수를 사용하겠다고 명시하지 않아도 적절하다고 생각되면 호출 부분에 자동으로 삽입하기도 하며 인라인 함수를 사용하겠다 해도 적절하지 않다고 생각되면 삽입하지 않아서 지금은 직접적으로 사용하는 경우는 드물다. 다음은 인라인 함수가 어떻게 변하게 되는지 컴파일 전 후 과정을 예시로 든 코드이다.// 인라인 .. 2022. 9. 13.
LV2 C++ 재귀(recursion) 호출 [lv2/C++] 재귀(recursion) 호출 재귀를 사전에서 찾아보면 어떠한 것을 정의할 때 자기 자신을 참조하는 것이라고 나온다. 함수를 사용하다 보면 자기 자신을 호출해야 더 수월한 경우가 있다. 대부분의 프로그래밍 책을 보면 재귀 호출을 설명할 때 팩토리얼(Factorial)을 예시로 들곤 한다. 재귀호출을 사용하지 않았을 경우와 함께 비교해 보자. 반복문 사용#include using namespace std;int main(){ int n, result = 1; cin >> n; for (int i = n; i > 0; i--) { result *= i; } cout 재귀 호출 사용#include using namespace std;int Factorial(int n);int main(){.. 2022. 9. 13.
LV2 C++ 값에 의한 호출(Call by Value)과 참조에 의한 호출(Call by Reference) [lv2/C++] 값에 의한 호출(Call by Value)과 참조에 의한 호출(Call by Reference) 일반적으로 함수에 값만 전달하는 경우가 있는 반면에 값을 다시 가져와서 사용해야 하는 경우가 있다. 계산되는 결과를 가져오는 경우 함수의 반환값을 이용할 수 있지만 반환값은 한 형태의 값만 반환할 수 있기 때문에 여러 개의 값을 동시에 사용하는 경우 이용하기 힘들다. 여기서 값만 전달 하는 경우를 값에 의한 호출 (Call by Value)이라고 하고 매개변수의 주소값을 이용해서 전달하는 경우를 참조에 의한 호출(Call by Reference)이라고 한다. 두개의 값을 바꾸는 프로그램을 통해 비교해 보도록 하자. 값에 의한 호출 (Call by Value)#include using name.. 2022. 9. 13.
LV2 C++ 함수(function) 사용 기초 [lv2/C++] 함수(function) 사용 기초 함수(function)란 특정한 작업을 수행하는 독립적인 코드의 집합이라 말 할 수 있다. 함수는 반복되는 기능을 하나로 묶어 프로그램을 모듈화 시킬 수 있고 함수 단위로 프로그램 작성 시 전체 프로그램을 논리적으로 구조화 시킬 수 있다는 장점이 있다.  함수의 기본적인 구조는 아래와 같다. 함수는 필요에 따라 호출하여 사용할 수 있는데 함수 내에서 처리한 결과를 호출한 부분에 돌려줄 수 있다. 이 때 반환되는 자료형에 따라 정수, 실수, 문자열 등을 반환 받거나 void로 선언하여 반환하지 않도록 설정할 수 있다. 인자의 목록에 넘기고 싶은 값이나 변수를 적어 함수의 블록안에서 사용할 수 있다. 간단한 프로그램으로 함수를 사용해보자.#include u.. 2022. 9. 13.
LV2 C++ 동적 할당(Dynamic Allocation) [lv2/C++] 동적 할당(Dynamic Allocation) C와 C++에서는 포인터를 사용하여 메모리를 직접 관리할 수 있다. 앞에서 설명한 것과 같이 포인터는 메모리상의 주소를 가리키고 있는데 포인터를 이용하여 런타임(프로그램이 실행되는 동안)시 이름이 없는 메모리를 할당할 수 있다. C에서는 malloc()과 free()함수를 통하여 메모리를 할당하거나 해제할 수 있지만 C++에서는 new와 delete연산자를 통해 메모리를 관리할 수 있다. 물론 C++은 C를 기반으로 하기 때문에 malloc()과 같은 함수도 사용이 가능하지만 이번에는 new와 delete를 이용한 동적 메모리 할당과 해제를 할 것이다. 기본 형식은 다음과 같다.typeName *pointerName = new typeNam.. 2022. 9. 8.
LV2 C++ 포인터(Pointer) 사용 [lv2/C++] 포인터(Pointer) 사용 포인터가 어떤 동작을 하는지 이해가 되었다는 가정하에 글을 작성하겠다.포인터를 처음 접하는 사람이라면 이전 글을 읽어본 후 이 글을 읽길 바란다.[lv2/C++] 포인터 Pointer 우리는 변수가 메모리상 어딘가에 저장되고 주소를 가지고 있다는 것을 알았다. 컴퓨터마다, 실행할 때 마다 주소가 바뀌지만 우리는 포인터를 이용해 주소에 접근하고 그 공간에 있는 값을 사용할 수 있다. 그렇다면 메모리 안에서 변수들이 갖는 크기는 얼마나 될까? 데이터 형식(자료형)에 따라 크기를 할당 받는 것을 배우고 sizeof()를 통해 알아볼 수도 있지만 실제 메모리 상 주소 간격에 따른 차이를 확인해 보자. 자료형에 따른 주소 간격 출력#include using names.. 2022. 9. 8.
LV2 C++ 포인터 Pointer [lv2/C++] 포인터 Pointer Pointer라는 단어를 사전에서 찾아보면 '가리키는 것'이라는 의미가 나올 것이다. 이 의미처럼 프로그래밍 언어에서 포인터는 메모리 공간에 저장된 변수의 주소를 가리키는 변수를 말한다. 비유를 통해 좀 더 쉽게 접근해 보자면 우리는 모두 '집'이라는 곳에 살고있다. 집은 각각 위치를 나타내는 유일무이한 '주소'를 가지고 있으며 이 주소는 중복되지 않고 단 하나의 집만을 가리킨다. 그 공간에 살고 있는 우리는 자기 자신이 살고있는 주소를 알고있으며 그 공간안에 어떤 '물건'들이 있는지 확인할 수 있다. 여기서 '물건'은 메모리 공간 안에 있는 '값'에 비유하고, '주소'는 변수가 저장된 메모리의 '주소'이며, '집'은 메모리의 '공간'을 뜻한다. 이 때 '우리'는 .. 2022. 9. 6.
LV1 C++ 데이터 형식(자료형) 종류와 범위 [lv1/C++] 데이터 형식(자료형) 종류와 범위개인용 컴퓨터가 귀하던 시절에는 저장용량이 매우 작아 프로그램 구현 시 사용되는 공간의 효율때문에 자료형의 크기가 매우 중요하였다. 하지만 현대 시대에서 컴퓨터의 저장용량이 기하급수적으로 증가함에 따라 프로그램 구현에서 자료형의 크기 중요도는 많이 낮아는데 그럼에도 불구하고 자료형은 가독성, 처리속도, 값의 범위, 효율성 등 여러가지 이유로 간과해서는 안될 부분이라고 생각한다. 우리는 항상 컴퓨터가 똑똑한다고 말하지만 컴퓨터는 0과 1밖에 모르는 멍청이 라는 것을 집고 넘어가야한다. 컴퓨터는  무수한 0과 1로 이루어진 데이터의 집합체이다. 0과 1을 표현할 수 있는 데이터의 최소 단위를 Bit(Binary Digit)라고 하고 8개의 Bit가 모여 1B.. 2022. 9. 6.
LV1 C++ 배열 Array 정리 [lv1/C++] 배열 Array 정리 배열배열(Array)은 연속된 공간에 같은 자료형의 데이터를 모아놓은 것이다.배열은 대부분의 프로그래밍 언어에서 사용할 수 있는 가장 기초적인 자료 구조이다. 배열의 선언 방법배열의 선언 방법은 배열의 이름 뒤에 대괄호("[ ]")를 이용하여 배열의 크기를 지정한다.배열의 크기는 연속된 공간에 들어갈 요소들의 개수를 의미하며 값이 정해져있는 상수나 식을 사용할 수 있다. (변수는 사용할 수 없다.)배열의 각각 요소에 접근하기 위해서는 인덱스(index, 첨자)를 사용하는데 이 때 배열의 인덱스는 0부터 시작되는 숫자이다. 예를 들어서 배열의 크기를 '5'로 지정했을 때 인덱스는 0, 1, 2, 3, 4 로 5개의 공간이 만들어지는 것이다. 배열의 선언 및 초기화배열.. 2022. 9. 6.
반응형