본문 바로가기

전체 글

(63)
[리팩토링] 분류코드를 클래스로 치환 분류코드를 int 같은 기본타입이라면 두가지 이유로 문제가 생긴다. 첫 번째로 분류 코드 범위 밖의 값이 사용되는 것이고 두번째로는 다른 분류 코드와 착각할 수 가 있ㄷ는 것이다. 타입이 판별되지 않거나 타입 세이프가 아닌 문제가 생긴다. 그런 문제를 해결하기 위해서 분류 코드를 클래스로 치환하는 리팩토링이 필요하다. 방법 1. 새로운 클래스를 작성해 기존 인터페이스(API)에서 사용 2. 새로운 인터페이스로 전환 3. 기존 인터페이스 삭제 결과적으로 장점으로는 분류 코드의 타입 판별이 가능해지고 단점으로는 클래스 개수가 늘어나는 것이다. public class Item { public static final int TYPECODE_BOOK = 0; public static final int TYPECO..
연결리스트(linked list) 연결리스트는 차례로 연결된 노드를 표현해주는 자료구조이다. 단방향 연결리스트에서 각 노드는 다음 노드를 가리킨다. java로 구현한 간단한 linked List class Node { Node next = null; int data; public Node(int d) { data = d; } void appendToTail(int d) { Node end = new Node(d); Node n = this; while (n.next != null) { n = n.next; } n.next = end; } } c로 구현한 연결리스트 typdef struct Node { int data; struct Node* next; // 다음 노드의 주소를 저장할 포인터 }Node;
아스키코드와 유니코드 아스키(ASCII) American Standard Code for Information Interchage 아스키코드는 7비트, 128개의 고유한 값만 사용한다. 통신 에러 검출을 위해 사용하기 때문이다. 유니코드 아스키코드에 모든 언어를 담을 수 없어서 용량을 확장한 유니코드가 등장한다. 처음에는 65536개, 2byte (2의 16승) 으로 표현했다.
트라이란? 트라이(Trie)란? 문자열에 특화된 자료 구조인 트라이(Trie)는 문자열 집합을 표현하는 자료구조이며, 원하는 원소를 찾는 작업을 O(n)에 해결할 수 잇는 자료구조이다. 트라이의 단점 공간 복잡도가 치명적인 단점이다. O(포인터의크기 * 포인터 배열 개수 * 트라이에 존재하는 총 노드 수) public class TrieNode { private Map childNodes = new HashMap(); private boolean isLast; Map getChildNodes() { return this.childNodes; } boolean isLast() { return isLast; } void setisLast(boolean isLast) { this.isLast = isLast; } } p..
코틀린 Contracts 코틀린 Contracts 기능은 코틀린 1.3에서 소개된 기능입니다. 컴파일러를 돕는 역할로 실험적인 기능입니다. Initailizing in Lambdas fun calledOneTimeOnly(run: () -> Unit) { // do something } fun initValue() { val intValue: Int calledOneTimeOnly { // Does not compile: // Captured values initialization is forbidden due to possible reassignment. intValue = 1 } } [https://pspdfkit.com/blog/2018/kotlin-contracts/] 위 코드에 보면 function이 한번만 호출되는 것..
안드로이드 접근성 accessibility 에 관하여 요즘 앱개발을 하면서 접근성 이슈가 많이와서 한번 정리해둘까 싶어서 작성하는 포스팅입니다. 간단하게는 view에 contentDescription 속성을 넣어서 포커싱 되었을때 어떻게 읽어줄 지를 정해 줄 수 있습니다. 또한, importantForAccessibility="no" 를 설정하여 필요없는 정보를 읽어주는 것을 예방할 수 있죠. 이런 포커스 관리하는 방법 중 일부로 View setAccessibilityTraversalAfter/Before 를 이용하는 방법이 있다고 합니다. AccessibilityDelegate() 뷰에 대한 접근성을 커스터마이징하고 싶다면 AccessibilityDelegate()를 오버라이딩하여 설정할 수 있습니다. 몇 가지 메소드에 대해서 알아봅시다. - sendAc..
힙이란? / What is the Heap Data Structure - 완전 이진 트리의 일종 - 공간적인 구조를 단순히 배열의 인덱스를 적절히 부여함으로써 구현한다. - 여러 개의 값들 중에서 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조이다. - 삽입, 삭제 속도 O(long n) - 생산 속도 O(n) - 힙은 일종의 반정렬 상태 (느슨한 정렬 상태) 를 유지한다. - 힙 트리에서는 중복된 값을 허용한다. 힙(heap)의 종류 1. 최대 힙 (max heap) 루트 노드는 가장 큰 노드이다. 부모 노드 >= 자식 노드 2. 최소 힙(min heap) 루트노드는 가장 작은 노드이다. 부모노드
해시테이블이란? ( What is a hash table?) 해시 테이블은 (Key, Value)로 데이터를 저장하는 자료구조 중 하나로 빠르게 데이터를 검색할 수 있는 자료 구조이다. 해시 테이블이 빠른 검색속도를 제공하는 이유는 내부적으로 배열(버킷)을 사용하여 데이터를 저장하기 때문이다. 해시 테이블은 각각의 key값에 해시함수를 적용해 배열의 고유한 index를 생성하고, 이 index를 활용해 값을 저장하거나 검색한다. 해시테이블의 시간 복잡도 : O(1) but 데이터 충돌이 발생한 경우 Chaning에 연결된 리스트까지 검색해야하므로 O(N) 까지 시가나복잡도가 증가할 수 있다. 데이터 충돌 시 해결법 1. Linear Probing index 뒤에 있는 버킷 중 빈 버킷을 찾아서 데이터를 넣는 방식 2. Chaning 자료구조를 활용해 추가 메모리를..