1. 프로그래밍이란 뭔가


알파벳 같은 작고 매우 추상적인 단위를 조합하여 명확하고 자세한 약속을 만들어 내는 과정이다


프로그래밍으로 치면 서로 다른 목표를 추구하지만 인터페이스, 추상 클래스, 템플릿 등으로 알파벳과 같은 추상적인 최소의 단위를 만들어내고


이 최소 단위로 조합식을 만들어 단어, 동사, 문장을 만들어 내는 과정이라 할수있다.


즉, 공통적으로 사용 될 구조를 만든 뒤 이를 조합하여 더 큰 단위의 단어를 만들어 내는 과정이라 볼 수 있다




2. 모델이란 무엇인가


프로그램을 구성하는 요소, 요소 구성하는 요소를 나타내는 단위 개념이다



3. 뷰란 무엇인가


구성하는 요소들 사이의 최소 의사소통 단위를 기입해놓은 구성요소의 이용 방식 리스트이다



4. 컨트롤이란 무엇인가


의사소통 방식을 나열하여 순서를 기입한 통제 방식 리스트이다




5. 운영체제란 무엇인가


설계되어진 입력과 출력 시스템을 기준으로 배치된 하드웨어간의 의사소통을 담당하는 중계 프로그램이다


키보드, 마우스 - 누른 상태, 누른게 해제된 상태, 안 누른 상태. 즉, On / Off의 상태에 따른 정해진 코드를 가짐


스피커, 디스플레이 - 전압에 따른 아날로그식 데이터를 변환한 디지털 높낮이. 즉, 높음 / 낮음의 단계적 값을 가짐


마더보드 - CPU, 유선칩, 무선칩, 램, 하드, 글카, USB/HDMI/랜 등 각종 포트들과의 통신을 담당하며 통신을 위한 어셈블리와 같은 정해진 규칙의 언어를 가짐



우리는 마더보드의 버스에 각종 기기를 연결하고 운영체제에 해당 기기의 드라이버를 제시함으로서


운영체제의 이벤트 루프 도중 제시한 드라이버를 작동시키게 함으로서 기기를 실행 시킬수 있다




6. 통신이란 무엇인가


상대방과 내가 대화의 룰을 정하여 의사소통 하는 과정으로 그 대상은 프로그램의 클래스 단위에서 스레드, 프로그램, 운영체제, PC간 등 무엇이든 될 수 있다


통신의 구성요소는 송신자 번호, 수신자 번호, 서로의 위치, 대화 번호, 송신 날짜, 수신 날짜, 제목, 대화 내용, 진위 여부를 위한 번호 등이 될 수 있다




7. 통신의 룰


통신의 룰은 대화의 방식으로서 다양한 방법을 가진다


종소리 마냥 울려퍼지는 브로드캐스팅, 서로간 수신 여부를 확인하는 책임여부방식, 


짧은 단답형으로만 대화하는 음슴체 방식, 구호를 정해서 대화하는 암구호 방식 등등 현실에서 볼수있는 방식들을 적용할 수 있으며


운영체제를 통해 필터링하여 특정 내용만 듣거나 다른 사람에게 토스 할 수도 있다.




8. 캐시란 무엇인가


최우선 사항, 우선 사항, 고려 사항, 언급 외 사항등의 순서로 우선 순위에 따라 거리감을 가깝게 두는 개념으로서


우선적으로 해야 될 사항일수록 제일 빠르게 가져올 수 있는 영역에 지정해두는 개념을 뜻한다


이 영역의 공간은 늘 한정적이며 쓰지않는 사항들을 즉각적으로 우선 순위를 뒤로 밀거나 치우고 써야 될 사항들을 당겨두는 시스템이 필요하다




9. 스레드란 무엇인가


작업자들에게 일을 배분하는 과정으로 동시에 작업이 가능한가? 불가능한가? 의 2가지 고려점을 가진다


동시에 작업이 가능하도록 만드는것이 최선의 퍼포먼스이며 이를 위해서는 


해당 작업이 다른 작업을 방해하지 않거나 방해당하지 않아야하며, 어떤 작업이 선행되지 않거나 어떤 작업을 위해 선행하지 말아야한다


현실적으로 선행은 필수적이며 단일인 직렬과 동시인 병렬이 동시에 수행되는 싸고 저렴한 단방향 형태의 컨베이어 벨트이다




10. DB란 무엇인가


파일 - 프로그램 진행 중 파생된 높은 코스트를 쏟아 만든 데이터의 집합체


로컬 DB - 사용자가 가지고 있어야 할 파일을 정해진 규칙을 기준으로 자료 구조화 해놓은 집합체


Server DB - 여러 사용자가 만들어낸 파일 값을 가져와 담은 파일을 자료 구조화 해놓은 집합체



우리가 늘 쓰는 배열, 링크드 리스트, 리스트, 벡터, 스택, 트리등 자료구조를 어떨때 왜 쓰는지를 생각하고


어느 기준으로 해당 자료 구조에 데이터를 배치하는지 생각해보면


자료 구조의 형태와 자료 구조내에서 데이터를 나열하는 기준은 용도에 따라 정할 수 있다




11. 상태란 무엇인가


일정 기준을 관점으로 대상을 바라봤을때의 기준을 뜻하는 것으로


품질(상, 중, 하), 동작(진행중, 일시정지, 중단, 시작, 동작불가), 존재(있음, 없음, 알수없음), 양(기준을 초과함, 기준점 근처, 기준 아래, 없음) 등을 예시로 들수있다


즉, 우리는 상태의 기준을 정하여 대상의 상태를 나타낼 수 있고 상태에 따라 달라지는 사항을 제시 할 수 있다




12. 컴파일 타임, 런타임은 무엇인가


컴파일링을 통해 실행파일을 만들어내면 우리가 쓴 코드는 여러 방향으로 바뀔 수 있다


코드를 그대로 어셈블리어로 변환하거나, 라이브러리로 연결된 코드를 그대로 집어넣거나


코드를 다른 무언가를 가리키는 링크 주소 같은것을 넣거나, 다른 파일의 코드가 있는 주소를 집어넣거나


다른 무언가는 지침서, 파일, 변수, 테이블 등 다양한것으로 바뀔 수 있으며


이런 지침서와 같은 정해지지 않은 동적 요소들은 런타임에 해당 값이 정해질 수 있고 이를 런타임 요소라 부른다


반대로 컴파일 타임때 파일에 박히게 될 코드를 조건에 따라 분기할 수도 있다



 

13. 디자인 패턴이란 뭔가


해당 프로그래밍 언어의 문법상 일어날 수 있는 공통적인 과정을 묶은 효율적인 의사소통의 예를 뜻한다


우리가 늘 쓰고 사용하는 문장의 공통사항을 묶어 정의 해놓은것이라 보면 된다


즉, 단순히 문법상의 공통점 외에도 프로그램의 도메인상 공통 사항을 묶어놓는 과정으로


이를 인터페이스로 묶어 놓음으로서 사용자가 내부를 알 필요 없는 추상화와 런타임 지침서와 같은 형태의 다형성을 제공할 수 있다




14. 논리 역전이란 무엇인가


인풋과 아웃풋에서 아웃풋의 입장에서 다시 생각해보는것으로 


둘 중 어느 입장으로 계산해야 소수가 다수를 통제하는 항아리형 ㅈ소가 아닌 효율적인 구조가 되는지 입장을 바꿔 생각해보는 것이다




퇴근 ㄱ