캡슐화 Encapsulation OOP의 4대 특성 * 캡슐화는 OOP(Object Oriented Programming)의 4대 특성 중 하나로 주류 OO언어에 꼭 들어가는 개념이다. * 캡슐화는 데이터와 함수를 클래스라는 개념으로 묶은 것이다. 또한 접근제어자를 통해 다른 사람들이 클래스를 사용할 때 선택적으로 제한함으로써 클래스를 보호하는 것이다. * 캡슐화란 사용자에게 선택적으로 제공하는 것이다. 클래스, 구조체의 발전된 버전 * 구조체란 데이터들의 묶음이었다. * 구조체를 사용하면, 자료형이 다른 데이터들을 하나의 개념에 묶을 수 있었다. * 구조체를 사용하면, 연관된 데이터들을 하나의 개념에 묶을 수 있었다. * 이러한 장점들로 구조체의 사용은 사용자의 가독성과 이해를 돕는 역할을 하기도 한다..
연결 리스트 Linked List 개념 * node라는 구조의 집합니다. * node = 값 + (다음 노드를 향하는 포인터)로 구성되어 있다. [값 + 포인터] 구조가 갖는 장점 * 포인터가 다음 값의 위치를 알고 있으니 배열처럼 메모리가 빈틈없이 연속적일 필요가 없음. = 자료들이 산재해 있다. * 자료들이 여기저기 떨어져 있다면? = 동적 할당 (아닐 수도 있지만 보통 동적) * 연결 리스트에 최대 길이 따윈 없다! = 포인터로 다음 값을 알아낸다 -> 메모리에 값이 분포될 수 있다 -> 최대 크기 설정이 없다 node의 구조 typedef struct node{ int num; struct node* next; }node_t; * 가볍게 보면 어지러울 수 있다. 천천히 구조를 생각하자 * node..
Bit Flags 극한의 성능충 * 사용자가 만들 수 있는 가장 작은 단위는 1바이트이다. * 극한의 성능을 위해 1바이트를 쪼개 쓰는 게 Bit Flags이다! ex) 1바이트에 bool형을 8개 넣을 수 있다구! 구조체로 선언 * 1비트씩 사용하겠다는 의미 typedef struct bit_flags{ unsigned char b0 : 1; unsigned char b1 : 1; unsigned char b2 : 1; unsigned char b3 : 1; } bit_flags_t; 구조체 사용법 * 만약 bit를 9개 사용한다면? (9비트) Byte Padding에 의해 2바이트를 차지하게 된다. (16비트) int main() { typedef struct bit_flags{ unsigned ch..
struct (구조체) 구조체를 매개변수로 넘길 때 void fuc(구조체); * 구조체를 매개변수로 넘기거나 대입하는 것만으로 복사가 일어난다. 알아서 전부 복사해주니 편하다. * 구조체의 크기가 클 경우, 매번 일어나는 복사는 무거울 수 있다. void fuc(*구조체); * 단 4바이트! * 복사가 훨씬 안전해. 참조의 경우 원본 손실이 발생할 수 있다. * (*구조체).변수 = 값; * 구조체->변수 = 값; (둘 중 하나를 써야 함) 구조체에 배열을 넣을 때 1. 배열 포인터만 넣을 때 typedef struct { char* name1; char* name2; char* name3; char* name4; } name4_t; ↑ 크기가 단 16바이트! 얕은 복사와 유동적인 주소값이라는 제한적 ..
구조체 struct 구조체란? * 여러 자료형을 가진 변수들을 하나의 패키지로 묶은 것 * 구조체 또한 값형이며 참조하고 싶으면 포인터를 사용하자 * 구조체라는 개념을 컴퓨터는 모른다. 사용자의 편의를 위한 개념일 뿐 내부적으로는 독립된 변수들을 사용하는 것과 같다. 장점 (사용하는 이유) * 여러 변수들을 하나에 개념으로 묶을 수 있다. (직관성 상승) struct personal_Information { //인적 사항이라는 개념 아래에 묶인 변수들 char name[20]; int age; float height; float weight; }; * 함수에 매개변수가 여러개일 때 실수를 줄이기 위해 (같은형이나 묵시적 변환이 가능한 자료형이 매개변수로 여러 개 들어가는 함수) int addPerson(..