🎱 개요 프로그래밍 패러다임(Programming Paradigm) 프로그래머에게 프로그래밍의 관점을 갖게하고, 코드를 어떻게 작성할지 결정하는 역할 명령형 프로그래밍 : 무엇(What)을 할 것인지 나타내기보다 어떻게(How) 할 것인지를 설명하는 방식 절차지향 프로그래밍 : 수행되어야 할 순차적인 처리 과정을 포함하는 방식(C, C++) 객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용을 표현하는 방식(Java) 선언형 프로그래밍 : 어떻게(How)할 것인지를 나타내기보다 무엇(What)을 할 것인지를 설명하는 방식 함수형 프로그래밍 : 순수 함수를 조합하고 소프트웨어를 만드는 방식(클로저) 🎱 함수형 프로그래밍 📌 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법으로, 작은 문제를..
객체 지향 프로그래밍 📌 컴퓨터 프로그래밍의 패러다임 중 하나로 모든 것이 객체로 이루어져 있다는 원리를 기반으로 함. 즉, 프로그래밍에서 필요한 데이터를 모두 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들이 서로 맞물려 기능함. 🎱 특징 1️⃣ 추상화(Abstraction) 객체들이 공통적으로 필요로 하는 속성이나 동작을 하나로 추출해내는 작업 불필요한 정보는 숨기고, 중요한 정보만을 표현함으로써 프로그램을 간단하게 만드는 것 2️⃣ 캡슐화(Encapsulation) 정보 은닉화를 통해 높은 응집도, 낮은 결합도를 유지할 수 있도록 설계하는 것 → 한 곳에서 변화가 일어나도 다른 곳에 미치는 사이드이펙트를 최소화시키는 것을 의미 외부에서 접근할 필요가 없는 것들은 접근 지정자 private을..
폭포수 방법론(Waterfall 방법론) : 각 작업이 폭포처럼 위에서 아래로 떨어지는 단계별 개발 방법론 💦 프로세스 요구사항 정의(설계) : 고객의 문제를 정의하고 요구사항을 문서화하여 정리 디자인 : 정리한 요구사항을 충족할 수 있는 제품을 설계하는 단계 개발 : 설계한 내용에 따라 본격적으로 제품을 구현하고 만드는 단계 테스트 : 만들어진 제품의 기능이 제대로 작동하는지 테스트하는 단계 (배포 전, 문제가 될만한 버그 및 오류 수정) 배포 : 최종적으로 결과물이 출시가 되고, 사용자에게 소프트웨어가 배포되는 단계 💦 장단점 ☑️ 장점 단계별로 업무를 분담하기 때문에 맡은 바가 명확함 계획 단계의 문서화로 단계마다 소요되는 시간이나 현재 상황을 추적하고 병목을 파악하기도 쉬움 ☑️ 단점 속도가 느리..
📌 TDD (Test Driven Development) :: 테스트 주도 개발 → 반복 테스트를 이용한 소프트웨어 방법론 - 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현 - 짧은 개발 주기의 반복에 의존하는 개발 프로세스이며, 애자일 방법론 중 하나인 eXtream Programming(XP)의 ‘Test-First’ 개념에 기반을 둔 단순한 설계를 중요시함. 💡 eXtream Programming(XP)란? : 미래에 대한 예측을 최대한 하지 않고, 지속적으로 프로토타입을 완성하는 애자일 기방법론 중 하나 : 추가 요구사항이 생기더라도 실시간으로 반영할 수 있음 💡 단위 테스트(unit Test)란? : 말 그대로 한 단위(일반적으로 class)만을 테스트..
CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치 또는 예외상황이 발생하여 처리가 필요할 경우 CPU에게 알려 처리할 수 있도록 하는 것 → CPU가 어떤 프로그램을 순차적으로 수행하는 중에 외부로부터 인터럽트 요구가 들어오면, CPU는 원래 프로그램의 수행을 중단하고 인터럽트를 먼저 처리함. 후에 인터럽트 처리가 끝나면 원래의 프로그램으로 복귀하여 수행을 계속 함. → 인터럽트를 발생시키기 위해서는 CPU 내에 있는 인터럽트 라인을 세팅함. 하드웨어 인터럽트 하드웨어가 발생시키는 인터럽트 CPU가 아닌 다른 하드웨어 장치가 CPU에 어떤 사실을 알려주거나 CPU 서비스를 요청해야할 경우 발생 소프트웨어 인터럽트 소프트웨어가 발생시키는 인터럽트 소프트웨어가 스스로 인터럽트 라인을 세팅' ..
✅ 대칭키 : 암호화와 복호화에 같은 암호키를 쓰는 알고리즘 → 하나의 비밀키를 클라이언트와 서버가 같이 사용 장점 구현이 용이함 데이터를 암호화하기 위한 연산이 빨라 대용량 데이터 암호화에 적합 기밀성을 제공 단점 강한 보안을 위해 키를 주기적으로 교환해주는 것이 좋음 키 탈취 및 관리가 어려움 무결성 지원이 부분적으로만 가능 부인 방지 기능을 제공하지 못함 종류 블록 암호(Block Cipher) 방식 : 어느 특정 비트 수의 집합을 한 번에 처리하는 암호 알고리즘을 총칭 → 기밀성 있는 정보를 정해진 블록 단위로 암호화하는 대칭키 암호 시스템으로 만약 암호화하려는 정보가 블록 길이보다 길 경우 특정한 운용 모드가 사용됨 → SEED, HIGHT, ARIA, LEA, DES, AES 페스탈(Feist..