[C/C++] malloc()과 new의 차이
Β·
πŸ“ Language/✏ C & C++
malloc()κ³Ό new의 차이 1. ν•¨μˆ˜μ™€ μ—°μ‚°μž Cμ—μ„œλŠ” 동적 할당을 μœ„ν•΄ malloc()κ³Ό free() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€. C++μ—μ„œλŠ” 동적 할당을 μœ„ν•΄ new와 delete μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œλ‹€. λ‹¨μˆœν•˜κ²Œ malloc()은 ν•¨μˆ˜μ΄κ³  newλŠ” μ—°μ‚°μžμ΄λ‹€. 그리고 malloc()은 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ œκ³΅ν•˜λŠ” ν•¨μˆ˜μ΄μ§€λ§Œ newλŠ” λ³„λ„μ˜ 라이브러리 없이 μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. 2. μ΄ˆκΈ°ν™” malloc()은 동적 ν• λ‹Ήν•˜λŠ” κ²ƒλ§Œμ΄ λͺ©μ μ΄λ―€λ‘œ μ΄ˆκΈ°ν™”λ₯Ό ν•  수 μ—†λ‹€. newλŠ” ν• λ‹Ήκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”κ°€ κ°€λŠ₯ν•˜λ‹€ 3. μƒμ„±μž newλŠ” μƒμ„±μžλ₯Ό μžλ™μœΌλ‘œ ν˜ΈμΆœν•˜κ²Œ λœλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ deleteλ₯Ό ν˜ΈμΆœν•˜λ©΄ μ†Œλ©Έμžκ°€ μžλ™μœΌλ‘œ ν˜ΈμΆœλœλ‹€.
[C++] OOP μ†Œλ©Έμžμ˜ virtual ν‚€μ›Œλ“œ
Β·
πŸ“ Language/✏ C & C++
객체지ν–₯의 νŠΉμ„± 쀑 λ‹€ν˜•μ„±μ˜ κ°œλ…μ„ μ μš©ν•œ 것이닀. λ‹€ν˜•μ„±μ€ 각각의 객체λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜μ— 쓰기도 ν•˜μ§€λ§Œ μ†Œλ©Έμžμ—λ„ μ‚¬μš©λœλ‹€. 클래슀 λ‚΄ μ†Œλ©Έμžμ—λŠ” μ™œ virtual ν‚€μ›Œλ“œκ°€ λΆ™μ„κΉŒ? λ¨Όμ €, μƒμ†μ—λŠ” 3κ°€μ§€ 관계가 μ‘΄μž¬ν•œλ‹€. is-a: 데이터 ν˜•μ€ λΆ€λͺ¨ 클래슀둜 μ„ μ–Έν•˜κ³  생성은 μžμ‹ 클래슀둜 ν• λ‹Ήν•œλ‹€. λΆ€λͺ¨ 클래슀의 λ³€μˆ˜μ™€ ν•¨μˆ˜λ§Œ ν˜ΈμΆœν•  수 μžˆλ‹€. λ§Œμ•½, μžμ‹ ν΄λž˜μŠ€μ— Override ν•œ ν•¨μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€λ©΄ κ·Έ ν•¨μˆ˜λŠ” 호좜 κ°€λŠ₯ν•˜λ‹€. has-a: μ†Œμœ κ΄€κ³„λ‘œμ„œ λ‹€λ₯Έ 객체λ₯Ό ν¬ν•¨ν•˜μ—¬ κ·Έ 객체의 κΈ°λŠ₯(λ³€μˆ˜, ν•¨μˆ˜)을 μ‚¬μš©ν•œλ‹€. 생성 μ‹œ 상속받은 λΆ€λͺ¨ ν΄λž˜μŠ€λΆ€ν„° ν˜ΈμΆœν•˜κ³  μ†Œλ©Έ μ‹œ μžμ‹ ν΄λž˜μŠ€λΆ€ν„° ν˜ΈμΆœλœλ‹€. is implemented of #include using namespace std; class Has..
μΊμ‹œ λ©”λͺ¨λ¦¬(Cache Memory)
Β·
πŸ“ Computer Science/✏ OS
μΊμ‹œ λ©”λͺ¨λ¦¬ μ£ΌκΈ°μ–΅μž₯μΉ˜μ— μ €μž₯된 λ‚΄μš©μ˜ 일뢀λ₯Ό μž„μ‹œλ‘œ μ €μž₯ν•΄λ‘λŠ” κΈ°μ–΅μž₯치둜 속도가 λΉ λ₯Έ μž₯μΉ˜μ™€ 느린 μž₯치 κ°„μ˜ 속도차에 λ”°λ₯Έ 병λͺ© ν˜„μƒμ„ 쀄이기 μœ„ν•œ λ²”μš© λ©”λͺ¨λ¦¬μ΄λ‹€. 1. μ§€μ—­μ„±(Locality) ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ μ£ΌκΈ°μ–΅μž₯치λ₯Ό μ°Έμ‘°ν•  λ•Œ 일뢀 νŽ˜μ΄μ§€λ§Œ μ§‘μ€‘μ μœΌλ‘œ μ°Έμ‘°ν•˜λŠ” μ„±μ§ˆλ‘œ μΊμ‹œμ˜ 적쀑λ₯ (Hit rate)을 κ·ΉλŒ€ν™”μ‹œν‚€κΈ° μœ„ν•΄ μ§€μ—­μ„±μ˜ 원리λ₯Ό μ‚¬μš©ν•œλ‹€. μ‹œκ°„ μ§€μ—­μ„±: μ΅œκ·Όμ— 참쑰된 μ£Όμ†Œμ˜ λ‚΄μš©μ€ κ³§ λ‹€μŒμ— λ‹€μ‹œ μ°Έμ‘°λ˜λŠ” νŠΉμ„± 곡간 μ§€μ—­μ„±: λŒ€λΆ€λΆ„μ˜ μ‹€μ œ ν”„λ‘œκ·Έλž¨μ΄ 참쑰된 μΈμ ‘ν•œ μ£Όμ†Œμ˜ λ‚΄μš©μ΄ λ‹€μ‹œ μ°Έμ‘°λ˜λŠ” νŠΉμ„± 2. 캐싱 라인(Caching line) μΊμ‹œμ— 데이터λ₯Ό μ €μž₯ν•  λ•Œ, λ°μ΄ν„°μ˜ λ©”λͺ¨λ¦¬ μ£Όμ†Œ 등을 기둝해 λ‘” νƒœκ·Έλ₯Ό 달아 κΈ°λ‘ν•œλ‹€. μ΄λ•Œ μ΄λŸ¬ν•œ νƒœκ·Έλ“€μ˜ λ¬ΆμŒμ„ 캐싱 라인이라 ν•œλ‹€. 캐싱..
[C++] λΉ„νŠΈλ§ˆμŠ€ν¬(BitMask)
Β·
πŸ“ Computer Science/✏ Algorithm
λΉ„νŠΈλ§ˆμŠ€ν¬(BitMask)μ§‘ν•© μš”μ†Œλ“€μ˜ ꡬ성 μ—¬λΆ€λ₯Ό ν‘œν˜„ν•  λ•Œ μœ μš©ν•œ ν…Œν¬λ‹‰μ΄λ‹€. κΈ°λ³Έ 원리{1, 2, 3, 4, 5}λΌλŠ” 집합이 있고 이 μ§‘ν•©μ˜ 뢀뢄집합을 ꡬ해야 ν•œλ‹€.{1}, {2}, ..., {1, 2}, ..., {1, 2, 5}, ..., {1, 2, 3, 4, 5} λ¬Όλ‘  κ°„λ‹¨νžˆ λ°˜λ³΅λ¬Έμ„ 톡해 경우의 수λ₯Ό ꡬ할 수 μžˆλ‹€.ν•˜μ§€λ§Œ λΉ„νŠΈ λ§ˆμŠ€ν‚Ήμ„ ν•˜λ©΄ 각 μš”μ†Œλ₯Ό 인덱슀처럼 ν‘œν˜„ν•˜μ—¬ 효율적인 접근이 κ°€λŠ₯ν•˜λ‹€.{1, 2, 3, 4, 5} → 11111{2, 3, 4, 5} → 11110{1, 2, 5} → 10011{2} → 00010 1) μ‚½μž…i번 μ§Έ λΉ„νŠΈ 값을 1둜 λ³€κ²½ν•˜λ €κ³  ν•œλ‹€. μ΄λ•Œ OR 연산을 ν™œμš©ν•œλ‹€.i = 3일 λ•Œ, 10101 | (1 → 10101 | 01000 → 11101 2) μ‚­μ œi..
MVC νŒ¨ν„΄
Β·
πŸ“ Computer Science/✏ Design Pattern
MVC(Model-View-Controller) νŒ¨ν„΄ μ†Œν”„νŠΈμ›¨μ–΄μ—μ„œ 맀우 널리 μ‚¬μš©λ˜λŠ” λ””μžμΈ νŒ¨ν„΄μœΌλ‘œ 크게 λͺ¨λΈ, λ·°, 컨트둀러둜 κ΅¬μ‘°ν™”ν•œλ‹€. λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 ν”„λ ˆμ  ν…Œμ΄μ…˜ λ‘œμ§μ„ λ‚˜λˆ„μ–΄μ„œ μ²˜λ¦¬ν•œλ‹€. μ‰½κ²Œ 말해 연산을 ν•˜λŠ” 업무와 μ‚¬μš©μžκ°€ λ³΄λŠ” 화면을 λ§Œλ“œλŠ” 업무λ₯Ό λΆ„λ¦¬ν•΄μ„œ μ²˜λ¦¬ν•˜λŠ” 방식이라고 λ³Ό 수 μžˆλ‹€. μ½”λ“œμ˜ 양이 λ§Žμ•„μ Έλ„ μœ μ§€ λ³΄μˆ˜κ°€ νŽΈν•˜κ³  ν™•μž₯이 μš©μ΄ν•˜λ‹€. μ—¬λŸ¬ 개의 λ·°λ₯Ό λ§Œλ“€ 수 μžˆμœΌλ―€λ‘œ λŒ€ν™”ν˜• μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ ν•©ν•˜λ‹€. λŒ€ν™”ν˜• μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λž€ μ‚¬μš©μžμ˜ μš”κ΅¬κ°€ λ°œμƒν•˜λ©΄ μ‹œμŠ€ν…œμ΄ 이λ₯Ό μ²˜λ¦¬ν•˜κ³  λ°˜μ‘ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ§ν•œλ‹€. 1. ꡬ성 μš”μ†Œ 1) λͺ¨λΈ(Model) μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 뢀뢄이닀. DB에 μ—°κ²°ν•˜κ³  데이터λ₯Ό μΆ”μΆœν•˜κ±°λ‚˜ μ €μž₯, μ‚­μ œ, κ°±μ‹  λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€. λ‚΄λΆ€ λΉ„μ¦ˆλ‹ˆ..
[C++] 정적(Static) 멀버 λ³€μˆ˜μ™€ ν•¨μˆ˜
Β·
πŸ“ Language/✏ C & C++
정적 멀버 λ³€μˆ˜ static μžλ£Œν˜• λ³€μˆ˜ 이름; ν˜•μ‹μœΌλ‘œ 클래슀 λ°–μ—μ„œ μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•œλ‹€. 같은 클래슀 λ‚΄ λͺ¨λ“  객체가 ν•˜λ‚˜μ˜ 정적 멀버 λ³€μˆ˜λ₯Ό 곡용으둜 μ‚¬μš©ν•œλ‹€. 즉 클래슀 λ‚΄μ˜ μ „μ—­ λ³€μˆ˜μ²˜λŸΌ ν–‰λ™ν•œλ‹€. μ–΄λ–€ κ°μ²΄μ—μ„œ λ°”κΎΌ 정적 멀버 λ³€μˆ˜ 값은 μœ μ§€λ˜λ©° 같은 클래슀의 λ‹€λ₯Έ κ°μ²΄μ—κ²Œ 영ν–₯을 λ―ΈμΉœλ‹€. λ©”λͺ¨λ¦¬ 할당을 λ”± ν•œλ²ˆλ§Œ ν•˜κ²Œ λ˜μ–΄ λ©”λͺ¨λ¦¬ μ‚¬μš© νš¨μœ¨μ„ 높일 수 μžˆλ‹€. 정적 멀버 ν•¨μˆ˜ 클래슀의 객체 없이 호좜이 κ°€λŠ₯ν•˜λ©° κ°μ²΄μ—μ„œλŠ” ν˜ΈμΆœν•  수 μ—†λŠ” ν•¨μˆ˜λ₯Ό λ§ν•œλ‹€. private으둜 μ„ μ–Έν•œ 정적 멀버 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. #include using namespace std; class A { private: //정적 멀버 λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”λŠ” 클래슀 μ™ΈλΆ€μ—μ„œ ν•œλ‹€. static int count; public:..