전체 글 111

클린코드 강의 0. 클린코드의 목적

깨끗한 코드는 단순하고 직접적이다. 깨끗한 코드는 잘 쓴 문장처럼 읽힌다. 깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다. 오히려 명쾌한 추상화와 단순한 제어문으로 가득하다. - Object Oriented Analysis and Design with Application의 저자 그래디 부치- 항상 코드를 깨끗한 상태로 유지해야 합니다. 왜냐면, 깨끗한 코드가 있어야 깨끗한 코드를 만들 수 있습니다. 기존에 깨끗한 코드가 있어야 빠르게 코드를 이해하고 깨끗한 코드를 작성할 수 있기 때문입니다. 빨리 가기 위한 단 하나의 방법은 "깨끗한 코드를 항상 유지하는 것"입니다. 우리는 깨끗한 코드를 클린 코드로 부르며 이는 개발자가 지향해야하고 갖춰야하는 기본 덕목입니다. 이 강의는 시리즈 별로 되어있습니다...

코딩/클린코드 2021.09.21

클린코드 강의 4. 리팩토링

이 강의는 시리즈 별로 되어있습니다. 클린코드 강의 0. 클린코드의 목적[클릭] 클린코드 강의 1. 의미 있는 이름[클릭] 클린코드 강의 2. 추상화[클릭] 클린코드 강의 3. 예외[클릭] 클린코드의 세 번째 원칙 예외입니다! 📖 리팩토링이란? 리팩토링은 외부 동작을 바꾸지 않으면서 내부 구조를 개선하는 방법으로, 소프트웨어 시스템을 변경하는 프로세스이다. 소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 만드는 것, 겉으로 보이는 소프트웨어의 기능을 변경하지 않는 것이다. 현업에서의 웹 개발자는 완성된 프로젝트란 없습니다. 프로젝트가 완성되면 요구사항이 생기고 그 요구사항을 완료하면 또 다른 요구사항이 생기기 때문입니다. 우리는 요구사항을 구현해주기 위해서는 코드를 한줄한줄 읽어보면서 이해해야 하고 다..

코딩/클린코드 2021.09.21

클린코드 강의 3. 예외

이 강의는 시리즈 별로 되어있습니다. 클린코드 강의 0. 클린코드의 목적[클릭] 클린코드 강의 1. 의미 있는 이름[클릭] 클린코드 강의 2. 추상화[클릭] 클린코드 강의 4. 리팩토링[클릭] 클린코드의 세 번째 원칙 예외입니다! 📖 예외처리를 해야 하는 이유 (코드는 파이썬이지만 파이썬은 몰라도 다른 언어의 기본 배경지식을 이용해 이해할 수 있다면 상관없습니다.) def buy_foods_for_mom(): go_to_butcher_shop() buy_pork() go_to_supermarket() buy_milk() 위 코드를 보자 그냥 봐서는 정상적으로 동작할 것 같지만 만약 정육점에 고기가 없었다면 어떻게 될까요? 그렇다면 슈퍼 마켓은커녕 집에는 돌아오지 못하고 영원히 정육점에 고기가 생길 때까지..

코딩/클린코드 2021.09.21

클린코드 강의 2. 추상화

이 강의는 시리즈 별로 되어있습니다. 클린코드 강의 0. 클린코드의 목적[클릭] 클린코드 강의 1. 의미 있는 이름[클릭] 클린코드 강의 3. 예외[클릭] 클린코드 강의 4. 리팩토링[클릭] 클린코드의 두 번 째 원칙 추상화입니다! 이것의 구조는 접점(接點)과 그것을 동작시키는 기구로 되어 있다. 손으로 동작시키는 간단한 것에서 전자력(電磁⼒)에 의하여 작동되는 대형까지 매우 많은 방식과 구조가 있다. 전력용에서는 개폐에 수반돼 는 불꽃이나 열에 의한 접점의 소손(燒損)을 피하기 위하여 빨리 끊는 기구를 설치한 것이 있으며, 대형 에는 소호 장치(消弧裝置)를 붙이기도 한다. 신호회로에는 다접점(多接點)의 이것이 사용되며 또 전기 신호로 동작하는 계전기(릴레이) ·진공관 ·반도체 등을 이용한 이것은 논리회..

코딩/클린코드 2021.09.21

클린코드 강의 1. 의미 있는 이름

