본문 바로가기

CS 및 면접 질문19

동적 바인딩 🌏 바인딩이란? 함수를 컴파일하면, 선언된 함수의 코드는 메모리에 저장되고, 함수 호출문에는 코드의 메모리 주소값이 저장된다. 여기서 프로그램을 실행하면 함수 호출문에서 함수 코드가 저장된 주소로 이동한 후 함수를 실행하고 원래 위치로 돌아오는데 이때 함수 호 출문에서 함수 코드가 저장된 주소로 연결하는 과정을 바인딩이라 한다. 🚗 동적 바인딩 동적 바인딩은 컴파일 과정에서 부모 클래스의 함수를 참조하는데 런타임 과정에서 실제로는 자식 클래스의 함수와 바인딩된다 why? 정적 바인딩의 경우, 컴파일 과정에서 정의된 타입 형식을 참조해 어떤 클래스와 메소드를 참조할 지 결정한다. (super class의 메소드 ) 동적 바인딩의 경우에는 런타임에서 실제 객체를 찾아 오버라이드된 자식 클래스의 메소드의 결과.. 2022. 6. 16.
객체지향 프로그래밍이란? 🍳 OOP 탄생 배경 : 객체지향 프로그래밍이 등장하기 전에는 절차지향적, 구조적 개발 방법론을 이용해 소프트웨어를 개발했다. 명시된 입력을 받아 명시된 순서로 처리한 다음 결과를 내는 방식이다 하지만 대규모 프로젝트같은 복잡한 로직이 요구되면 순서도로 나타내는 게 불가능해지고 스파게티 코드를 양상하게 되었다.이때 구조적 프로그래밍이 탄생했다. 구조적 프로그래밍이란 큰 문제를 해결하기 위해 작은 함수로 쪼개기 때문에 Top-Down (하향식)방식으로 불린다. 하지만 구조적 프로그래밍 도 데이터 자체를 구조화하지는 못했다. 전역 네임 스페이스는 포화상태가 되고 GUI 프로그래밍에선 실행 컨텍스트를 저장할 방법이 없었다. 이에 해결책으로 나온게 객체 지향 프로그래밍 이다. 객체지향은 먼저 작은 문제들을 해결.. 2022. 6. 16.
Block I/O vs Non-Block I/O I/O 종류 I/O란 Input/Output인 입출력을 말한다. network(socket) file pipe (process 간에 통신할 때 사용되는 개념) device (모니터, 키보드, 등): 네트워크 통신은 소켓을 통해 데이터가 입출력 된다. socket 소켓 : 네트워크 통신은 소켓을 통해 데이터가 입출력 된다. 2개의 컴퓨터의 프로세스가 데이터를 주고 받기 위해서는 소켓을 열고 소켓을 통해서 데이터를 주고받을 수 있다. backend server : 네트워크 상의 요청자들과 각각 소켓을 열고 통신한다. 밖에 있는 클라이언트들이 소켓을 열고 요청을 한다. 백엔드도 소켓을 열고 받은 요청의 클라이언트와 상호작용한다. OS 레벌에서 Block I/O와 Non-Block I/O가 어떻게 동작하나 Bl.. 2022. 6. 15.
Block vs Non-Block 그리고 동기 비동기 Block function 호출자() { functionA(); functionB(); function C(); } function functionA(){ //로직 return something; } 제어권 : 행동할 수 있는 권리 흐름 보기 현재 제어권은 function 호출자가 가지고 있다. 제어권이 functionA()로 감 function 호출자는 제어권이 없기 때문에 functionA()를 기다려야 한다. == 호출자의 상태를 막아버렸다 (blocking) functionA()가 결과값(something)과 제어권이 다시 function호출자에게 돌아온다. => 제어권과 결과값이 넘어오는 시간이 같음 === 동기 그러면 이제 functionB()를 실행할 수 있게 된다. => 이렇게 반복되는 것.. 2022. 6. 15.
I/O 논블로킹이란 무엇일까? 논 블로킹에 대해 알아보기 전에 먼저 블로킹이 뭔지 알아보자!! 1. 커널 리눅스 커널은 리눅스 운영 체제의 주요 구성요소이며 컴퓨터 하드웨어, 프로세스를 잇는 핵심 인터페이스이다. OS 내에 위치하고 전화기, 노트북, 서버 또는 컴퓨터 유형에 상관없이 하드웨어의 모든 주요 기능을 제어한다. 커널의 4가지 기능 메모리 관리 : 메모리가 어디에서 무엇을 저장하는 데 얼마나 사용되는 지 추적 프로세스 관리 : 어느 프로세스가 중앙처리장치(cpu) 를 언제, 얼마나 오랫동안 사용할 지 결정 장치 드라이버 : 하드웨어와 프로세스 사이에서 중재자/인터프리너 역할 수행 시스템 호출 및 보안 : 프로세스의 서비스 요청을 수신 2. I/O I/O는 Input/Output의 약자이다. 주로 파일 입출력을 다룰 때 쓰인다.. 2022. 6. 15.
OOP ( 객체지향 프로그래밍) 이란 무엇인가 컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법 객체 지향 프로그래밍 키워드 5가지 클래스 + 인스턴스 추상화 캡슐화 상속 다형성 클래스와 인스턴스란? 클래스 : 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메세드로 정의한 것으로 객체를 만들기 위한 메타정보이다. 인스턴스(객체) : 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것이다. 실제 프로그램에서 사용되는 데이터이다. 추상화 공통의 속성, 기능을 묶어서 이름을 붙이는 것 캡슐화 캡슐화에는 2가지 목적이 있다. 코드를 재수정없이 재활용하는 것 접근 제어자를 통해 정보를 은닉하.. 2022. 6. 14.
var, let const 의 차이와 호이스팅 변수 변수 ( variable) : 어떤 값을 저장하기 위해 마련한 메모리 공간이며 이 공간을 식별하기 위해 붙인 이름을 변수라고 한다. const egg= 15; // 변수 명 : egg //변수 값 : 15 // 해당 값의 위치 (메모리주소) : 0012ccgwh80 자바스크립트는 managed language 이기 때문에 개발자가 직접 메모리를 제어할 수가 없다. 따라서 직접 메모리 주소를 통해 값을 저장하고 참조할 필요없이 변수를 통해 안전하게 값에 접근하는 것이 가능하다 이 egg 변수명은 변수 값이 아니라 메모리 주소를 기억하고 있다. 변수명을 사용하면 자바스크립트 엔진이 변수명과 매핑된 메모리 주소를 통해 그곳에 저장된 값 (15) 를 반환한다. 이렇게 변수에 값을 저장하는 걸 할당(assi.. 2022. 6. 14.