디자인 패턴
·
cs/객체지향
생성 패턴싱글톤 패턴클래스의 인스턴스가 하나만 생성하도록 보장하고, 그 인스턴스에 대한 전역적인 접근법을 제공한다. 코드public class SettingsManager { // 1. 클래스 로딩 시점에 유일한 인스턴스를 미리 생성 private static final SettingsManager instance = new SettingsManager(); // 2. 외부에서 생성자를 호출할 수 없도록 private으로 선언 private SettingsManager() { // 설정 로딩 등 초기화 코드 } // 3. 외부에서 유일한 인스턴스에 접근할 수 있는 통로 제공 public static SettingsManager getInstance() {..
비트마스킹(Bitmasking)
·
cs/알고리즘
비트마스킹은 메모리와 연산의 효율성을 위해서 정수와 비트연산자를 사용하여 bool 타입의 집합을 표현하거나 상태를 표현하는 구현 기법이다. 비트 연산자비트 연산(bitwise operation)을 하기 위해서는 비트 연산자에 대한 지식이 필요하다. 연산두 번째 줄은 bool 집합을 가리키는 정수를 2진수로 표현한 값이다. 오른쪽부터 0번째 인덱스로 본다면 왼쪽으로 갈 수록 인덱스 번호는 증가한다. 각 비트에 대해서 1이면 true 이거나 그 비트에 대한 연관된 값이 on 이다. 반대로 0이면 false 이거나 그 비트에 대한 연관된 값이 off이다. 1. 집합 정의0~32767의 숫자 범위 -> 15 비트 마스크로 해당 숫자 표현 가능2의 거듭 제곱 -> 하나의 원소만 포함된 집합2 의 거듭제곱 - ..
그래프
·
cs/자료구조
용어그래프 자료구조는 Vertex(정점, node) 와 Edge(간선, line) 으로 이루어진다. 그래프는 방향성의 유무와 가선 가중치의 유무에 따라 종류가 나뉠 수 있다. Path그래프의 Path 는 간선들로 이어진 연속된 정점들의 집합이다. 이 때, 반복된 Vertex(정점)이 없는 path를 Simple Path(단순 경로) 라고 부른다. Connect(연결)무방향 그래프가 Connect 되어 있다는 것은 모든 정점들에 대한 하나의 Path 가 있다는 것이다.무방향 그래프 C가 무방향 그래프 G의 Connect Component 가 되려면 C는 G의 하위 그래프이고 C는 connect되어야 하며, G의 connect 되지 않은 서브 그래프가 C를 서브 그래프로 볼 수 있어야 한다.SCC(Stron..
Stack, Queue
·
cs/자료구조
Stack스택 ADT 의 주요 연산은 삽입 시 collection의 top(위)에 추가하는 push 연산과 삭제 시 collection 의 top(위)에 값을 삭제하는 pop d연산이 있다. 이 연산으로 인해 우리는 Stack(스택)을 LIFO(Last In First out) 자료구조라고 부른다. 디자인 선택스택 자료구조를 디자인 하기 위해 Linked List 혹은 동적 Array 를 활용할 수 있다.LinkedList를 활용하는 경우 push 연산 시 head 에 추가하고(insert(v, i)) pop 연산 시 head를 제거하는(remove(0)) 연산을 통해 O(1) 시간 복잡도로 구현할 수 있다.동적 배열을 활용하는 경우 배열의 마지막 index 에 push 연산 시 추가, pop 연산 시 ..
Linked List
·
cs/자료구조
List ADTList 를 구현하기 위한 자료구조는 Linked List 혹은 Array 로 구현된다. 이번 포스트에서는 Linked List 에 대해서 다룬다.구조LinkedList 는 메모리에 연속적이지 않은 데이터를 다루기 위한 자료구조이다.(기본 개념)Linked List 의 Vertex 는 item(아이템) 과 next(Pointer, 주소) 로 구성된다. next는 다음 번째의 vertex 를 가리키는 값이다.Linked List 의 변형(추가)Linked List 를 구현하는 방법에 따라서 모습이 조금씩 달라진다.가장 앞, 가장 뒤의 Vertex 를 가리키는 포인터를 갖는 Linked Listcircular(순환) 하는 Linked List가장 앞에 dummy 값이 Linked List데이터..
객체의 특징
·
cs/객체지향
객체를 정의할 때 상태가 아닌 행동에 집중해라 객체는 하나의 개별적인 실체로 식별 가능한 물리적이고 개념적인 실체라면 객체가 될 수 있다. 객체를 효과적으로 설명하기 위해 상태(status), 행위(behavior), 식별자(identity)를 가진 실체로 본다. 상태상태가 등장한 이유는 다음과 같다.현재 행위의 결과를 설명하기 위해서는 과거에 발생한 행동의 이력을 알아야 한다. 모든 행동의 이력을 기록할 수는 없으니 상태를 이용한다. 객체의 상태는 단순한 값과 객체의 조합으로 표현된다. 객체의 상태를 구성하는 모든 특징을 통틀어 객체의 프로퍼티(property)라고 한다. 프로퍼티는 변경되지 않고 고정되기 때문에 '정적'이다. 반면 프로퍼티 값(property value)는 시간에 흐름에 따라 변경되기..
객체지향에서의 역할, 책임, 협력
·
cs/객체지향
객체는 상태와 행위를 갖는 독립적인 개체이다. 객체 지향 프로그래밍(Object-Oriented Programming)은 객체를 이용하여 어플리케이션 문제를 정의하고, 기능을 설계하고 구현하는 프로그래밍 방식이다. 여기서 객체 지향의 의미를 역할, 책임, 협력 관점에서 설명한다. 사람들은 일상생활에서 특정한 역할(Role)을 부여 받는다. 카페에서 손님을 대응하는 캐시어 와 주문이 들어오는 커피를 제작하는 바리스타를 예시로 들 수 있다. 각 역할들은 책임(Responsibility)이라는 개념을 내포하고 있다. 캐시어는 손님으로부터 주문을 받는 책임이 있고 결제를 도와주는 책임이 있고 커피가 나왔으면 손님에게 전달할 책임이 있다. 바리스타도 주문이 들어온 커피를 제작할 책임이 있다. 사람들은 독립적인 존..