이 강의는 시리즈 별로 되어있습니다. 클린코드 강의 0. 클린코드의 목적[클릭] 클린코드 강의 2. 추상화[클릭] 클린코드 강의 3. 예외[클릭] 클린코드 강의 4. 리팩토링[클릭] 클린코드의 첫 번 째 원칙 의미 있는 이름입니다! 📖 의미 있는 이름이란? 변수 이름을 짓는 것은 프로그래머에 있어서 대단히 중요한 문제입니다. 한 번 지은 이름이 10번이고 수십 번이고 쓰이기 때문입니다. (코드는 파이썬이지만 파이썬은 몰라도 다른 언어의 기본 배경지식을 이용해 이해할 수 있다면 상관없습니다.) mca = 3 다음 코드를 봅시다. 무엇을 설명하는 것 같아 보이나요? 만약 제가 이런 코드를 작성한다면, 6개월 후에 mca라는 단어를 보고 원래 의미를 떠올릴 수 있을까? 하물며, 이 코드를 본 다른 개발자는 무..

코딩/클린코드 2021.09.21

[알고리즘] DP (Dynamic Programming)

📚 DP(동적계획법)란? 큰 문제를 작은 문제로 나누어 푸는 것인데 이때 하나의 문제는 한 번만 풀어야 합니다. 동적 계획법에 대해 설명하기 딱 좋은 예시가 있는데 그것은 피보나치수열입니다. 📚 피보나치 수열이란? 수학에서, 피보나치 수(영어: Fibonacci numbers)는 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열이다. 처음 여섯 항은 각각 1, 1, 2, 3, 5, 8이다. ❓ 그러면 피보나치수열의 몇 번째 항을 바로 알 수 있는 코드를 짜려면 어떻게 해야 할까요? 피보나치의 규칙을 살펴보면 된다. 첫 번째와 두 번째는 무조건 1이고 다음 항부터는 Fibo(n) = Fibo(n - 1) + Fibo(n - 2) 이 반복된다. 우리는 이것을 재귀 함수로 쉽게 구현할..

이론/알고리즘 2021.09.19

자바스크립트 this. 이것은 무엇인가

📚 this(자기 참조)란? this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수 입니다. this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메소드를 참조할 수 있습니다. 에서 이웅모 저 즉 자바스크립트 내에서 this는 '누가 나를 불렀느냐'를 뜻한다고 합니다. 그래서 this를 소환했을 때의 어떤 실행 컨텍스트에서 불러내었는지를 알면 이해하기 쉬워집니다. 📋 실행 컨텍스트에 따라 달라지는 this this는 다음 실행 컨텍스트에 따라 달라집니다. 전역 공간에서 -> window/global 함수 내부에서 -> window/global 메소드 호출 시 -> 메소드 호출 주체 callback함수에서 -> 함수 내부에서와 동일 생성자 함수에서 -> 인..

[알고리즘] BFS(Breadth-First Search)

📚 BFS (Breadth-First Search) 란? 한 노드를 시작으로 인접한 모든 정점들을 우선 방문하는 방법이다. 더 이상 방문하지 않은 정점이 없을 때까지 방문하지 않은 모든 정점들에 대해서 넓이 우선 검색을 적용한다. DFS는 인접한 한 노드를 끝까지 탐색했다면 BFS는 인접한 모든 정점을 방문합니다. 이걸 다시 말하면 인접한 노드 중 방문하지 않은 모드 노드들을 저장하고, 가장 처음에 넣은 노드를 꺼내서 탐색하면 됩니다. 처음에 넣은 노드이므로 큐를 이용해서 BFS를 구현할 수 있다. 📋 BFS 전체 과정 BFS의 알고리즘 방식을 설명하면 다음과 같다. 1. 루트 노드를 큐에 넣는다 2. 현재 큐의 노드를 빼서 visited에 추가한다. 3. 현재 방문한 노드와 인접한 노드 중 방문하지 않..

이론/알고리즘 2021.09.17

[알고리즘] DFS (Depth First Search)

📚 DFS란(Depth First Search)? DFS는 자료의 검색 트리나 그래프를 탐색하는 방법 중 하나이다. 한 노드를 시작으로 인접한 다른 노드를 재귀적으로 탐색해가고 끝까지 탐색하면 다시 위로 와서 다음을 탐색하여 검색한다. DFS는 이름에 나와있는 그대로 끝까지 탐색하는 거에 초점을 맞춥니다. 그래서 그래프의 최대 깊이만큼의 공간을 요구하며, 이는 공간을 적게 쓰는 것입니다. 그러나 최단 경로를 탐색하기는 쉽지 않다. 모든 경로를 탐색하는 것이 아니기 때문입니다. 📋 DFS 전체 과정 DFS의 알고리즘 방식을 설명하면 다음과 같다. 1. 노드를 방문하고 깊이 우선으로 인접한 노드를 방문한다. 2. 또 그 노드를 방문해서 깊이 우선으로 인접한 노드를 방문한다. 3. 만약 끝에 도달했다면 리턴한..

이론/알고리즘 2021.09.17