전체 글
주소 바인딩
주소 바인딩(Address Binding) 주소 바인딩(Address Binding) 방식에 대해서 배워보자. 논리 주소와 물리 주소 프로세스는 실행을 위해 메모리에 적재되면 프로세스를 위한 독자적인 주소공간이 생긴다. 이 주소를 논리적 주소(logical address)라고 한다. 논리적 주소는 각 프로세스마다 독립적으로 할당된다. 즉, 프로세스의 메모리 영역(코드, 데이터, 힙, 스택)에 할당되는 주소들을 논리 주소라고 부른다. 따라서, 웹 애플리케이션에서 작성한 코드들이 프로세스의 메모리 영역에 할당될 것이며, 각 논리 주소가 부여될 것이다. 그리고 웹 애플리케이션이 실행되어 메모리에 적재되면 기억장치 메모리의 주소도 있을텐데, 그곳에서 할당되는 주소를 물리 주소(physical address)라고..
[BOJ 18406] 럭키 스트레이트
럭키 스트레이트 BOJ 18406 : 럭키 스트레이트 구현 public class Main { private static String N; private static int left = 0; private static int right = 0; public static void main(String[] args) { input(); solution(); } private static void input() { Scanner sc = new Scanner(System.in); N = sc.nextLine(); } private static void solution() { String[] numbers = N.split(""); int middle = numbers.length / 2; for (int i ..
교착상태와 기아상태
교착상태(Deadlock) 교착상태에 대해서 배워보자. 만약에, 프로세스 동기화에 대한 지식이 없다면 해당 링크를 통해서 배우고오자. 교착상태란 Wikipedia - 교착상태란 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태를 가리킨다. 예를 들어 하나의 사다리가 있고, 두 명의 사람이 각각 사다리의 위쪽과 아래쪽에 있다고 가정한다. 이때 아래에 있는 사람은 위로 올라 가려고 하고, 위에 있는 사람은 아래로 내려오려고 한다면, 두 사람은 서로 상대방이 사다리에서 비켜줄 때까지 하염없이 기다리고 있을 것이고 결과적으로 아무도 사다리를 내려오거나 올라가지 못하게 되듯이, 전산학에서 교착 상태란 다중 프로그래밍 환경에서 흔히 발생할 수 있는..
깃허브 사용 방법
깃허브 사용 방법(GitHub Tutorials) 대부분의 개발자들은 원격 저장소인 GitHub 를 한 번쯤은 들어봤을 것이다. GitHub 를 사용하면 프로젝트에 대한 형상관리가 가능하며, 개인 포트폴리오를 올리고 관리할 수 있으며, GitHub 를 통한 오픈소스 프로젝트에도 기여할 수 있다. GitHub 의 가장 큰 특징은, 오픈 소스 공개 프로젝트에 무료로 Git 저장소를 호스팅한다는 점이다. 이 글(깃허브 사용 방법(GitHub Tutorials))을 검색하여 보는 대부분의 독자님들은 개발자를 꿈꾸는 학생이거나, 주니어 개발자일 것이다. 본인이 개발에 관심이 있고, 취업/이직을 잘 하고싶다면 가장 먼저 해야할 것은 깃허브 계정을 생성하는 것이다. 개발자를 직업으로 삼고자하면 깃허브는 거의 필수라고..
위상 정렬
위상 정렬(Topology Sort) 위상 정렬(Topology Sort)은 순서가 정해져 있는 일련의 작업을 차례대로 수행해야 할 때 사용할 수 있는 알고리즘이다. 즉, 방향 그래프의 모든 노드를 방향성에 거스르지 않도록 순서대로 나열 하는 것이다. 사용 예시 선수과목을 고려한 학습 순서 설정 A 과목을 수행하고 B 과목을 수강하는 것을 권장할 때, A, B 를 각각 노드로 표현하고 A -> B 로 가는 방향을 갖는 간선을 그린다. 즉, 그래프 상에서 선, 후 관계가 존재하면 위상 정렬을 수행하여 모든 선후 관계를 지키는 전체 순서를 계산할 수 있다. 진입 차수(Indegree) 진입 차수(Indegree)란 특정한 노드로 들어오는 간선의 개수를 의미한다. A -> B, B -> C, D -> B 의 ..
신장 트리와 크루스칼 알고리즘
신장 트리(Spanning Tree)와 크루스칼 알고리즘(Kruskal Algorithm) 신장 트리(Spanning Tree)와 크루스칼 알고리즘(Kruskal Algorithm)에 대해서 배워보자. 신장 트리 신장 트리(Spanning Tree)란 하나의 그래프가 있을 때 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프를 의미한다. 크루스칼 알고리즘 크루스칼 알고리즘은 최소 신장 트리(Minimum Spanning Tree, MST)를 구하기 위해서 사용되는 알고리즘 이다. 크루스칼 알고리즘은 그리디(Greedy) 알고리즘으로 분류된다. 크루스칼 알고리즘을 사용하면 가장 적은 비용으로 모든 노드를 연결할 수 있다. 크루스칼 알고리즘을 구현할 때에는 Union-Find 알고리즘을 사용하므로,..
TCP/IP Layer 와 Layered Architectures 에 대한 이해
Layered Architectures Network System 의 Layered Architectures 와 OSI 7 Layer, TCP/IP Layer, TCP 의 연결 과정 및 종료 과정, PORT, IP, UDP 등에 대해서 배우 실 수 있습니다. 인터넷 프로토콜 스택 5 Layer Protocol Stack 다양한 계층의 프로토콜을 모두 합하여 프로토콜 스택이라고 한다. Protocol 프로토콜은 둘 이상의 통신 개체 간에 교환되는 메시지 포맷과 순서뿐 아니라, 메시지의 송수신과 다른 이벤트에 따른 행동들을 정의한다. Ex. 발표자(A)와 발표를 듣는 스터디원 분(O)들 사이에는 어떠한 프로토콜이 존재할까? 발표자 : (프로토콜 설명 중) 질문 있습니까? Others : 네 or 손을 드는 ..
전략 패턴과 템플릿 콜백 패턴
전략 패턴(Strategy Pattern) 이전 시간에 템플릿 메서드 패턴을 이용하여 AI Seller 의 발주 자동화를 구현해봤다. 하지만 템플릿 메서드 패턴의 상속으로 인한 결합도 증가 및 서브 클래스에서 불필요한 메서드 구현 등의 단점으로 인해 소스를 수정해야하는 상황이다. 이번 시간에 전략 패턴(Strategy Pattern)을 이용하여 AI Seller 의 발주 자동화 기능을 좀 더 유연하게 구현해볼 것이다. 전략 패턴 구현 예제는 '템플릿 메서드 패턴'에서 다룬 예제를 그대로 사용합니다. 디자인 원칙과 정의 디자인 원칙 상속 보다는 구성(Composition)을 사용하라. 정의 전략 패턴은 한 유형의 알고리즘을 보유한 상태에서 런타임에 적절한 알고리즘을 선택하는 기법이다. 전략을..