본문 바로가기

Java

(5)
[Java] long 타입(milli 초 타임스탬프) 끼리 기간 차이 구하기(연, 월) feat. Calendar, Date 일, 시간, 분, 초 까지는 단순 계산으로 어떻게든 가능하지만 월 단위로 넘어가게 되면 쉽게 계산할 수 없다. 그래서 Calendar 와 Date를 활용한다. 예제코드 Date 를 miili 초 데이터로 생성한 뒤 Calendar 에 세팅해주고 연 월을 계산한다. 위 함수는 두 개의 날짜데이터끼리 몇 달 지났는지 알기 위한 것이다.
[Java] 10^-6 (micro) 초 까지 포맷에 맞춰 시간 출력하기 앱개발 중 해시 값에 마이크로초 까지 넣어서 데이터를 식별해야 할 일이 생겼다. 기존에 이용하고 있었던 SimpleDateFormat 과 Calendar의 조합으로는 밀리초까지밖에 안 됐기 때문에 새로운 방법을 찾았다. 코드캡쳐 출력 결과
Infinity 의 함정 주의(Arithmetic Exception 으로 확인 불가 경우) 양수와 음수가 반복되는 배열에서 양수가 묶여있는 연속된 부분배열을 찾는 로직을 구상했다. 그런데 서버에서 배열을 받아오는 것 까지는 완료였고 아무리 코드를 봐도 정상작동해야했지만 뜻대로 작동하지 않았다. 결과값을 모두 프린트해보니 "Infinity" 라는 출력이 눈에 띄었고 잠시 후 눈치챘다. rps 를 구하기 위해 [ 1 / (pulse width * 주기) ] 식이었는데 pulse width 에 0이 들어있는 경우가 있던 것이다. (물론 이 0도 내가 임의적으로 넣었다.. 왜 그랬니) 여기서 궁금한 점은 두 개였다. 1. 왜 0으로 나눴는데 나누기를 zero 로 했다면서 Arithmetic Exception 이 뜨지 않았는가? 2. Infinity 는 정수와 비교연산자로 비교했을 때 더 크다고 평가되..
[Java] byte 를 hex 값으로 정상 연산하는 법 sensor 에서 들어온 16진수(hex)를 10진수로 변환하여 보여줘야하는 상황이었다. 다만, 하나의 진수가 아닌 자릿수를 두 개로 나눠뒀다. 0xD3 0x01 이렇게 들어왔다면 0x01 이 더 높은 자리고 0xD3 이 더 낮은 자리다. 그러니까 조합하면 0x01D3 이 돼야한다. 일단 기본연산. 10진수라고 생각해보면 2453 이라는 천 단위 수가 있다고 했을 떄, 24와 53으로 나뉜다면 24 * 10^2 + 53 * 10^0 꼴이다. 10^0은 어차피 1이니 높은 자리 수에 진수^2 을 해주는게 핵심이다. 위 예시에서 0x01D3 이라면 16진수이므로 먼저 Byte 변수로 0x01 과 0xD3 을 담는다. 그 후 (0x01) * 16^2 + 0xD3 을 해주면 답이 나온다. 그런데, Byte로 변..
[Java] interface 의 이해 처음에 언어를 배울 때는 interface 라는게 이해가 가질 않았다."대체 왜 있는거지"라는 질문이 머리에서 떠나질 않았다.언어라는 건 컴퓨터에 명령을 주기 위해서 있는건데interface 는 구체적인 행동을 지정할 수가 없다. 그런데, 최근 GoF 디자인패턴을 많이 구현해보면서그 존재의의를 어렴풋이 체감하게 됐다. 말 그대로 interface 는 interface 였다.이번에도 차량으로 예를 들어보자.운전자가 브레이크를 밟았을 때,차는 바로 멈춰야 한다. '사용자'가 "브레이크 페달"이라는 interface 를 사용했을 때,모든 절차를 거쳐 브레이크가 자동으로 '구현'돼야 한다. 만약 차를 멈추기 위해 사용자가 직접페달도 밟고 엔진 정지 버튼도 누르고타이어 멈추는 버튼도 눌러야 한다면?만약 빠르게 할..