πŸ“ Language/✏ Language

    ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 정리

    ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 정리

    ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 정리 1. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 2020.05.03 - [πŸ“ Language/✏ Language] - 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming) 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming) 1. 절차적 ν”„λ‘œκ·Έλž˜λ°(Procedural Programming) 절차적 ν”„λ‘œκ·Έλž˜λ°μ΄λž€ 물이 μœ„μ—μ„œ μ•„λž˜λ‘œ 흐λ₯΄λŠ” κ²ƒμ²˜λŸΌ 순차적인 μ²˜λ¦¬κ°€ μ€‘μš”μ‹œλ˜λ©° ν”„λ‘œκ·Έλž¨ 전체가 유기적으둜 μ—°κ²°λ˜λ„λ‘ λ§Œλ“œλŠ” ν”„λ‘œκ·Έλž˜λ° κΈ° tech-interview.tistory.com 2. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 2022.07.10 - [πŸ“ Language/✏ Language] - ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(Functional Programming) ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(Functional ..

    컴파일 κ³Όμ •

    컴파일 κ³Όμ •

    컴파일 κ³Όμ • 1. C++ μ „μ²˜λ¦¬κΈ°: μ†ŒμŠ€ νŒŒμΌμ„ μ²˜λ¦¬ν•˜λŠ” 컴파일러의 ν•œ λΆ€λΆ„μœΌλ‘œ μˆ˜μ •λœ μ†ŒμŠ€ νŒŒμΌμ„ μƒμ‚°ν•˜κ³  μˆ˜μ •λœ μ†ŒμŠ€ νŒŒμΌμ€ λ‹€μŒ λ‹¨κ³„μ˜ μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ 본격적으둜 μ»΄νŒŒμΌλœλ‹€. #define, #include μ§€μ‹œμž 해석 #ifdef, #endif 쑰건뢀 컴파일 컴파일러: ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ 쓰인 ν”„λ‘œκ·Έλž¨μ„ μ–΄μ…ˆλΈ”λ¦¬μ–΄λ‘œ λ²ˆμ—­ν•œλ‹€. μ–΄μ…ˆλΈ”λŸ¬: μ–΄μ…ˆλΈ”λ¦¬ νŒŒμΌμ„ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•œ 였브젝트 파일둜 λ§Œλ“ λ‹€. 링컀: 였브젝트 νŒŒμΌλ“€μ„ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ μ—°κ²°ν•˜μ—¬ μ‹€ν–‰ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“ λ‹€. 2. JAVA μžλ°” μ†ŒμŠ€ 파일(.java)을 μž‘μ„±ν•œ ν›„ μžλ°” μ»΄νŒŒμΌλŸ¬κ°€ javac λͺ…λ Ήμ–΄λ‘œ μ»΄νŒŒμΌν•œλ‹€. μžλ°” μ†ŒμŠ€ νŒŒμΌμ€ scr(source) 폴더에 μ €μž₯λ˜μ–΄ μžˆλ‹€. μ»΄νŒŒμΌμ— μ„±κ³΅ν•˜λ©΄ λ°”μ΄νŠΈ μ½”λ“œ 파일(.class)이 μƒμ„±λœλ‹€. λ°”μ΄νŠΈ μ½”..

    λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)의 κ°œλ…κ³Ό ν•΄κ²° 방법

    λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak) λ©”λͺ¨λ¦¬ λˆ„μˆ˜λž€ 동적 ν• λ‹Ήν•œ λ’€ ν•΄μ œλ₯Ό ν•˜μ§€ μ•Šμ•„ ν”„λ‘œκ·Έλž¨μ΄ λ©”λͺ¨λ¦¬ 곡간을 계속 μœ μ§€ν•˜μ—¬ λ©”λͺ¨λ¦¬κ°€ λΆ€μ‘±ν•΄ λ°œμƒν•˜λŠ” ν˜„μƒμ΄λ‹€. λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ κ³„μ†λ˜λ©΄ κ²°κ΅­ OOM(Out Of Memory) ν˜„μƒμ΄ λ°œμƒν•΄μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 더 이상 λ™μž‘ν•˜μ§€ λͺ»ν•˜κ³  ν”„λ‘œκ·Έλž¨(μžλ°”μ—μ„  JVM)이 μ’…λ£Œλ˜λŠ” μ΅œμ•…μ˜ 상황이 λ°œμƒν•  수 μžˆλ‹€. 1. C++ ν•΄κ²° 방법 - 슀마트 포인터(Smart Pointer) C++은 GC와 같은 λ©”λͺ¨λ¦¬ 관리 방식이 μ—†μœΌλ―€λ‘œ λ©”λͺ¨λ¦¬λ₯Ό 직접 ν•΄μ œν•˜λ©° 관리해야 ν•œλ‹€. 슀마트 포인터λ₯Ό μ‚¬μš©ν•˜λ©΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°©μ§€ν•˜κ³  μžλ™μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό 관리할 수 μžˆλ‹€. RAII(Resource Acquisition Is Initialization) νŒ¨ν„΄: 직접 λ¦¬μ†ŒμŠ€ 관리λ₯Ό ν•΄μ€˜μ•Ό ν•˜λŠ” μ–Έμ–΄..

    인터프리터(Interpreter)와 컴파일러(Compiler)

    인터프리터(Interpreter)와 컴파일러(Compiler)

    인터프리터(Interpreter)와 컴파일러(Compiler) μž‘μ„±ν•œ μ½”λ“œλ₯Ό 컴퓨터가 μ•Œμ•„λ“£κΈ° μœ„ν•΄μ„œλŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό κΈ°κ³„μ–΄λ‘œ λ²ˆμ—­ν•˜λŠ” 과정이 ν•„μš”ν•˜λ‹€. κ·Έ 과정을 언어에 따라 컴파일(compile) ν˜Ήμ€ 인터프릿(interpret)이라고 ν•˜κ³ , μ»΄νŒŒμΌμ„ ν•˜λŠ” μ–Έμ–΄λ₯Ό 컴파일 μ–Έμ–΄, 인터프릿을 ν•˜λŠ” μ–Έμ–΄λ₯Ό 인터프리터 μ–Έμ–΄ ν˜Ήμ€ 슀크립트 언어라고 ν•œλ‹€. 1. 인터프리터(Interpreter) μΈν„°ν”„λ¦¬ν„°λž€ μ›μ‹œ μ½”λ“œλ₯Ό κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•˜λŠ” κ³Όμ • 없이 ν•œμ€„ ν•œμ€„ ν•΄μ„ν•˜μ—¬ λ°”λ‘œ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λŠ” 것을 λ§ν•œλ‹€. λ”°λ‘œ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λΉŒλ“œ μ‹œκ°„μ΄ μ—†μ§€λ§Œ, λŸ°νƒ€μž„ μƒν™©μ—μ„œλŠ” μ‹€μ‹œκ°„μœΌλ‘œ μ½μ–΄μ„œ μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έμ— 컴파일 언어에 λΉ„ν•΄ 속도가 λŠλ¦¬λ‹€. μ½”λ“œ λ³€κ²½ μ‹œ λΉŒλ“œ κ³Όμ • 없이 λ°”λ‘œ μ‹€ν–‰ κ°€λŠ₯ν•˜λ‹€. λŒ€ν‘œμ μœΌλ‘œ..

    ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(Functional Programming)

    ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(Functional Programming)

    ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„(Programming Paradigm) λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°: 무엇(What)을 ν•  것인지 λ‚˜νƒ€λ‚΄κΈ°λ³΄λ‹€ μ–΄λ–»κ²Œ(How) ν•  건지λ₯Ό μ„€λͺ…ν•˜λŠ” 방식 절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(C): μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  순차적인 처리 과정을 ν¬ν•¨ν•˜λŠ” 방식 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(C++, Java, C#): κ°μ²΄λ“€μ˜ μ§‘ν•©μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ˜ μƒν˜Έμž‘μš©μ„ ν‘œν˜„ μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°: μ–΄λ–»κ²Œ ν•  건지(How)λ₯Ό λ‚˜νƒ€λ‚΄κΈ°λ³΄λ‹€ 무엇(What)을 ν•  건지λ₯Ό μ„€λͺ…ν•˜λŠ” 방식 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(ν΄λ‘œμ €, ν•˜μŠ€μΌˆ, λ¦¬μŠ€ν”„): 순수 ν•¨μˆ˜λ₯Ό μ‘°ν•©ν•˜κ³  μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ§Œλ“œλŠ” 방식 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 치λͺ…적인 단점은 객체가 μƒνƒœλ₯Ό κ°–λŠ”λ‹€λŠ” 것이닀. λ³€μˆ˜κ°€ μ‘΄μž¬ν•˜κ³  이 λ³€μˆ˜λ₯Ό 톡해 객체가 μ˜ˆμΈ‘ν•  수 μ—†λŠ” μƒνƒœλ₯Ό κ°–κ²Œ λ˜μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 내뢀에 버그λ₯Ό λ°œμƒμ‹œν‚¨λ‹€...

    객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming)

    객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming)

    1. 절차적 ν”„λ‘œκ·Έλž˜λ°(Procedural Programming) 절차적 ν”„λ‘œκ·Έλž˜λ°μ΄λž€ 물이 μœ„μ—μ„œ μ•„λž˜λ‘œ 흐λ₯΄λŠ” κ²ƒμ²˜λŸΌ 순차적인 μ²˜λ¦¬κ°€ μ€‘μš”μ‹œλ˜λ©° ν”„λ‘œκ·Έλž¨ 전체가 유기적으둜 μ—°κ²°λ˜λ„λ‘ λ§Œλ“œλŠ” ν”„λ‘œκ·Έλž˜λ° 기법이닀. μ–Έμ–΄: C 1) μž₯점 μ»΄ν“¨ν„°μ˜ μž‘μ—… 처리 방식과 μœ μ‚¬ν•˜κΈ° λ•Œλ¬Έμ— 객체지ν–₯ μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” 것에 λΉ„ν•΄ 더 빨리 μ²˜λ¦¬λ˜μ–΄ μ‹œκ°„μ μœΌλ‘œ μœ λ¦¬ν•˜λ‹€. 2) 단점 ν”„λ‘œκ·Έλž¨ 뢄석이 μ–΄λ €μ›Œ 디버깅이 νž˜λ“€λ‹€. μœ μ§€ λ³΄μˆ˜λ‚˜ μ½”λ“œμ˜ μˆ˜μ •μ΄ μ–΄λ ΅λ‹€. 2. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming) 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν•„μš”ν•œ 데이터λ₯Ό μΆ”μƒν™”μ‹œμΌœ μƒνƒœ(속성, μ• νŠΈλ¦¬λ·°νŠΈ)와 ν–‰μœ„(μ—°μ‚°)λ₯Ό 가진 ν•˜λ‚˜μ˜ λ…λ¦½λœ 객체λ₯Ό λ§Œλ“€κ³  κ·Έ 객체듀 κ°„μ˜ 유기적인 μƒν˜Έμž‘μš©μ„ 톡해 λ‘œμ§μ„ ꡬ..