소프트웨어 개발/Java - Basic 41

간단한 객체가 들어있는 어레이리스트 정렬 후 바이너리 서치

package etc;import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class BinarySearchClassTest { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(new Car(1000, "hi")); list.add(new Car(12350, "hi")); list.add(new Car(123400, "hi")); list.add(new Car(11100, "hi")); list.add(new Car(500, "hi")); list.add(new Car(130, "hi"));..

Java Reflection (리플렉션) 을 이용해 private 특정 타입 필드를 죄다 반올림하기.

밥먹기전에 이러한 메서드는 필요할것 같아서 쓴다. 일단, 한 객체에 들어있는 수치값이 한 200개가 있다고 치자. 근데 거기중에 int타입도 있고 double타입도 있고, String타입도 있다. 만약 double타입의 값들을 모두 가져와서 두자리수로 반올림 하고 싶으면 대체 어떻게 하여야 하는가? 하나하나 하드코딩으로 double필드만 골라서 그걸 반올림하고 있을 것인가? 안된다.. 그렇다면 주말에 나와서 코딩을 해야하고 추후에 어떤 거지같은 경우가 생길지도 모른다. 물론 회사에 늦게 남아있으면 어쨌든간 열심히 하는것처럼 보이니 알아서 하도록 한다. 어쨌든 먼저 자바는 2자리수로 반환하는 Math안의 함수가 없어 보인다. 하나 간단하게 만들도록 한다. 2자리 수 변환 함수 public static do..

SerialVersionUID가 뭐냐?

가끔 노랑밑줄이 쳐질때가 있다. 이게 무엇인가. 유일한 클래스임을 보장해주기 위한 ID임이다. 클래스는 때때로 필요한 필드가 추가될수도 있으며, 이에 따라 예전에 만들어놓은 클래스와 다른 형태를 가질수 있다. 그럼에도 불구하고 이 두개는 같은것이라고 봐야할 필요가 있으며 이럴때 구분자로 사용할 수 있다. 예를들어 기존에 있던 Person 클래스에 간지남 정도를 표시해주기위해 최근 ganziness 필드를 추가했다고 치자. 예전에 만들어 놓은 Person은 간지와 관련된 필드가 없기 때문에 컴파일러는 이 두개의 객체를 다르게 볼 수 있다. 그렇게 된다면 직렬화를 복원하는 과정에서 두개의 이질감 때문에 컴퓨러는 InvalidClassException을 뱉어낼수 있다. 즉, serialize된 데이터를 다시 ..

배열및 다차원배열 출력방법

파이썬등에서 배열 출력하는건 사실 일도아니다. 다만, 자바는 static method를 통해서 출력하거나 직접 출력함수를 작성해야 한다. 예를들어, 아래와 같이 출력함수를 간단하게 만들어볼수있다. public static void printArray(int[][] array) { for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.print(" " + array[i][j]); } System.out.println(); } } 결과 14 14 14 14 14 14 0 20 20 20 20 20 20 0 85 85 85 85 85 85 0 60 60 60 60 60 60 0 77 77 77..

쓰레드(Thread) 관련 메서드가 죄다 Deprecated 된이유.

쓰레드를 잠시 멈추거나 재개하고 싶을때, 정말 쉽사리 많이쓰던 메서드는 stop(), suspend(), resume()이다. 다만 이 메서드들은 현재 deprecated되어서 사용이 권장되지 않는다. 쓰레드를 이용한 복잡한 동시성 프로그램을 파악가능하고 완벽하게 만들기에는 거의 불가능에 가깝다는게 여러사람의 말이다. 스칼라에서도 마찬가지 개념이 전반적으로 깔려있지만, 쓰레드의 메서드가 deprecated된 이유는 자명하다. 안전하지 않기 때문이다. 그 전에 쓰레드의 개념에 대해 알 필요가 있다. 쓰레드는 쉬운개념이다. 우리가 동시에 두개의 일을 프로그램에게 시키고 싶을때 쓰레드를 사용한다.웹 프로그램 같은 경우 동시에 여러 사용자가 서버에 접속해서 일을 하게 되는데, 이를 효과적으로 동시에 처리를 해주..

Reader 등으로 글자 입력받기

다음과 같은 간단한 코드로 json 을 그냥 쌩으로 읽을 수 있다. 다만 json객체로 바꾸지는 못한다. Reader reader = new BufferedReader(new FileReader("sample.json")); int data = reader.read(); while(data != -1) { char c = (char) data; System.out.println(c); data = reader.read(); } 데코레이터 패턴을 이용했기 때문에 위와같이 reader안에 Reader를 리턴하는 문장으로 만든다. Reader reader = new BufferedReader(new FileReader("sample.json")); InputStream is = new ByteArrayInpu..

Java Documentation - Reader

Java Document에 있는 내용으로 알아서들 번역해서 보라 ReaderAbstract class for reading character streams. The only methods that a subclass must implement are read(char[], int, int) and close(). Most subclasses, however, will override some of the methods defined here in order to provide higher efficiency, additional functionality, or both. BufferedReaderReads text from a character-input stream, buffering character..