본문 바로가기

기술면접/정리하기

(9)
정리 (윤성우의 열혈 C프로그래밍) 1. printf : 데이터 출력 함수 printf("1 더하기 1은 %d", 2); 출력 : 1 더하기 1은 2 2. scanf : 데이터 입력 함수 int num1, num2; int result; scanf("%d %d", &num1, &num2); result = num1 + num2; printf("%d", result); num1 입력 : 9 num2 입력 : 11 출력 : 20 3. 비트연산자 : 비트 단위로 연산을 진행 메모리 공간의 효율성을 높이고 연산의 수를 줄이는 요인이 되기도 한다. 연산자 연산자의 기능 결합방향 & 비트단위로 AND연산을 한다. ex) num1 & num2; 두개의 비트가 모두 1일때 1을 반환 1 & 1 → 1 1 & 0 → 0 → | 비트단위로 OR연산을 한다...
리스트(List), 배열(Array) - 링크드 리스트(Linked List)와 배열(Array)의 차이 Array Linked List 같은 자료형의 변수로 이루어진 구성요소가 모인 것 데이터를 보관하는 각 노드가 있고 해당 노드에는 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식 자료형[] 배열 변수명 = new 자료형[배열크기] int[] a = new int[3]; int형의 배열 본체를 생성하고 그것을 변수 a가 참조"하도록 설정 Linked list = new LinkedList (); 논리적 저장 순서와 물리적 저장 순서가 일치한다. 다음 노드의 정보를 모두 가지고 있는게 아닌, 다음에 나올 자료 위치 정보만 가지고 있다. index로 해당 원소에 접근(random access 가능) -> 찾고자 하는 원소의 인덱스 값을 ..
디자인 패턴 : 자주 사용하는 설계 형태를 정형화 하여 이를 유형별로 설계 템플릿을 만들어 둔 것. 디자인 패턴을 잘 사용하면 효율성과 재사용성을 높일 수 있으며, 설계 자료를 유형별로 분류하면 개발 기간을 둘이고 유지보수도 매우 쉬워질 수 있다. 디자인 패턴은 알고리즘처럼 프로그램 코드로 변환하여 바로 사용할 수 있는 것은 아니지만 유사한 상황에서 구조적인 문제를 해결할 수 있는 방안을 제시해준다. 1) 개발자(설계자) 간의 원활한 의사소통 : 여러 디자인 패턴의 특성을 잘 알고 있어 문제해결 시 어떤 디자인 패턴을 사용하면 좋을지 해결책을 논의할 수 있다. 2) 소프트웨어 구조 파악 용이 : 디자인 패턴의 특성을 잘 알고 있기에 어떤 디자인 패턴이 설계할 때 사용되었는지 알면 소프트웨어 전체구조를 쉽게 파악 가능..
객체 지향(OOP) : 독립적인 각각의 객체로 프로그램이나 시스템을 구성하는 일 근래 거의 모든 프로그래밍이 객체지향 개념으로 구현된다. 또한 새롭게 제시되는 방법론들도 모두 객체지향을 기반으로 제시된다. 1) 추상화 (Abstraction) : 실세계의 사물을 추상화 2) 캡슐화 (Encapsulation) 3) 상속 (Inheritance) 4) 다형성 (Polymorphism) 5) 정보은닉 (Information-Hiding) 위의 요소들로 구현된 객체의 구성으로 프로그램을 만들어 나가는 것 == 객체지향 프로그램 객체지향 프로그램 : 캡슐화, 다형성, 상속을 이용하여 코드 재사용을 증가시키고, 유지보수를 감소시크는 장점을 얻기위해 객체들을 연결 시켜 프로그래밍 하는것 OOP는 실세계 real world를 모델링 하..
자료구조와 알고리즘의 정의와 상관관계 자료구조 : 컴퓨터에 데이터를 표현하고 저장하는 방법 알고리즘 : 문제 해결 방법 어떤 자료구조를 쓰느냐에 따라 문제를 해결하는 방법이 달라지고 성능도 달라지게 된다. 모든 상황에 좋은 자료구조는 존재하지 않는다. 상황에 따라 효율적인 자료구조를 선택하고 알고리즘을 구현해야한다. 자료구조란? 우리가 평소에 데이터 저장을 하기위해 사용했던 정수형 변수 int, 구조체, 배열 등 자료형이나 배열 등은 간단한 자료구조이기에 자료구조론에서는 주로 선형, 비선형 구조를 다룬다. - 선형 자료구조 (Linear Data Structure) 데이터를 선의 형태로 나란히 혹은 일렬로 저장하는 방식 ex) 리스트, 스택, 큐, 덱 등 -비선현 자료구조 (Non-linear Data Structure) 데이터를 선의 형태..
힙 메모리 최적화와 오브젝트 풀링 메모리 힙영역 : 프로그램이 돌아가면서 생서오디는 값들은 메모리의 힙영역에 할당된다. == 동적 메모리 할당 ex) 게임 내 새로운 캐릭터 생성으로 인한 값, 네트워크 작업을 통해 일정한 데이터를 받아 배열을 생성 이러한 메모리 할당 요청이 발생하면 힙 메모리를 관리하는 관리자가 필요한 만큼의 영역을 힙에 예약한다. 예약된 영역은 다른 값이 할당 될 수 없는 곳이 된다. 예약된 영역은 핸들러나 포인터를 반환하여 값을 할당하는 등의 접근이 가능하게 된다. 누수현상 (Memory Leak) : 오류로 인해 영역을 가리키는 포인터 반환이 안된경우, 또는 영역의 예약이 잘못된 경우 등으로 해당 힙 영역을 사용하지 못하게 되는것을 메모리 누수(Memory Leak)라고 한다. 문제가 되는 이 영역은 다시 사용할 ..
메모리 공간 : 데이터(Data)영역, 힙(Heap)영역, 스택(Stack)영역 프로그램을 실행시키면 운영체제는 우리가 실행시킨 프로그램을 위해 메모리 공간을 할당해 준다. 할당되는 메모리 공간은 크게 데이터(Data), 힙(Heap), 스택(Stack) 영역으로 나눠진다. 할당 시기 : 프로그램이 실행될 때 마다 할당 장소 : 메인 메모리(RAM) 할당 용도 : 프로그램 실행 시 필요한 메모리 공간(지역변수, 전역변수 선언을 위해) 할당 1. 데이터(Data) 영역 : 전역 변수와 Static 변수가 할당되는 영역 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리에서 소멸된다. #include int a = 10; //데이터 영역에 할당 int b = 20; //데이터 영역에 할당 int main() { . . . return 0; } 위와 같은 코드에서 int형 변..
큐 (Queue) : 들어온 순서대로 넣어서 순서대로 사용한다. 스택(Stack)의 경우 넣은 순서대로 사용을 할 수 없기에, 넣었던 순서대로 자료를 사용하고 싶다면 큐(Queue)를 이용한다. 이처럼 먼저 들어간 들어간 원소가 가장 먼저 꺼내지기 때문에 FIFO(First In First Out) : 선입선출 이라고 불린다. 프로세스 처리, CPU 관리에서 많이 사용된다. [1][2][3][4][5] → [1]을 Pop → [pop][2][3][4][5] 일반적으로 배열을 직선 형태로 보았을 때, [1] 데이터를 Pop하면 다른 데이터를 차례대로 당겨줘야 한다. 이것은 소수의 자료의 경우는 상관이 없지만 많은 데이터의 경우 연산에 많은 시간이 걸린다. 이러한 문제를 해결하기 위해 원형 큐, 순환 큐, 환영 큐 라는 방법..