소프트웨어 개발 165

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

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

SerialVersionUID가 뭐냐?

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

0-1 배낭문제 (도둑놈 짐싸기 문제)

배낭문제는 도둑놈 털어가기 알고리즘과 같다. 배낭이 20Kg짜리를 가져갔는데 이게 왠걸 방에 뭐 비싸보이는게 덕지덕지 있다. 다만 무게와 가치를 잘 따져서 가져가야하는데, 보통은 무게대비 가치가 많은걸 가져가면 되겠지만 만약 이게 100Kg 짜리 다이아몬드라면 잘라서 가져가지는 못하므로 포기한다. 고속터미널에서 파는 싸구려 가방이라 20Kg가 넘으면 찢어진다고 가정하다. 한번 이렇게 있다고 생각해보자. 부피 : 4 5 12 4 100 2 가치 : 7 10 2 4 100 6 문제는 뭔가 비싸보이는것부터 넣어도 안되고 무게대비 비싼걸을 넣어서도 별로 답이 되지 않는다는 것이다. 이럴때는 나머지 공간에 물건들을 싸서 얻을 수 있는 최대의 가치를 리턴하는 함수를 설계한다. 물건을 가져가지 않는경우는 다음과 같다..

Microsoft Face API를 이용한 얼굴 세부 인식기 개발

어쨌든 요기서 SDK를 다운로드 받을수 있다.어떻게 얼굴을 인식하는 기술을 만드느냐 하는것은 박사들이 알아서 잘 할것이고 본인도 시켜주면 굉장히 잘할수있는데 기회가 나지 않기때문에 라이브러리만 가져다가 응용어플리케이션을 만든다. https://www.microsoft.com/cognitive-services/en-us/face-api 위에다가 그냥 넣으면 사실 그게 답이지만, 문제는 여러 이미지를 때려박고 거기에서 나오는 데이터를 대량으로 처리하고 싶기때문에 그게 문제이다. 대강의 프로그램은 복잡하지 않다. 솔직히 그냥 홈페이지에서 각종 얼굴을 뗘다가 붙여서 수작업으로 작업할수도 있는데, 아무래도 너무 느리다. 굉장히 귀찮기 때문에 C#을 이용해서 어플리케이션을 한번 만들어 봤다. 레이아웃은 아무래도 좋..