본문 바로가기

Language

(38)
시간 간격을 정확하게 측정하는 방법. 개발을 하다 보면 시간 간격을 두어야 하는 경우가 많다. 일반적으로 Thread.Sleep 함수를 사용하는데 이 방법은 Thread 상태에 따라 오차가 존재한다. private void measureTime() { while (true) { long currentTimeMills = System.currentTimeMillis(); try { Thread.sleep(100); } catch (Exception e) { e.printStackTrace(); } long itv = System.currentTimeMillis() - currentTimeMills; System.out.println(itv); } } 0.1초 간격으로 콘솔을 출력했지만 0.004~0.012초까지의 오차가 발생한다. 이정도면 정..
코루틴 코루틴은 왜 만들어졌을까? 코루틴을 알아보기에 앞서 코루틴이 왜 만들어졌는지 찾아보았다. 다음 영상은 꼭 보는 것을 추천한다. https://www.youtube.com/watch?v=BOHK_w09pVA 구글 I/O 위 영상을 보면 코루틴은 Dream Code를 위해 만들어진 라이브러리라고 한다. 여기서 Dream Code는 다음과 같다. val user = fetchUserData() textView.text = user.name fetchUserData 함수는 HttpConnection이나 Retrofit으로 서버 api를 조회해 유저 데이터를 받아오는 것을 뜻한다. 안드로이드에서는 메인쓰레드로 서버 api를 조회할 수 없기 때문에 이 코드가 정상적으로 동작하지 않는다. 또한 메인쓰레드에서 Http..
합집합, 교집합, 차집합 ArrayList로 구현해보기 알고리즘 문제를 풀다보면 집합 관련된 문제들을 꽤 자주 만나게 된다. 자주 사용하는 집합들을 따로 정리해놓으려고 한다. package set; import java.util.*; public class SetExample { public static void main(String [] args) { ArrayList arr1 = new ArrayList(); ArrayList arr2 = new ArrayList(5); for (int i = 0; i= 5) { arr2.add(String.valueOf(i+2)); } } System.out.println("arr1 : " + arr1); System.out.println("arr2 : " + arr2); System.out.println("------..
Java로 자료구조(LinkedList, Stack, Queue) 구현해보기 알고리즘 공부에 앞서서 기본기를 다진다는 느낌으로 자료구조를 직접 구현해보려고 한다. 언어는 자바로 구현할 것이며 내부함수들을 참고하여 만들어 보도록 하겠다. 크게 세가지의 자료구조를 구현해볼 것이고, 다른 자료구조도 필요성을 느끼게 된다면 나중에 추가하도록 하겠다. 1. LinkedList 핵심적인 메서드들만 추려서 구현해보았다. package linked; abstract class AbstractLinked { abstract void clear(); abstract void add(Object element); abstract void add(int position, Object element); abstract void addFirst(Object element); abstract void ad..
자바 == 연산자 자바에서 == 연산자 역할. 1. 자료가 원시타입일 때는 원시타입의 value를 비교하여 같으면 true, 다르다면 false를 리턴해준다. 2. 자료가 참조타입일 때는 참조하고 있는 객체가 같은지 비교하여 같으면 true, 다르다면 false를 리턴해준다. public class ExampleJavaTest { static class TestData { int index; String name; public TestData(int index, String name) { this.index = index; this.name = name; } } @Test public void myTest() { int nData1 = 1; int nData2 = 1; System.out.println(nData1 == ..
제네릭(Generic) 자바나 코틀린으로 개발하다보면 내부함수들을 확인할 때가 있는데 상당부분 제네릭 타입으로 만들어져 있다. 다른 개발자들은 많이 사용하는 것 같은데 나는 코드 리딩만 해보았지 제네릭을 염두에 두고 코드를 설계한 적이 없었다. 그래서 이 참에 제네릭 개념도 다시 정리하고 테스트 코드도 작성하여 개발 파이를 넓혀보려고 한다. Generic이란? 제네릭이란 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에서 컴파일 할 때 타입 체크를 해주는 기능이다. 객체의 타입을 컴파일 할 때 체크하기 때문에 의도하지 않은 타입의 객체가 저장되거나 호출되는 것을 막을 수 있고 형변환의 번거로움을 줄일 수 있다. 코드로 보충 설명하자면 package test; public class Person { Object m_name..
재귀함수 재귀함수는 본인이 본인을 호출하는 함수이다. 재귀함수를 만들 때 반드시 존재해야 하는 조건이 2가지이다. 1. 반드시 끝나는 조건이 존재해야 한다는 것. 2. 계산 범위가 점점 줄어들어야 한다는 것. 가장 많이 예시로 드는 팩토리얼 코드를 보겠다. def factorial_recursive(n): print(n) if n
파이썬 stack과 queue - 파이썬 STACK list 자료형으로 똑같이 사용할 수 있음 stack = [] stack.append(5) // 스택쌓기 [5] stack.append(2) // 스택쌓기 [5, 2] stack.pop() // 스택팝 [5] print(stack) // 결과 // [5] - 파이썬 QUEUE 파이썬으로 큐를 구현할 때는 collections 모듈에서 제공하는 deque 자료구조를 활용하는 것이 좋다. deque는 스택과 큐의 장점 모두 채택한 것인데 데이터를 넣고 빼는 속도 리스트 자료형에 비해 효율적이며 queue 라이 브러리를 이용하는 것보다 더 간단하다. from collections import deque q = deque() q.append(5) // deque[5] q.append(2) ..