투 포인터두 개의 포인터를 사용하여 문자열이나 정렬 된 배열에서 원하는 값을 찾거나 구간 합을 구할 때 사용하는 알고리즘입니다.병합정렬(merge sort)의 counquer 영역(인접한 부분배열끼리 정렬하여 합침) 기초가 되는 알고리즘입니다.리스트에 순차적으로 접근해야 할 때, 두 개의 점의 위치를 기록하면서 처리합니다.슬라이딩 윈도우와 유사하나, 고정 된 구간이 아닌 가변적인 구간을 탐색한다는 차이가 있습니다. c.f> 슬라이딩 윈도우?투 포인터처럼 구간을 흝으면서 지나간다는 공통점이 있으나, 슬라이딩 윈도우는 어느 순간에도 구간의 넓이가 동일하다는 차이가 있습니다. 투 포인터 적용하기두 수의 합이 target을 만족하는 두 수를 찾는 문제가 주어졌을 때를 가정하여 투 포인터를 적용해 보겠습니다.ta..
4장시스템이 복구할 수 있는 오류와 복구할 수 없는 오류를 구분한다.신속하게 실패하고 분명하게 실패한다오류를 전달하기 위한 다양한 기법과 선택을 위한 고려 사항복구 가능성복구 가능한 오류네트워크 오류자신의 코드가 의존하는 서비스에 연결하지 못한 경우 사용자가 몇 초 기다렸다가 다시 시도하거나, 네트워크 연결을 확인하도록 요청할 수 있다.중요하지 않은 작업 오류서비스 사용에 대한 어떤 통계를 기록하는 부분에서 오류가 발생한다면 실행을 계속해도 무방하다.복구할 수없는 오류오류가 발생하고 시스템이 오류를 복구할 수 있는 합리적인 방법이 없는 경우코드와 함께 추가되어야 하는 리소스가 없다.다음 예와 같이 어떤 코드가 다른 코드를 잘못 사용한다.잘못된 입력 인수로 호출일부 필요한 상태를 사전에 초기화하지 않음신속..
3장 다른 개발자와 코드 계약자신의 코드와 다른 개발자의 코드개발자들의 코드는 서로 의존하게 된다.여러 가지 다른 기능을 위해 작성한 코드가 재사용되고 있음을 알 수 있다.요구사항이 항상 변한다는 점을 인지해야 한다.고품질 코드를 작성할 때 가장 중요한 고려 사항 중 하나는 다른 개발자가 변경하거나 코드와 상호작용할 때 발생할 수 있는 문제를 파악하는 것이다.아래 3가지를 고려하는 것이 유용하다자신에게 명백하다고 해서 다른 사람에게도 명백한 것은 아니다.다른 개발자는 무의식중에 여러분의 코드를 망가뜨릴 수 있다.시간이 지남에 따라 자신의 코드를 기억하지 못한다.자신에게 분명하다고 해서 다른 사람에게도 분명한 것은 아니다코드가 어떻게 사용되어야 하는지, 무엇을 하는지, 왜 그 일을 하고 잇는지를 설명하는 ..
Minimum Spanning Tree : 최소 신장 트리사용된 간선들의 가중치 합이 최소인 트리를 뜻합니다.그래프 내의 모든 정점을 포함하는 트리입니다.최소 신장 트리라고 하며, 그래프의 최소 연결 부분 그래프입니다.간선의 수가 가장 적음n개의 정점을 가지는 그래프는 (n-1)개의 간선으로 연결 됨그래프에서 일부 간선을 선택해서 만드는 트리입니다.최소 신장 트리의 특징DFS, BFS를 사용하여 그래프에서 신장 트리를 탐색할 수 있습니다.하나의 그래프에는 많은 신장 트리가 존재하며, 그 중 가장 작은 가중치의 트리가 최소 신장 트리입니다.사이클이 포함되어서는 안됩니다.이전의 신장 트리와는 상관없이 무조건 최소 간선만을 선택합니다.최소 신장 트리의 사용 사례도로 건설, 전기 회로, 통신, 배관 등 최소의 ..
2장 추상화 계층널값 및 의사코드 규약널값에 대한 규약을 지정하지 않으면, NullPointerException, NullRefrenceException, Cannot read property of null과 같은 에러를 발생할 수 있다.이를 위해 널 안전성과 보이드 안전성에 대한 개념이 생겼다.자바나 c++에서는 옵셔널 타입을 통해서 널 안전성을 보장한다.추상화 계층 및 코드 품질의 핵심 요소가독성모든 세부 사항을 이해하는 것은 불가능하지만, 높은 계층의 추상화를 이해하고 사용하기 쉽게 해야한다.모듈화구현 세부 사항이 외부로 노출되지 않도록 보장할 때, 다른 계층이나 코드의 일부에 영향을 미치지 않고 계층 내에서만 구현을 변경하기가 매우 쉬워진다.재사용성 및 일반화성테스트 용이성코드의 계층추상화 계층을..
좋은 코드, 나쁜 코드 [1장] 코드 품질고품질 코드신뢰할 수 있는 코드유지보스가 용이버그가 적은 소프트웨어를 생산요구사항에 유연하게 대처**저품질 코드**요구사항 에 대규모의 코드 변경 및 리팩터링이 필요시스템이 미리 정의되지 않은 상태에 놓이고 손상될 가능성이 있음코드는 어떻게 소프트웨어가 되는가코드는 일반적으로 엔지니어가 작성하자마자 실제로 실행되는 소프트웨어가 되지 않는다.코드가 의도한 대로 작동하고 기존의 기능이 여전히 잘 동작하기 위해서 다양한 과정과 점검이 이루어진다.이러한 과정을 소프트웨어 개발 및 배포 프로세스라고 한다.코드베이스 : 소프트웨어를 빌드할 수 있는 코드가 저장된 저장소git, subversion, perfore와 같은 형상 관리 시스템으로 관리됨코드 제출 : 코드 커밋, 풀..