A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
전산 기초개발상식객체 지향 프로그래밍이란 무엇인가? 절차지향 프로그래밍은 오로지 컴퓨터 관점에서의 프로그래밍 패러다임이라면 객체지향은 인간이 구분할 수 있는 요소를 객체로 표현한 인간 중심적 프로그래밍 패러다임이다. 객체는 기억장소와 이 기억장소의 값을 변경할 수 있는 연산의 집합이 정의되면 객체를 선언할 수 있다. 많은 객체 지향 언어에서 객체는 클래스로 그룹화 된다. 생성된 클래스로 객체의 특정 예를 생성하는데 이를 인스턴스라고 부른다. 객체 간의 정보 교환이 모두 메시지 교환을 통해 일어난다. 객체 지향 프로그래밍은 4가지 특징을 가진다.
함수형 프로그래밍은 순수 함수의 조합으로 소프트웨어를 설계하는 방식을 말한다. 순수 함수란 함수의 동작으로 인해 부수 효과(메모리의 값을 직접 수정하는 행위)가 발생하지 않는 함수를 말한다. 객체 지향 언어의 유일한 단점은 객체가 상태를 가지고 있다는 것이다. 따라서 객체는 프로그래머가 의도하지 않은 상태를 가질수도 있다. 함수형 프로그래밍에서 모든 입력은 새로운 출력을 가지므로 부수 효과를 가지지 않는다. 함수형 프로그래밍이 언제나 높은 효율을 보이는 것은 아니다. 상황에 따라 다르며 특히 맵리듀스를 해야하는 상황이라면 효율적이다. REST API란 무엇인가?REST는 자원(Resource), 행위(Verb), 표현(Representations)으로 구성된 API 아키택쳐이다. 웹의 장점과 HTTP의 우수성을 적극 활용할 수 있는 아키텍처로 테스트 주도 개발(Test Driven Development), 테스트를 먼저 만들고 테스트를 통과하기 위한 코드를 작성하는 것을 의미하며 모듈화가 자연스럽게 잘 이루어지면서 개발이 진행된다. 테스트 커버리지가 높아져 리팩토링과 유지보수가 쉬워진다. MVC 패턴이란 무엇인가?모델(Model), 뷰(View), 컨트롤러(Controller)가 분리된 형태의 아키텍처이다. 세가지가 결합된 형태에서는 어플리케이션의 확장이 어렵다. 모델은 데이터 처리, 뷰는 사용자 인터페이스 처리, 컨트롤러는 비즈니스 로직을 처리하는 등 각각의 요소가 하나의 역할만 담당한다. Git과 GitHub에 대해서버전 관리를 위한 도구 Docker와 VM의 차이점Dcoker는 하드웨어를 가상화하는 계층(Hyper-V)이 없으며, 호스트의 자원을 직접 이용하기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상머신에 비해 월등히 빠르다. 자료구조순차 자료구조 vs 연결 자료구조 순차 자료구조는 메모리 상에서 일렬로 나열된 데이터형이며 연결 자료구조는 메모리 상에서는 분산되어 있지만 하나의 노드가 다음 노드로 이어지는 포인터를 가지고 있어 연속적으로 접근이 가능한 데이터형이다. 삽입과 읽기를 비교해보면 아래와 같다. 데이터 삽입
데이터 읽기
트리는 계층 구조로 구성된 자료구조이다. 트리의 모든 노드는 최대 하나의 부모 노드를 가진다. 부모 노드를 가지지 않는 최상위 노드를 루트 노드, 자식 노드가 없는 노드를 리프 노드라고 한다. 트리의 크기를 제한하면 트리의 연산이 단순해지고 명확해지는데 차수를 2개 이하로 정의한 것이 이진 트리이다. 이진 트리의 종류로는 스레드 이진 트리, 이진 탐색 트리, AVL 트리 등이 있다. 힙(Heap)힙는 이진트리의 한 종류로 나열한 두 가지 조건이 성립하는 이진 트리를 의미한다.
루트 노드가 가장 크고 자식 노드가 부모 노드보다 작으면 최대 힙이라 부르고, 반대의 경우는 최소 힙이라 부른다. 힙은 최댓값과 최솟값에 접근하기 위해 사용하며 성능이 매우 빠르다. 그래프정점과 에지로 이루어진 형태의 자료구조다. 에지의 방향성의 존재 유무에 따라서 유향 그래프와 무향 그래프로 분리되며, 에지가 가중치를 가지고 있다면 가중치 그래프라고 부른다. 그래프는 행렬과 연결리스트를 활용하여 구현할 수 있는데 행렬의 경우 정점의 존재 여부와 상관없이 항상 해쉬는 임의의 크기를 가진 데이터를 고정된 크기의 값으로 변환시키는 것을 말한다. 해쉬를 이용하여 임의의 데이터를 숫자로 변경하는 해쉬 함수를 정의하면 배열의 인덱스를 원하는 데이터 값으로 저장하거나 찾을 수 있다. 기존에는 탐색을 위한 시간이 소모됨에 반해 해쉬를 이용하면 즉시 데이터에 엑세스 할 수 있다. 단, 다른 입력이 같은 입력을 생성하는 현상을 해시 충돌이라고 하는데 해시 함수는 해시 충돌을 염두하여 구현하는 것이 중요하다. 네트워크GET, POST 방식의 차이점
HTTP의 문제점은 평문 통신이기에 도청이 가능하다는 것, 통신 상대를 확인하지 않기 때문에 위장이 가능하다는 것, 완정성을 증명할 수 없기 때문에 변조가 가능하다는 것이다. TCP/IP 구조의 통신은 패킷을 수집하는 것만으로도 도청할 수 있다. 이를 해결하는 방법으로 통신 자체에 SSL을 적용하거나 콘텐츠 자체를 암호화하고 복호화하는 처리를 진행할 수 있다. 통신 자체에 SSL이 적용된 통신을 HTTPS라 칭한다. DNS round robin 방식DNS를 이용해서 하나의 서비스에 여러 대의 서버를 분산 시키는 방법이다. 동일한 이름으로 여러 레코드를 등록 시키면 질의 할 때마다 다른 결과를 반환하며, 이 동작을 이용함으로써 여러 대의 서버에 처리를 분산 시킬 수 가 있다. 단점은 아래와 같다.
추후 추가 예정 운영체제
데이터베이스
프로그래밍 언어Java
제내릭 제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션에 컴파일 시 타입 체크를 해주는 기능이다. 클래스 내부에서 사용할 데이터 타입을 나중에 인스턴스를 생성할 때 확정하는 것을 제네릭이라 한다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다. 파이널원시 변수에
Javascript자바스크립트 이벤트 루프 이벤트 루프는 테스크 큐와 콜 스택을 수시로 감시하여 콜 스택에 처리할 함수가 없고, 테스크 큐에 처리할 함수가 존재하면 테스크 큐에 있는 함수를 콜 스택으로 전달하는 역할을 담당한다. 예를들어 setTimeout을 호출한 경우 WebAPI에서 처리한 뒤 프로그래머가 지정한 작업(콜백 함수)이 테스크 큐에 등록된다. 이후 이벤트 루프에 의해 콜 스택으로 전달되어 처리된다. Prototype자바스크립트는 프로토타입 기반의 객체 지향 프로그래밍을 지원하며, 자바스크립트의 대부분은 객체이고, 모든 객체는 부모 객체와 연결되어 있다. 이때 부모 객체를 프로토타입이라 한다. 자바스크립트에서는 프로토타입 체인을 이용하여 상속을 구현한다. 인스턴스의 프로퍼티 혹은 메서드를 호출한 경우 인스턴스에 해당 프로퍼티 혹은 메서드가 존재하지 않으면 프로토타입 내부 슬롯의 참조로 이동하여 과정을 반복한다. 프로토타입 프로퍼티는 함수 객체만 가지고 있으며 이는 생성될 인스턴스의 프로토타입을 가리킨다. 프로토타입 내부 슬롯은 모든 객체가 가지며 프로토타입 객체의 참조를 가진다. 대부분의 경우 프로토타입 체인의 종단점은 Object.prototype 이다. Hoisting자바스크립트는 소스코드를 실행하기 전에 소스코드 평가를 거쳐 실행 컨텍스트를 생성한다. 이 과정에서 변수 선언문과 함수 선언문은 우선적으로 렉시컬 환경에 등록된다. 변수 선언문의 경우 선언과 초기화가 동시에 이루어지며 함수 선언문은 함수 객체로 등록된다. 따라서 소스코드 상에서는 변수가 선언되기 전이지만 프로그래머는 변수에 접근할 수 있다. 이러한 현상을 호이스팅이라 한다. 단, var의 경우에만 초기화가 진행되어 undefined로 접근되며, let 또는 const로 선언한 변수는 호스이팅되지만 호이스팅이 되지 않은 것처럼 동작한다는 점에 유의해야 한다. Closure클로저는 함수형 프로그래밍에서 중요하게 사용되는 개념으로 MDN 문서에서는 클로저를 함수와 함수가 선언된 렉시컬 환경의 조합으로 정의하고 있다. 외부 함수가 존재하고 외부 함수에 변수와 중첩 함수를 선언했을때 중첩 함수에서 외부 함수의 변수를 참조하는 상태로 중첩 함수가 반환이 되는 경우 외부 함수의 렉시컬 환경은 중첩 함수에 의해서 유지된다. 이러한 중첩 함수를 클로저라 한다. 클로저는 다음과 같은 상황에서 주로 사용된다.
객체는 상태와 동작을 가진 자료구조다. 동작은 상태를 변경할 수 있어야 한다. 그러려면 메서드는 객체를 참조할 수 있어야 하는데 이러한 자기 참조 변수를 대부분의 프로그래밍 언어에서는 this로 정의한다. 단, 자바스크립트에서 this는 언제나 자기 참조 변수를 의미하지 않는다. 문맥에 따라서 변한다.
PythonGenerator 제네레이터는 이터레이터를 생성해 주는 함수이다. 이터레이터는
인스턴스의 메서드를 실행한다고 가정할 때 GIL(Global Interpreter Lock)은 여러 스레드가 동시에 실행되는 걸 막는다. 덕분에 구현이 간단하고 레퍼런스 카운팅 오버헤드가 적다. 수행시간에 CPU의 영향이 큰 작업(압축, 정렬,
인코딩)을 멀티 스레드로 수행하면 파이썬은 객체를 레퍼런스 카운트를 통해 관리한다. 객체를 참조하는 횟수가 늘어날수록 해당 객체의 레퍼런스 카운트는 증가하고 참조 횟수가 줄어들수록 감소한다. 레퍼런스 카운트가 0이 되면 객체는 메모리에서 해제된다. 단, 레퍼런스 카운트가 0이 아닌 경우에도 자가 참조 혹은 삭제된 객체들이 순환 참조되어 도달할 수 없는 경우에도 메모리에서 해제된다. 가비지 컬렉터는 세대와 임계값을 통해 가비지 컬렉션의 주기를 관리한다. 0세대의 경우 메모리에 객체가 할당된 횟수에서 해제된 횟수를 뺀 값이
새로운 객체가 만들어 질 때 파이썬은
Duck typing이란 특히 동적 타입을 가지는 프로그래밍 언어에서 많이 사용되는 개념으로, 객체의 실제 타입보다는 객체의 변수와 메소드가 그 객체의 적합성을 결정하는 것을 의미한다. 하나의 외부 메서드를 통해서 서로 다른 객체의 인자의 같은 이름의 메서드를 호출할 수 있다. 분야별프론트엔드브라우저의 작동 원리 브라우저의 핵심적인 기능은 사용자가 참조하고자 하는 주소를 파싱하여 웹 서버에 요청하고 응답을 표현하는 일이다. 브라우저는 서버로부터
따라서 스크립트 태그의 위치에 따라서 렌더링 속도에 큰 영향을 미칠 수 있다. 이를 방지하기 위해 스크립트 태그를 바디 태그가 끝나기 직전에 선언하거나 스크립트 태그에 스크립트의 텍스트 파일로 만들어진 웹문서의 요소를 각각의 객체로 만들고 트리 구조로 구성한 것이 브라우저는 보안상의 이유로 스크립트에서 시작된 교차 출처의 HTTP 요청을 제한한다. 예를들어 브라우저에서 제공되는 대부분의 기기, 대부분의 브라우저에서 동등한 사용자 경험을 제공하는 것을 말한다. 고려해야 하는 크로스 브라우징 이슈는 다음과 같다.
추후 추가 예정 서버 사이드 렌더링 vs 클라이언트 사이드 렌더링컴퓨터가 해석할 수 있는 문서가 서버에서 완성되면 서버 사이드 렌더링(SSR), 클라이언트에서 완성되면 클라이언트 사이드 렌더링(CSR)이라 한다. React나 Vue와 같은 SPA 기반의 프레임워크에서는 CSR을 기반으로 만들 수 있지만 제공하는 기능을 활용하여 SSR이 가동하도록 구현할 수 있다. SSR의 주 목적은 초기의 빠른 로딩과
|