본문 바로가기

Language/Java

(8)
시간 간격을 정확하게 측정하는 방법. 개발을 하다 보면 시간 간격을 두어야 하는 경우가 많다. 일반적으로 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초까지의 오차가 발생한다. 이정도면 정..
합집합, 교집합, 차집합 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..
Interface Comparable 자바에서 제공되는 정렬이 가능한 클래스들은 모두 Comparable 인터페이스를 구현하고 있으며, 정렬 시에 이에 맞게 정렬이 수행된다. 정렬 수행 시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의하는 인터페이스 PACKAGE : java.lang.Comprable 구현 방법 현재 객체 파라미터로 넘어온 객체 return 양수 음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 바뀐다. 사용 방법 Arrays.sort(array)
Java Cipher 자바에서 *대칭키 알고리즘을 사용하여 데이터를 암호화 / 복호화할 때 Cipher클래스를 사용한다. 이 클래스는 정적 메서드인 Cipher.getInstance()를 호출하여 사용할 수 있는데 사용시 사용할 알고리즘, 운용 모드, 패딩 방식을 인자로 넘겨줘야 한다. 대칭키 암호화에서 알고리즘, 운용 모드, 패딩을 무엇이고 어떤 역할을 하는지 알아보자. - 혼돈과 확산 안전한 암호문은 공격자가 이를 보고 원본 메시지나 암호화에 사용된 키를 유추할 수 없어야 한다. 이러한 성질을 혼돈과 확산이라고 하며 각각 다음과 같은 의미를 갖는다. @ 혼돈은 *암호문으로부터 키를 알아낼 수 없게 하는 성질이다. @ 확산은 암호문으로부터 원문을 알아낼 수 없게 하는 성질이다. 다르게 말하면 혼돈이란 키의 비트 하나만 바꿔..
자바 synchronized 자바로 개발한 기존 프로젝트를 코틀린으로 변환하는중에 Thread와 블락(synchronized)과 관련된 문제 때문에 애를 좀 먹었다. synchronized, wait, notify은 대충은 알지만 확실한 개념을 잘 몰라서 이번 기회에 정리를 해보려고 한다. 1. synchronized - 정의 : 위키백과에서는 "컴퓨터 과학에서 동기화 란 두 가지 뚜렷하지만 관련 개념 인 프로세스 동기화 및 데이터 동기화 중 하나를 의미합니다. 프로세스 동기화는 여러 프로세스가 특정 시점에서 가입하거나 핸드 셰이크하여 계약에 도달하거나 특정 작업 순서를 확약한다는 아이디어를 나타냅니다"라고 한다. 영어를 직역한거라 말이 어렵다. 간단하게 예시를 들자면 하나의 사과를 여러 명이 동시에 먹으려고 한다면 당연히 싸움이 ..