목록프로그래밍👩🏻💻 (110)
suyeonme
그래프(Graph)란? 그래프는 정점(vertice)과 간선(edge)으로 이루어진 자료구조로, 트리(tree)도 그래프의 종류 중 하나이다. 하지만 그래프의 경우 정점마다 간선이 있거나 없을 수 있으며 루트 노드, 부모-자식이라는 개념이 존재하지 않는다. 그래프 사용 예시 포털 사이트의 검색 엔진, facebook의 네트워킹, 지하철 노선도등 그래프 관련 용어 용어 설명 정점(vertice) 노드(node)라고도 하며 데이터가 저장된다. 간선(edge) 링크(arcs)라고도 하며 노드간의 관계를 나타낸다. 인접 정점(adjacent vertex) 간선에 의해 연결된 정점이다. 단순 경로(simple-path) 경로 중 반복되는 정점이 없는것, 즉 동일한 간선을 자나가지 않는 경로이다. 차수(degree..
운영 체제의 역사 흐름 1940년 최초의 컴퓨터 에니악 등장(미사일 탄도를 계산하기 위해서 제작) 18000개의 진공관을 전선으로 연결하여 논리회로를 구성했다.(hard writing) 다른 작업을 하기 위해서는 전선을 일일히 다시 연결해야했다. 1950년 천공 카드리더 사용 OMR(Optical Mark Reader)의 원조 일괄 처리 시스템(batch processing system) 한번에 한작업만 할 수 있다. 작업에 필요한 프로그램과 데이터를 동시에 입력해야한다. 모든 작업을 한꺼번에 처리해야하고 프로그램 실행 중간에 사용자가 데이터를 입력하거나 수정할 수 없다. 단순 계산 위주의 작업만 가능 라인 프린터 사용 1960년 키보드, 모니터 등장 대화형 시스템(Interactive System) 작..
터미널에 alias(별칭)를 지정하여 자주 사용하는 커맨드를 빠르게 사용할 수 있다. 설정 방법 터미널에 vi ~/.zshrc 입력 사용할 alias 입력 source ~/.zshrc 입력하여 변경 사항 저장 나는 아래와 같이 alias를 등록하였다. # Port alias kill9999='kill -9 $(lsof -t -i tcp:9999)' alias nsl='netstat -na | grep LISTEN | grep $1' alias lsof8080='lsof -i:8080' alias lsof8082='lsof -i:8082' # Git alias gitb='git branch' alias gitl='git log' alias gits='git status' alias gitc='git che..
탐욕 알고리즘(Greedy Algorithm)이란? 선택의 순간마다 당장 눈 앞에 보이는 최적의 해답(local optional solution)을 찾으며, 이를 바탕으로 최종 문제의 해답(global optional solution)에 도달하는 방법이다. 매 순간의 선택은 지역적으로는 최적의 해답이지만, 그 선택들을 반복하여 얻은 최종적인 해답이 최적이라는 보장은 없다. 항상 최적의 해답을 찾는 것은 아니지만, 최적에 근사한 값을 빠르게 찾을 수 있다. 따라서 근사 알고리즘(approximation algorithm)으로 사용할 수 있다. 동적 계획법보다 효율적이지만, 동적 계획법처럼 반드시 최적의 해를 구한다는 보장을 하지 못한다. 탐욕 알고리즘 조건 아래 두가지 조건을 만족하는 경우, 탐욕 알고리즘..
코드를 작성하다가 폴더 이름에 대소문자 철자 오류가 있는 것을 발견하였다. 따라서 폴더명을 올바르게 고치고 변경 내용을 push하였다. 변경 사항을 반영하기 위하여, 젠킨스 빌드잡을 돌렸는데 빌드잡이 실패하였다. 하지만 내 로컬 환경에서는 정상적으로 작동하였다. 젠킨스 빌드 실패 젠킨스 빌드 실패 로그는 아래와 같았다. 내가 변경한 모듈의 경로를 찾지 못해서 Module not found 에러가 발생한 것이였다. 확인해보니 해당 모듈을 import하는 경로에는 문제가 없었다. 젠킨스 빌드 실패 원인 알고보니 원인은, vscode에서 직접 폴더 이름의 대소문자를 변경한 탓이였다. 나의 로컬 환경에는 변경사항이 적용이 되었지만, 해당 변경사항을 push했을 때, 원격 저장소에 있는 폴더명과 나의 로컬 환경의..
상속(Inheritance) 상속의 특징 코드를 재사용하여 중복을 줄일 수 있다. 따라서 유지보수가 쉬워진다. 상위 클래스와 하위 클래스가 is-a관계일 때 사용한다. (e.g. 동물 > 포유류 > 강아지) public class Mammals extends Animal { protected void breath() { ... } protected void birth() { ... } } 상속의 단점 상속은 단일 패키지에서 사용해야만 안전하다. 상위 클래스의 코드가 수정되면 하위 클래스의 코드도 수정되어야 하는 경우가 많다. (재정의 메소드) 상속은 캡슐화를 위반한다(하위 클래스가 상위 클래스에 구체적인 구현 내용을 의존하기 있기 때문) 조합(Composition) 상위 클래스를 상속하는 대신에 상위 클..
최소 지식 원칙(Principle of Least Knowledge)이란? 최소 지식 원칙에 따르면 객체 사이의 상호작용은 될 수 있으면 아주 가까운 '친구'사이에만 허용하는 편이 좋다. 즉 상호 작용하는 객체들은 다른 객체가 어떤 상태를 갖고 있는지 속사정을 몰라야한다. 여러개의 dot(.)을 사용하지 말라는 법칙으로 많이 알려져있다. * 데메테르 법칙(Law of Demeter), Don't talk to strangers(낯선이에게 말하지 마라) 모두 같은 의미이다. 최소 지식 원칙은 객체 지향 프로그래밍에서 기본적이지만 중요한 개념이다. 최소 지식 원칙을 준수할 경우, 여러 클래스가 복잡하게 얽혀있어서 시스템의 한 부분을 변경했을 때 다른 부분까지 줄줄이 고쳐야하는 상황을 방지할 수 있다. 최소 ..
헤드 퍼스트 디자인 패턴을 읽고 정리한 내용입니다. 어댑터 패턴(Adapter Pattern)이란? 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환한다. 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와준다. 어댑터 패턴의 특징 어댑터를 새로 바뀐 인터페이스로 감쌀 때는 객체 구성(composition)을 사용한다. 이러한 접근법은 어댑티의 모든 서브 클래스에 어댑터를 쓸 수 있다는 장점이 있다. 클라이언트를 특정 구현이 아닌 인터페이스에 연결한다. 서로 다른 백엔드 클래스로 변환시키는 여러 어댑터를 사용할 수도 있다. 이렇게 인터페이스를 기준으로 코드를 작성하기에 타깃 인터페이스만 유지한다면 나중에 다른 구현을 추가하는 것이 가능하다. 클라이언트에서 어..