SOLID란 로버트 마틴이 명명한 객체지향 프로그래밍 및 설계의 다섯가지 기본 원칙을 말합니다. 이 글에서는 코드를 Kotlin 언어를 기준으로 작성합니다. 1. SRP: Single Responsibility Principle 단일 책임 원칙. 가장 기본이 되는 원칙이며 한 객체는 한 책임만 가져야 한다는 원칙입니다. 함수를 동사로 작성해보면 책임을 여…
HTTP HTTP는 웹서버와 클라이언트 간의 통신 규약이며 TCP 기반의 통신방식을 사용합니다.. 비연결을 지향하기 때문에 어떤 사용자의 요청인지 알기 힘들다는 단점이 있습니다. 때문에 여러 사용자가 요청할 시 제대로된 응답 데이터를 전송하기 힘들 수 있습니다. 쿠키, 세션, 히든 폼 필드 등으로 해결할 수 있습니다. 또한 평문 통신이기 때문에 도청이 가…
onCreate() 액티비티가 최초 실행될 때 한 번 호출됩니다. 필요한 리소스를 초기화하며 이전 상태가 저장되어 있을 경우 번들 객체를 참조해 복원가능합니다. onStart() 액티비티가 화면에 보이기 직전에 호출됩니다. 빠르게 끝나고 onResume() 단계로 넘어갑니다. onResume() 액티비티가 사용자와 상호작용하기 직전에 호출됩니다. 바로 액…
TCP와 UDP는 OSI 계층 중 4번째 계층은 전송 계층에서 사용하는 프로토콜입니다. TCP IP가 데이터를 전송하고 TCP는 패킷을 추적 및 관리합니다. 3-way handshaking, 4-way handshaking을 통해 신뢰성 있는 연결을 보장합니다. full-duplex, point to point 방식이며 양방향 전송이 가능하고 각 연결이 …
OSI는 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것입니다. 각 계층은 하위계층의 기능만 이용하고 상위 계층에게 기능을 제공합니다. 또한 일반적으로 하위계층에는 하드웨어, 상위계층에는 소프트웨어로 구현됩니다. 1.물리계층 bit단위로 전송하며 하드웨어 전송기술을 이룹니다. 2.데이터 링크 계층 frame단위로 전송하며 point t…
프로세스 프로그램은 실행할 수 있는 파일을 말하며 코드 덩어리에 불과합니다. 프로세스는 실행되고 있는 프로그램의 인스턴스를 뜻합니다. 독립된 Code, Data, Stack, Heap 메모리 영역을 할당받으며 최소 1개의 스레드를 갖습니다. 다른 프로세스의 자원에 접근하기 위해서는 IPC를 사용하게 됩니다. 쓰레드 스레드는 프로세스가 할당받은 자원을 사용…
B+Tree DB에서 널리 사용되는 트리 자료구조의 일종으로, 이진트리를 확장해 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리구조가 B트리입니다. 이와 비슷한 B+트리는 모든 레코드들이 트리의 최하위 레벨에 정렬되어 있고 오직 키들만 내부 블록에 저장됩니다. 리프노드를 연결리스트 형태로 연결한 트리이며 최대 key 개수가 정해져있다…
Heap 완전 이진트리이며, 최솟값이나 최댓값을 빠르게 찾을 수 있는 자료구조입니다. 이진탐색트리와 달리 중복된 값을 허용합니다. 구현 배열로 트리와 유사하게 만듭니다. 왼쪽자식은 부모인덱스 * 2, 오른쪽 자식은 부모인덱스 * 2 + 1로 계산합니다. 삽입 노드를 만들어 힙의 마지막노드 뒤에 삽입합니다. 부모를 제쳐가며 본인의 위치를 찾아갑니다. 삭제 …
Red Black Tree BST는 삽입, 탐색, 삭제 연산이 O(h)의 시간복잡도를 갖습니다. (h는 트리의 높이) 트리의 밸런스가 무너진다면 트리의 높이는 N이 될 수 있습니다. 기존 BST 자료구조에서 트리의 균형을 잡아 최악의 경우를 없애 O(logN)을 유지하기 위해 Red-Black Tree를 사용합니다. 규칙 Color Red의 자식은 Bla…
구현 간단한 해시테이블을 구현하기 위해선, 연결리스트와 해시코드 함수만 있으면 됩니다. 다음과 같은 순서로 구현할 수 있으며, 을 조심해야합니다. 키의 해시코드 계산하기 배열의 인덱스 구하기. 키와 값을 해당 인덱스에 저장하기. 이 때 충돌이란 서로 다른 두 개의 키가 같은 해시코드를 가리키거나 같은 인덱스를 가리키는 경우를 말합니다. 와 은 유한하기 때…