전체 글
7. 1 동적 메모리 다루기7.1.1 메모리의 작동 과정 살펴보기int i{7};i를 자동 변수라 부르며 스택에 저장된다프로그램의 실행 흐름이 이 변수가 선언된 스코프를 벗어나면 할당된 메모리가 자동으로 해제됨int* ptr {nullptr};ptr = new int;int* ptr = {new int};new 키워드를 사용하면 free store에 메모리가 할당된다.다음 코드는 ptr 변수를 스택에 생성하고 nullptr로 초기화한 뒤 프리스토어에 할당된 메모리를 ptr이 가리키도록 설정한다.ptr 변수는 여전히 스택에 있지만 프리스토어의 메모리를 기리킴.int** handle {nullptr};handle = new int*;*handle = new int;포인터가 스택과 프리스토어에 모두 있는 예7..
6.1 재사용 철학작성은 한 번, 사용은 여러 번무슨 수를 쓰더라도 코드 중복은 피한다같은 일을 반복하지 않는다.6.2 코드를 재사용할 수 있도록 설계하는 방법첫째, 용도나 분야가 약간 달라도 출ㅇ분히 사용할 수 있는 범용성둘째, 쉽게만들어야 한다.6.2.1 추상화 방법인터페이스와 구현을 분리게터와 세터를 통해서 접근handle : 한 인터페이스에서 리턴한 정보를 다른 곳에 전달하기 위해 클라이언트 코드에서 보관불투명 클래스 : 내부 데이터 멤버를 직접 접근하지 못하게 하거나 게터나 세터로 간접적으로 접근하게 만든 클래스c++은 public 인터페이스와 비 public 데이터 멤버나 메서들르 모두 한 클래스 정의에서 작성할 수 밖에 없어서 클래스 내부 구현 사항이 노출될 수 밖에는 없다.6.2.2 재사용..
5.1 절차형 사고방식C언어에서는 프로시저를 함수라 부르지만 C는 함수형 언어가 아니다. 함수와 절차형 언어의 함수는 차이가 있으며 추상화 방식도 완전히 다르다5.2 객체지향 철학절차형 접근 방식은 '프로그램이 하는 일'을 중심으로 접근하는데 반해 객체지향 접근 방식은 '모델링하려는 현실 세계의 대상'이라는 관점에서 접근한다.5.2.1 클래스객체 : 어떤 클래스에 속하는 구체적인 예(인스턴스)라고 볼 수 있다.5.2.2 컴포넌트컴포넌트는 본질적으로 클래스와 같다. 하지만 클래스보다 작고 구체적랜딩기어는 비행기의 컴포넌트이면서 동시에 바퀴라는 하위 컴포넌트를 가진다5.2.3 속성객체는 속성(property)로 구분한다.5.2.4 동작동작 (behavior)는 객체가 직접하거나 그 객체로 할 수 있는 일을 ..
4.1 프로그램 설계의 정의이해 당사자기능 요구사항비기능 요구사항프로그램 설계4.2 프로그램 설계의 중요성4.3 C++에 적합한 설계 방법c++의 특성을 명심4.4 C++ 설계에 관련된 두 가지 원칙4.4.1 추상화4.4.2 재사용재사용 가능한 코드 만들기c++에서는 코드를 범용으로 만들 수 있도록 템플릿이라는 기능을 제공설계 재사용4.5 코드 재사용코드 재사용이란 단순히 기존 코드를 복사해서 붙이는 것이 아니다. 일일이 복제하지 않고도 코드를 재사용할 수 있어야 한다.4.5.1 용어 정리예전에 자신이 작성한 코드동료가 작성한 코드현재 소속 회사나 조직 외의 서드파티에서 작성한 코드4.5.3 코드 재사용 전략1 기능과 제약사항 파악하기멀티스레드 프로그램에서도 안전한지 파악라이브러리를 사용하는 코드에 대해..
3.2 코드 문서화3.2.1 주석을 작성하는 이유1 사용법을 알려주는 주석때로는 함수 호출하기 전과 후에 특정 조건을 만족해야 하는데, 이러한 사항은 주석 외에는 표현할 방법이 없다// 매개변수 // record: 주어진 레코드에 데이터베이스 ID가 없다면 // 데이터베이스로부터 할당된 ID를 저장하도록 레코드 객체를 수정한다// 익셉션 발생 // openDatabase() 를 먼저 호출하지 않은 상태에서 // 이 메서드를 호출하면 익셉션 발생int saveRecord(Record& record);2 복잡한 코드를 설명하는 주석코드 중간에 이해하기 힘든 부분마다 문장 속에 인라인 주석을 달았다.3 메타 정보를 제공하는 주석메타정보는 코드의 구체적인 동작에 대한 표현이 아니라 코드 생..
2.1 동적 스트링c를 사용 -> null로 끝나는 문자 배열로 스트링을 표현c++ -> buffer overflow 문제 발생 가능. std::string 클래스 제공2.1.1 c스타일 스트링char* copyString(const char* str) { char* result { new char{strlen(str) + 1}}; strcpy(result, str); return result;}char* copyString(const char* str1, const char* str2) { char* result { new char{strlen(str1) + strlen(str2)+ 1}}; strcpy(result, str1); strcat(result, str2); ..
1.1 C++ 기초1.1.1 프로그래밍 언어의 공식 예제 'Hello, World!'1. 주석2. 모듈 임포트import 3. 전처리 지시자#include 빌드 작업 세단계전처리 : 소스코드에 담긴 메타 정보 처리컴파일 : 소스코드를 머신이 읽을 수 있는 객체 파일로 변환링크 : 앞에서 변환한 여러 객체 파일을 애플리케이션으로 엮음헤더 파일의 용도소스파일에서 정의할 함수를 선언함수의 호출 방식, 매개변수의 개수와 타입, 리턴 타입 등을 컴파일러에 알려줌자주 사용하는 전처리 지시자#include [파일]기능 : 저장할 파일의 내용을 지시자 위에 넣는다사용 예 : 다른 곳에 정의된 함수를 사용할 목적으로 해당 함수의 선언문이 담긴 헤더파일을 가져온다#define [키] [값]용도 : 코드에서 '키'에 해당하..
사용하면서 느낀 장단점 Django의 장점 기본 어드민 페이지 제공 데이터베이스 관리 용이 기본 CRUD를 빠르게 개발할 수 있는 viewset 제공 기본 viewset 상속받고 사용법만 익히면 너무나도 쉽게 CRUD 구현 가능 다양한 파이썬 라이브러리 사용 가능(Pandas, selenium 등) 기본 ORM 제공 Django 템플릿을 활용하면 손쉽게 풀스택 개발 가능 초반 학습할 때 FE 지식도 자연스럽게 학습 가능! 러닝커브가 적은 언어 python으로 이루어짐 개발 서버의 자동 감지 및 재시작 코드의 변경을 감지하여 개발서버 자동으로 재부팅해줌 빠른 build 가능 Serverless 아키텍처로 구현 시 매우 유리(Spring으로는 꿈도 못 꿀 아키텍쳐...) django 한번 익히면 fast a..
문제 상황 태그 테이블을 리팩토링하면서 태그 리스트를 String으로 받도록 변경하였다. @NotNull(message = "아이템 태그는 빈칸일 수 없습니다") private String itemTagList; 문제는 이렇게 변경할 경우 태그 기반 검색을 수행할 때 기존의 like로 조회 시 극심한 성능 저하가 에상된다는 점이다. 이 때의 상황에 대비하여 멘토님께서 조언해주신대로 MySQL의 full text search를 적용해보았다. 해결방법 Full Text Search란? Full text search는 MySQL을 사용한다면 하나의 서비스나 시스템에 대해 데이터 저장, 관리, 저장된 데이터 내에서의 간단한 검색 기능을 제공할 때 사용 elastic search 같은 검색 엔진을 사용하지 않더라..



