C++ 10

객체 지향이란?

우선 객체란 프로그램 동작의 주체가 되는 요소를 의미합니다. 모든 객체에는 상태와 동작이 존재하는데 보통 상태를 멤버 변수, 동작을 함수와 연결지어 이야기합니다. 객체 지향은 말 그대로 객체를 지향하는 즉, 객체를 통해 코드를 구성하는 방법론이라고 정의할 수 있습니다. 객체 지향은 왜 사용할까? 일단 절차지향 방식과 비교했을 때 객체지향은 생산성과 유지보수 용이성이 좋아서 개발자가 개발을 비교적 쉽고 빠르게 수행할 수 있기 때문이라고 생각합니다. 어떠한 면에서? 모듈화된 객체를 기반으로 코드가 작성되기 때문에 코드 재사용이 편리하고, 만약 객체를 수정할 경우 해당 객체를 사용하는 곳에 모두 일괄적으로 적용되니 유지보수가 간편합니다. 그리고 업무 분담이 쉬워 큰 큐모의 프로그래밍에 유리합니다. 단점은? 절..

C++ 2023.05.13
클래스, 객체, 인스턴스란 무엇일까?

1. 클래스 클래스는 객체의 설계도이다. 2. 인스턴스 프로그램이 실행되면 내가 설계한 클래스에 대한 정보가 메모리에 로드된다. new라는 키워드를 사용하면 독립된 데이터 공간(변수)를 실제 메모리상에 가지는 실체화가 되는데 이것을 인스턴스라고 한다. 한마디로 인스턴스는 클래스(설계도)를 실제로 구현한 것이다. 3. 객체 인스턴스와 같은 맥락에서 종종 사용된다. 동일한 인스턴스 여러개가 맵에 생성되어 있다고 가정할 때 이것들을 보통 객체라고 부른다. 한마디로 정리하면 "객체는 소프트웨어 세계에 구현할 대상이고, 이를 구현하기 위한 설계도가 클래스이며, 이 설계도에 따라 소프트웨어 세계에 구현된 실체가 인스턴스이다. 인스턴스는 객체에 포함되는 개념이라고 볼 수 있다.

C++ 2023.05.13
[C++] const 위치에 따른 차이점

const는 상수라는 뜻으로 뒤에나오는 값의 수정, 변경이 불가함을 나타낸다. const는 변수와 함수에서 주로 사용되는데 그 위치에 따라 의미가 헷갈리는 경우가 많다. 참고로 const화 되어있는 변수를 레퍼런스변수나 포인터변수로 접근하려면 참조자도 const화 해주어야 한다. 1. 변수 const int num1 = 0; //num1의 int 형식의 값을 변경할 수 없습니다. int const num2 = 0; //num2의 값을 변경할 수 없습니다. num1 = 1; //ERROR!!! num2 = 1; //ERROR!!! 변수는 const가 어디에 붙든 의미가 크게 달라지지 않고 변수의 값을 변경할 수 없다는 결과도 똑같다. 하지만 포인터나 레퍼런스에서는 그 결과가 달라진다. 2. 포인터 int ..

C++ 2023.03.26
[C++11] 람다식

C++ 11 규약부터 정식으로 추가된 람다식은 함수를 헤더에 선언할 필요가 없으므로 간단한 로직을 간편하게 처리할 수 있다는 장점이 있다. 람다식은 다음 네가지 영역으로 구분된다. 1. 람다 소개자 [ ]로 표시되며 람다 구문이 참조할 환경(캡처)을 지정한다. 식 안에서 사용할 멤버 변수와 함수의 인스턴스. 2. 파라미터 리스트 람다 함수가 사용할 파라미터 지정. 함수 인자가 없다면 빈 괄호 사용. 3. 후행 반환 타입(Trailing Return Type) ‘->’ 기호를 사용한 후 람다 함수가 반환할 타입을 지정한다. 반환값이 없다면 void 사용. 4. 람다 함수 구문 { }로 캡처 환경을 사용한 람다 함수의 로직을 넣어준다. 캡처로 지정된 클래스의 멤버 변수와 함수에 자유롭게 접근할 수있다.

C++ 2022.10.19
[기본지식] sort() 내림차순 정렬

algorithm 헤더에 포함되어 있는 sort함수는 여러모로 편리하고 많이 쓰이지만 기본 차순이 오름차순으로 되어있다. 정렬후 reverse해줘도 되지만 내림차순으로 정렬하는 방법도 있다. functional헤더 추가 후 아래와 같이 greater()임시객체를 콜하는 방법이다. #include #include #include #include using namespace std; int main() { vector v = {3,2,4,5,1}; sort(v.begin(), v.end(), greater());

C++/STL 2022.09.14
Map container 정리

Map이란? C++의 STL에서 연관 컨테이너 중 하나인 map은 레드 블랙 트리로 구성되어 있다. 레드 블랙 트리는 자가 균형 이진 탐색 트리로 삽입과 삭제가 일어나는 경우에 자동으로 그 높이를 작게 유지하는 것이 특징이다. 이 이유는 연산 과정에서 트리의 높이가 한쪽으로 치우치는 것을 막아 시간복잡도 상의 이득을 보기 위함이다. n개의 원소가 있을 때 map은 O(log n)의 시간 복잡도로 삽입, 삭제, 검색을 할 수 있다. key값은 중복이 불가능하며 만약 동일한 key가 있는데 insert를 시도할 시 무시된다. 또한 key값은 오름차순 자동정렬되는데 정렬을 하고싶지 않다면 unordered_map(해시)를 선언해 성능을 높일 수 있다. 선언하는 법 헤더파일에 map을 include 시켜주고, ..

C++/STL 2022.08.05
STL이란 무엇인가?

STL? STL은 Standard Template Library의 약자로, C++에서 제공하는 '표준(Standard)' 라이브러리이다. STL은 다양한 자료구조를 클래스화시킨 컨테이너(Container) 와 이를 다루기 위한 알고리즘, 반복자, 조건자, 함수객체 등을 제공한다. Container 의 종류 1. 순차 컨테이너(시퀀스 컨테이너) : Vector, List, Deque... 2. 연관 컨테이너 : Set, Map, Multiset, Multimap... 3. 어댑터 컨테이너 : Stack, Queue... Container 요약 1. Vector : 적은 양의 자료에 유리하고, 순차 접근, 랜덤 엑세스, 크기 변경이 가능하다. 하지만 Vector의 중간에 값을 삽입, 삭제, 검색하는 것이 느..

C++/STL 2022.08.04