컴퓨터 프로그래밍 패러다임 중 하나로 현실 세계의 객체들을 모델링하여 프로그램을 작성하는 방식이다.
객체 지향 프로그래밍은 데이터와 해당 데이터를 처리하는 함수들을 하나의 논리적인 단위인 '객체'로 묶어서 다룬다. 객체 지향 프로그래밍은 3가지 특징을 가진다.
스택(stack)과 큐(queue)는 데이터를 저장하는 자료구조이다.
프로세스와 스레드는 컴퓨터에서 실행되는 작업의 단위이다.
프로세스는 서로 다른 프로그램을 동시 실행할 때, 스레드는 하나의 프로그램 내에서 동시에 실행해야 하는 작업이 많을 때 사용된다.
프로세스 간 통신은 비용은 크지만 안정적이고, 스레드는 경량화되있어서 작업 전환이 빠르지만 안정성 문제가 있다.
SPA는 사용자 경험을 개선하고 빠른 반응성을 제공하는 것이 장점이지만, 초기 로딩 속도가 느리고 검색 엔진 최적화(SEO)가 어렵다는 단점이 있다. 반면 MPA는 초기 로딩 속도가 빠르고 SEO에 유리하지만, 사용자 경험이 떨어지는 단점이 있다.
Git은 분산형 버전 관리 시스템으로 코드 기반의 변경 사항을 추적할 수 있다.
Git은 변경 사항을 효율적으로 병합하고 충돌을 해결할 수 있으며, 이를 통해 안정적이고 협업적인 방식으로 작업할 수 있다.
API는 Application Programming Interface의 약자로, 응용 프로그램에서 다른 소프트웨어와 상호 작용하기 위한 인터페이스를 제공하는 방법을 말한다. 즉, API는 소프트웨어 간의 커뮤니케이션을 가능하게 하는 일종의 규약이나 약속이다.
API를 사용하면 소프트웨어 개발자들은 기존의 서비스나 데이터를 활용하여 새로운 애플리케이션을 더 빠르고 쉽게 개발할 수 있다.
모두 소프트웨어 디자인 패턴으로, 사용자 인터페이스와 비즈니스 로직을 구성하는 방법을 제시한다.
*MVC (Model-View-Controller) 패턴은 어플리케이션을 3개의 구성 요소인 모델(Model), 뷰(View), 컨트롤러(Controller)로 나누어 설계한다.
⭐️ 모델: 데이터와 관련된 비즈니스 로직을 처리합니다.
⭐️ 뷰: 사용자 인터페이스를 나타내며, 모델의 상태를 표시합니다.
⭐️ 컨트롤러: 사용자의 입력과 이벤트를 처리한다.
MVP (Model-View-Presenter) 패턴은 컨트롤러 대신에 프레젠터(Presenter)를 사용하여 뷰와 모델 간의 의존성을 제거한다.
⭐️ 모델: 데이터와 관련된 비즈니스 로직을 처리합니다.
⭐️뷰: 사용자 인터페이스를 나타내며, 모델의 상태를 표시합니다.
⭐️프레젠터: 뷰에서 발생한 이벤트를 처리하고, 모델의 업데이트를 담당하며, 뷰에 데이터를 업데이트한다.(뷰와 모델의 의존성을 줄이고 테스트 용이성을 높임)
MVVM (Model-View-ViewModel) 패턴은 뷰모델(ViewModel)을 사용하여 뷰와 모델 간의 의존성을 분리한다.
⭐️모델: 데이터와 관련된 비즈니스 로직을 처리합니다.
⭐️뷰: 사용자 인터페이스를 나타내며, 뷰모델에 바인딩되어 뷰모델의 상태를 표시합니다.
⭐️뷰모델: 사용자 인터페이스의 상태와 동작을 캡슐화하고, 뷰와 모델 사이의 통신 처리.(양방향 데이터 바인딩으로 개발 생산성, 유지보수성 향상)
런타임 에러는 프로그램이 실행되는 동안 발생하는 에러이다. 주로 프로그램 실행 중 잘못된 연산이나 잘못된 데이터 유형 등이 발생하는 경우이다. 이 에러는 프로그램이 중단된다.
컴파일 에러는 코드를 컴파일 할 때 발생하는 에러이다. 코드에 문법적인 오류가 있거나, 변수나 함수를 참조할 때 그것이 존재하지 않는 등의 오류가 있는 경우 발생할 수 있다. 컴파일러는 이러한 오류를 발견하고 코드를 컴파일하지 않는다. 따라서 프로그램이 실행되기 전에 발견되며, 오류를 수정하고 다시 컴파일해야 한다.
컴파일 에러와 런타임 에러는 모두 프로그래밍에서 발생하는 오류지만, 발생 시기와 원인이 다르다. 컴파일 에러는 코드 작성 중에 발생하고, 컴파일시 발견된다. 반면, 런타임 에러는 프로그램 실행 중 발생되며, 코드의 논리적 오류나 잘못된 데이터 처리 등의 문제로 발생할 수 있다.
타입 시스템: JavaScript는 동적 타입 언어이므로 변수의 타입이 런타임에 결정된다. TypeScript는 정적 타입 언어로, 변수의 타입을 선언하고 컴파일 시점에 타입 체크를 수행한다.
컴파일러: JavaScript는 스크립트 언어이므로 브라우저나 Node.js 같은 환경에서 인터프리터를 통해 바로 실행된다. TypeScript는 컴파일 언어이므로 코드를 JavaScript로 변환해주는 TypeScript 컴파일러가 필요하다.
에러 처리: TypeScript는 컴파일러가 타입 체크를 수행하므로 코드에서 발생하는 오류를 미리 잡을 수 있다. JavaScript는 런타임에 에러가 발생하기 때문에 디버깅이 어렵다.
확장성: TypeScript는 JavaScript에 타입 시스템과 클래스 기능 등을 추가한 것이므로 JavaScript 코드를 TypeScript로 쉽게 변환할 수 있다.
생산성: TypeScript는 정적 타입 체크와 코드 어시스트 기능 등으로 코드의 안정성과 가독성을 높이고 개발자의 생산성을 향상시킨다.