목록이론 (20)
책 읽다가 코딩하다 죽을래
📕 시스템 설계란? 시스템의 요구사항을 충족하기 위해 필요한 아키텍처, 인터페이스 및 데이터를 정의하는 과정이다.소프트웨어를 구성하는 요소들 간이 관계와 동작 메커니즘을 표현하기 위한 구조체이다. 설계가 후순위가 되면 시스템을 개발하는 비용이 더 많이 들고, 일부 또는 전체 시스템에 변경을 가하는 일이 현실적으로 불가능해진다.- 책 clean Archictecture 중 📗 시스템 설계의 필요성 1. 개발이 진행된 이후에는 이미 개발된 전체 시스템의 구조를 수정하기가 어렵기 때문에 미리 설계를 해야 한다.2. 설계 과정이 있어야 확장성, 보안 등 시스템에 요구되는 다양한 요구사항을 충족시킬 수 있는지 미리 알아볼 수 있다.3. 시스템 수정이 필요할 때 어느 부분을 수정해야 하고 어느 부분은 건드리..
🤔 메시지? 메서드? 객체지향 공부를 하다 보면 자주 나오는 단어가 있습니다. 그것은 '메시지'와 '메서드' 인데, 이 단어들이 같은 맥락에서 설명되어있다 보니 두 개의 단어가 비슷한 뜻일 거라고 생각하면서 넘어가거나, 알아내려고 공부해도 계속 헷갈리는 분들이 많을 것입니다. 결론부터 말하자면 '메시지'와 '메서드' 는 같은 개념이 아닙니다. 더욱이 '메시지'와 '메서드' 를 구분할 수 있어야지 객체지향의 꽃인 다형성을 이해할 수 있을 것입니다. 이번 시간에는 이 두 개의 단어가 정확히 무엇이며 간단한 예시를 들어 설명할 테니 잘 따라와 주길 바랍니다. 일단 이 두개의 사전적 정의부터 봅시다. 메시지는 객체간의 협력관계에서 상호작용할 수 있는 모든 방법을 말합니다. 메서드는 수신된 메시지를 처리하기 위한..
📖 웹 브라우저와 웹 서버 우리가 크롬이나 파이어폭스 같은 브라우저를 실행하여 어느 웹사이트에 들어가기 위해서는 두 가지가 필요하다. 하나는 크롬과 파이어폭스 같은 웹 브라우저, 그리고 나머지 하나는 웹사이트의 정보를 웹 브라우저에게 주는 웹 서버가 필요하다. 웹 브라우저와 웹 서버를 더 넓은 개념으로 보자면 request를 하는 클라이언트(웹 브라우저)와 request를 받으면 response를 하는 서버(웹 서버)가 필요한 것이다. 📖 사용자가 웹 사이트 정보를 받아오는 과정 우리가 웹사이트에 접속하면은 총 3단계를 거쳐 웹 정보를 받아오게 됩니다. 1. 웹사이트의 url을 주소창에 직접적으로 입력하거나 또는 간접적으로 입력하는 방식을 따른다. 2. 웹 브라우저가 url을 읽고 해당 웹 서버에 가서 ..
📚 DP(동적계획법)란? 큰 문제를 작은 문제로 나누어 푸는 것인데 이때 하나의 문제는 한 번만 풀어야 합니다. 동적 계획법에 대해 설명하기 딱 좋은 예시가 있는데 그것은 피보나치수열입니다. 📚 피보나치 수열이란? 수학에서, 피보나치 수(영어: Fibonacci numbers)는 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열이다. 처음 여섯 항은 각각 1, 1, 2, 3, 5, 8이다. ❓ 그러면 피보나치수열의 몇 번째 항을 바로 알 수 있는 코드를 짜려면 어떻게 해야 할까요? 피보나치의 규칙을 살펴보면 된다. 첫 번째와 두 번째는 무조건 1이고 다음 항부터는 Fibo(n) = Fibo(n - 1) + Fibo(n - 2) 이 반복된다. 우리는 이것을 재귀 함수로 쉽게 구현할..
📚 BFS (Breadth-First Search) 란? 한 노드를 시작으로 인접한 모든 정점들을 우선 방문하는 방법이다. 더 이상 방문하지 않은 정점이 없을 때까지 방문하지 않은 모든 정점들에 대해서 넓이 우선 검색을 적용한다. DFS는 인접한 한 노드를 끝까지 탐색했다면 BFS는 인접한 모든 정점을 방문합니다. 이걸 다시 말하면 인접한 노드 중 방문하지 않은 모드 노드들을 저장하고, 가장 처음에 넣은 노드를 꺼내서 탐색하면 됩니다. 처음에 넣은 노드이므로 큐를 이용해서 BFS를 구현할 수 있다. 📋 BFS 전체 과정 BFS의 알고리즘 방식을 설명하면 다음과 같다. 1. 루트 노드를 큐에 넣는다 2. 현재 큐의 노드를 빼서 visited에 추가한다. 3. 현재 방문한 노드와 인접한 노드 중 방문하지 않..
📚 DFS란(Depth First Search)? DFS는 자료의 검색 트리나 그래프를 탐색하는 방법 중 하나이다. 한 노드를 시작으로 인접한 다른 노드를 재귀적으로 탐색해가고 끝까지 탐색하면 다시 위로 와서 다음을 탐색하여 검색한다. DFS는 이름에 나와있는 그대로 끝까지 탐색하는 거에 초점을 맞춥니다. 그래서 그래프의 최대 깊이만큼의 공간을 요구하며, 이는 공간을 적게 쓰는 것입니다. 그러나 최단 경로를 탐색하기는 쉽지 않다. 모든 경로를 탐색하는 것이 아니기 때문입니다. 📋 DFS 전체 과정 DFS의 알고리즘 방식을 설명하면 다음과 같다. 1. 노드를 방문하고 깊이 우선으로 인접한 노드를 방문한다. 2. 또 그 노드를 방문해서 깊이 우선으로 인접한 노드를 방문한다. 3. 만약 끝에 도달했다면 리턴한..
📚 병합 정렬이란? 병합 정렬은 정렬할 배열을 더 이상 쪼개질 수 없는 상태까지 나눈 다음 합치면서 정렬을 하는 방법이다. 📋 병합 정렬 전체 과정 병합 정렬은 2가지 과정을 거친다. 정렬할 배열을 나누고(merge sort) -> 합친다(merge) 📋 merge sort 병합 정렬은 더 이상 쪼개질 수 없는 상태 즉, 쪼개진 배열의 길이가 1이 될 때까지 나눈다. 왜냐하면 배열의 길이가 1이면 그 속에 무슨 숫자가 들어있는 정렬이 모두 완료된 상태이기 때문입니다. 시간복잡도를 계산해가면서 배우는 게 낫기 때문에 시간복잡도 관점에서 과정을 설명해드리겠습니다. 다음과 같은 배열을 정렬해봅시다. 처음 배열의 개수는 N 개라고 합시다. 그다음은 N인 배열을 반으로 나눕니다. 그러면 길이가 N/2개인 배열 2..
📚 그래프 정의 그래프는 연결되어 있는 정점과 정점 간의 관계를 표현할 수 있는 비선형 자료구조이며, 노드(N, node)와 그 노드를 연결하는 간선(E, edge)을 하나로 모아 놓은 자료 구조이다. 그래프는 TCP 라우팅 알고리즘과 페이스북 관계망 등에서 자주 쓰이는 자료구조이다. 🧬 그래프 구조 노드(Node) : 연결 관계를 가진 각 데이터를 의미한다. 정점(Vertex)라고도 한다. 간선(Edge) : 노드 간의 관계를 표시한 선 인접 노드(Adjacent Node) : 간선으로 직접 연결된 노드(또는 정점) 📝 그래프 표현 방법 그래프를 코드로 표현하는 방법은 LinkedList와 Array가 있는데 ☝ LinkedList는 각 정점간의 관계를 노드로 연결하여 표현한다. head를 3으로 가리..