πŸ“ Computer Science

    μ•Œκ³ λ¦¬μ¦˜ μ„±λŠ₯ 뢄석

    μ•Œκ³ λ¦¬μ¦˜ μ„±λŠ₯ 뢄석

    μ•Œκ³ λ¦¬μ¦˜μ„ ν‰κ°€ν•˜λŠ” 데 μžˆμ–΄ μˆ˜ν–‰ μ‹œκ°„κ³Ό λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ ν‰κ°€κΈ°μ€€μœΌλ‘œ λ‘λŠ”λ°, μˆ˜ν–‰ μ‹œκ°„μ— ν•΄λ‹Ήλ˜λŠ” 것이 μ‹œκ°„ λ³΅μž‘λ„, λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ— ν•΄λ‹Ήλ˜λŠ” 것이 곡간 λ³΅μž‘λ„μ΄λ‹€. 보톡 μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯ 뢄석은 λ³΅μž‘λ„λ₯Ό κ³„μ‚°ν•˜μ—¬ 점근적 ν‘œκΈ°λ²•μœΌλ‘œ λ‚˜νƒ€λ‚Έλ‹€. 점근적 뢄석 μž…λ ₯ κ°’μ˜ κ°œμˆ˜μ— 따라 μ•Œκ³ λ¦¬μ¦˜μ˜ μˆ˜ν–‰ μ‹œκ°„μ„ λ°”νƒ•μœΌλ‘œ μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„±μ„ ν‰κ°€ν•œλ‹€. 1) λΉ…μ˜€ ν‘œκΈ°λ²• O 점근적 μƒν•œμ„ μœΌλ‘œ 점근적 μ¦κ°€μœ¨μ΄ f(N)을 λ„˜μ§€ μ•ŠλŠ” λͺ¨λ“  ν•¨μˆ˜λ“€μ˜ 집합이닀. 즉, 졜고 μ°¨ν•­μ˜ μ°¨μˆ˜κ°€ f(N)κ³Ό κ°™κ±°λ‚˜ 더 μž‘μ€ ν•¨μˆ˜λ“€μ˜ 집합이닀. f(N)

    μΊμ‹œ λ©”λͺ¨λ¦¬(Cache Memory)

    μΊμ‹œ λ©”λͺ¨λ¦¬ μ£ΌκΈ°μ–΅μž₯μΉ˜μ— μ €μž₯된 λ‚΄μš©μ˜ 일뢀λ₯Ό μž„μ‹œλ‘œ μ €μž₯ν•΄λ‘λŠ” κΈ°μ–΅μž₯치둜 속도가 λΉ λ₯Έ μž₯μΉ˜μ™€ 느린 μž₯치 κ°„μ˜ 속도차에 λ”°λ₯Έ 병λͺ© ν˜„μƒμ„ 쀄이기 μœ„ν•œ λ²”μš© λ©”λͺ¨λ¦¬μ΄λ‹€. 1. 지역성(Locality) ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ μ£ΌκΈ°μ–΅μž₯치λ₯Ό μ°Έμ‘°ν•  λ•Œ 일뢀 νŽ˜μ΄μ§€λ§Œ μ§‘μ€‘μ μœΌλ‘œ μ°Έμ‘°ν•˜λŠ” μ„±μ§ˆλ‘œ μΊμ‹œμ˜ 적쀑λ₯ (Hit rate)을 κ·ΉλŒ€ν™”μ‹œν‚€κΈ° μœ„ν•΄ μ§€μ—­μ„±μ˜ 원리λ₯Ό μ‚¬μš©ν•œλ‹€. μ‹œκ°„ 지역성: μ΅œκ·Όμ— 참쑰된 μ£Όμ†Œμ˜ λ‚΄μš©μ€ 곧 λ‹€μŒμ— λ‹€μ‹œ μ°Έμ‘°λ˜λŠ” νŠΉμ„± 곡간 지역성: λŒ€λΆ€λΆ„μ˜ μ‹€μ œ ν”„λ‘œκ·Έλž¨μ΄ 참쑰된 μΈμ ‘ν•œ μ£Όμ†Œμ˜ λ‚΄μš©μ΄ λ‹€μ‹œ μ°Έμ‘°λ˜λŠ” νŠΉμ„± 2. 캐싱 라인(Caching line) μΊμ‹œμ— 데이터λ₯Ό μ €μž₯ν•  λ•Œ, λ°μ΄ν„°μ˜ λ©”λͺ¨λ¦¬ μ£Όμ†Œ 등을 기둝해 λ‘” νƒœκ·Έλ₯Ό 달아 κΈ°λ‘ν•œλ‹€. μ΄λ•Œ μ΄λŸ¬ν•œ νƒœκ·Έλ“€μ˜ λ¬ΆμŒμ„ 캐싱 라인이라 ν•œλ‹€. 캐싱..

    [C++] λΉ„νŠΈλ§ˆμŠ€ν¬(BitMask)

    λΉ„νŠΈλ§ˆμŠ€ν¬(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 machine[i][j]; cin >..

    MVC νŒ¨ν„΄

    MVC νŒ¨ν„΄

    MVC(Model-View-Controller) νŒ¨ν„΄ μ†Œν”„νŠΈμ›¨μ–΄μ—μ„œ 맀우 널리 μ‚¬μš©λ˜λŠ” λ””μžμΈ νŒ¨ν„΄μœΌλ‘œ 크게 λͺ¨λΈ, λ·°, 컨트둀러둜 κ΅¬μ‘°ν™”ν•œλ‹€. λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 ν”„λ ˆμ  ν…Œμ΄μ…˜ λ‘œμ§μ„ λ‚˜λˆ„μ–΄μ„œ μ²˜λ¦¬ν•œλ‹€. μ‰½κ²Œ 말해 연산을 ν•˜λŠ” 업무와 μ‚¬μš©μžκ°€ λ³΄λŠ” 화면을 λ§Œλ“œλŠ” 업무λ₯Ό λΆ„λ¦¬ν•΄μ„œ μ²˜λ¦¬ν•˜λŠ” 방식이라고 λ³Ό 수 μžˆλ‹€. μ½”λ“œμ˜ 양이 λ§Žμ•„μ Έλ„ μœ μ§€ λ³΄μˆ˜κ°€ νŽΈν•˜κ³  ν™•μž₯이 μš©μ΄ν•˜λ‹€. μ—¬λŸ¬ 개의 λ·°λ₯Ό λ§Œλ“€ 수 μžˆμœΌλ―€λ‘œ λŒ€ν™”ν˜• μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ ν•©ν•˜λ‹€. λŒ€ν™”ν˜• μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λž€ μ‚¬μš©μžμ˜ μš”κ΅¬κ°€ λ°œμƒν•˜λ©΄ μ‹œμŠ€ν…œμ΄ 이λ₯Ό μ²˜λ¦¬ν•˜κ³  λ°˜μ‘ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ§ν•œλ‹€. 1. ꡬ성 μš”μ†Œ 1) λͺ¨λΈ(Model) μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 뢀뢄이닀. DB에 μ—°κ²°ν•˜κ³  데이터λ₯Ό μΆ”μΆœν•˜κ±°λ‚˜ μ €μž₯, μ‚­μ œ, κ°±μ‹  λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€. λ‚΄λΆ€ λΉ„μ¦ˆλ‹ˆ..

    싱글톀 νŒ¨ν„΄(Singleton Pattern)

    싱글톀 νŒ¨ν„΄(Singleton Pattern)

    싱글톀 νŒ¨ν„΄(Singleton Pattern) μ „μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  μΈμŠ€ν„΄μŠ€λ₯Ό ν•˜λ‚˜λ§Œ μƒμ„±ν•˜λ„λ‘ ν•˜λ©° μƒμ„±λœ μΈμŠ€ν„΄μŠ€λ₯Ό μ–΄λ””μ„œλ“  μ‚¬μš©ν•  수 μžˆλŠ” νŒ¨ν„΄μ΄λ‹€. μΈμŠ€ν„΄μŠ€λ₯Ό μ—¬λŸ¬ 개 λ§Œλ“€λ©΄ μžμ›μ„ λ‚­λΉ„ν•˜κ±°λ‚˜ 버그λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆμœΌλ―€λ‘œ 였직 ν•˜λ‚˜λ§Œ μƒμ„±ν•œλ‹€. κ΅¬ν˜„ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ μœ μ§€ν•˜κΈ° μœ„ν•΄ μƒμ„±μžμ— private μ ‘κ·Ό μ œμ–΄μžλ₯Ό μ§€μ •ν•˜κ³  μœ μΌν•œ 단일 객체λ₯Ό λ°˜ν™˜ν•  수 μžˆλ„λ‘ 정적 λ©”μ†Œλ“œλ₯Ό 지원해야 ν•œλ‹€. #include using namespace std; // λ‹€μ΄λ‚˜λ―Ή 싱글톀(Dynamic Singleton) // 게으λ₯Έ μ΄ˆκΈ°ν™”: 싱글톀을 μ‹€μ œλ‘œ ν•„μš”λ‘œ ν• λ•ŒκΉŒμ§€ μ΄ˆκΈ°ν™”λ₯Ό 미룬닀. class DynamicSingleton { private: DynamicSingleton() {} static Dynam..

    λ””μžμΈ νŒ¨ν„΄(Design Pattern)

    λ””μžμΈ νŒ¨ν„΄(Design Pattern)

    λ””μžμΈ νŒ¨ν„΄(Design Pattern) μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό 섀계할 λ•Œ νŠΉμ • λ§₯λ½μ—μ„œ 자주 λ°œμƒν•˜λŠ” 고질적인 λ¬Έμ œλ“€μ΄ 또 λ°œμƒν–ˆμ„ λ•Œ μž¬μ‚¬μš©ν•  ν•  수 μžˆλŠ” ν›Œλ₯­ν•œ 해결책이닀. 각기 λ‹€λ₯Έ μ†Œν”„νŠΈμ›¨μ–΄ λͺ¨λ“ˆμ΄λ‚˜ κΈ°λŠ₯을 가진 λ‹€μ–‘ν•œ μ‘μš© μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œλ“€μ„ κ°œλ°œν•  λ•Œλ„ μ„œλ‘œ 간에 κ³΅ν†΅λ˜λŠ” 섀계 λ¬Έμ œκ°€ μ‘΄μž¬ν•˜λ©° 이λ₯Ό μ²˜λ¦¬ν•˜λŠ” ν•΄κ²°μ±… 사이에도 곡톡점이 μžˆλ‹€. μ΄λŸ¬ν•œ μœ μ‚¬μ μ„ νŒ¨ν„΄μ΄λΌ ν•œλ‹€. νŒ¨ν„΄μ€ κ³΅ν†΅μ˜ μ–Έμ–΄λ₯Ό λ§Œλ“€μ–΄μ£Όλ©° νŒ€μ› μ‚¬μ΄μ˜ μ˜μ‚¬μ†Œν†΅μ„ μ›ν™œν•˜κ²Œ ν•΄μ£ΌλŠ” μ•„μ£Ό μ€‘μš”ν•œ 역할을 ν•œλ‹€. GoF λ””μžμΈ νŒ¨ν„΄ 23κ°€μ§€μ˜ λ””μžμΈ νŒ¨ν„΄μ„ μ •λ¦¬ν•˜κ³  각각의 λ””μžμΈ νŒ¨ν„΄μ„ 생성, ꡬ쑰, ν–‰μœ„ 3κ°€μ§€λ‘œ κ΅¬λΆ„ν–ˆλ‹€. 생성 νŒ¨ν„΄: 객체 생성에 κ΄€λ ¨λœ νŒ¨ν„΄μœΌλ‘œ 객체의 생성과 쑰합을 μΊ‘μŠν™”ν•΄ νŠΉμ • 객체가 μƒμ„±λ˜κ±°λ‚˜ λ³€κ²½λ˜μ–΄λ„ ν”„λ‘œκ·Έλž¨ ꡬ쑰에 ..