[Clean Code][TIL] 깨끗한 코드
이 포스트는 로버트 C.마틴의 Clean Code 속 추천사부터 1장까지(1p ~ 20p) 내용에 대한 후기입니다. 기억하고 싶은 내용 모드럽의 추천사 중 다음과 같은 내용이 있습니다. “집 주인이라면 누구나 알겠지만, 지속적인 개선과 보살핌은 결코 끝나지 않는다.” (추천사 xxvi) 이 내용이 프로그램의 유지 보수 작업에 대한 프로그래...
이 포스트는 로버트 C.마틴의 Clean Code 속 추천사부터 1장까지(1p ~ 20p) 내용에 대한 후기입니다. 기억하고 싶은 내용 모드럽의 추천사 중 다음과 같은 내용이 있습니다. “집 주인이라면 누구나 알겠지만, 지속적인 개선과 보살핌은 결코 끝나지 않는다.” (추천사 xxvi) 이 내용이 프로그램의 유지 보수 작업에 대한 프로그래...
크로아티아 알파벳 문제 크로아티아 알파벳 문제는 입력 받은 문자열에서 특정 문자열을 탐색하는 문제입니다. 처음 코드를 작성할 때, 아래 while()문 처럼 코드를 작성하였습니다. vector<string> croatia_alphabet{"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="}; stri...
나쁜 코드 다양한 프로젝트를 진행하면서 어려웠던 것 중 하나가 좋은 코드를 작성하는 것 이였습니다. 설계 단계에서는 매번 객체지향의 SOLID 규칙을 지키며 좋은 코드를 작성하려고 하였으나 마무리는 위 코드처럼 정리되지 않은 코드로 작성되었습니다. 이러한 작성 방법은 파일과 클래스, 메소드, 변수 등 네이밍 규칙이 매번 다르고 현재 문제점만...
이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저) 를 참고해 작성한 포스트입니다. 정렬은 데이터 집합을 특정한 기준 에 따라 순서대로 나열하는 작업입니다. 특정한 기준으로는 숫자의 내림차순과 오름차순, 문자열의 길이 혹은 각 문자의 합 등 사용자의 필요에 따라 여러 가지가 될 수 있습니다. 정렬 알고리즘은 알고리즘의 효율성을 표...
이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저) 를 참고해 작성한 포스트입니다. Greedy(탐욕적인) 알고리즘 그리디(Greedy) 알고리즘은 단순하지만 강력한 문제 해결 방법입니다. Greedy 의 사전적 의미는 “탐욕스러운, 욕심이 많은” 이라는 뜻으로 그리디 알고리즘 대신 탐욕법, 탐욕 알고리즘 등의 이름으로 부르기도 ...
이전 문자열 매칭 포스트인 KMP 알고리즘 O(M + N)과 동일하게 특정 문자열을 찾고자 할 때 사용되는 알고리즘인 라빈카프 알고리즘을 이번 포스트에서 설명해보겠습니다. 라빈카프 알고리즘에서 해싱(Hashing) 사용 방법 라빈카프 알고리즘은 해싱으로 문자열을 탐색하는 알고리즘입니다. 문자열 M에서 문자열 N을 찾는 상황에서 라빈카프 알고리즘...
길이가 100’000 인 문자열에서 길이가 10 인 특정 문자열을 찾으려면 어떻게 해야 할까요? 이번 포스트에서는 문자열 탐색을 위한 알고리즘은 무엇이 있는지 알아보겠습니다. 하나씩 전부 비교하기 O(M x N) 구현이 가장 간단한 방법은 찾는 문자열을 100’000 자에서 한 글자씩 이동하면서 전부 비교하는 방법 입니다. 100’000 자를...
RDBMS의 한 종류인 MySQL 에서 2개 이상의 테이블을 JOIN 하려고 할 때, 몇 가지 규칙이 존재합니다. 이번 포스트에서는 MySQL 에서 사용하는 INNER JOIN 절에 대해 알아보겠습니다. INNER JOIN 절에서 INNER 을 생략하여 JOIN 만 사용할 수 있습니다. 테이블들의 교집합 JOIN 절은 2개 이상의 테이블...
Protoc 는 Protobuf 파일을 입력과 함께 전달받은 명령어로 특정 언어로 컴파일된 파일을 출력합니다. 이번 포스트에서는 Protoc 를 설치하는 방법에 대해서 알아보겠습니다. Protoc 를 설치하는 방법은 vcpkg, github 등 여러가지 방법이 있습니다. vcpkg 를 사용해서 protoc 설치하기 vcpkg searc...
async 한정자 이번 포스트에서는 비동기와 병렬에서 설명한 비동기를 C#에서 직접 사용해 보겠습니다. C# 에서는 비동기 프로그래밍을 위해 async 한정자와 await 키워드가 존재합니다. C# 컴파일러가 async 한정자를 만나면 반환을 기다리지 않고 다음 다음 코드를 실행할 수 있도록 컴파일합니다. async 한정자를 사용하는 메서드는 ...