일요일, 12월 22
Shadow

미분류

#001 Semantic Search

미분류
시맨틱웹 기반의 검색 시스템 구조 이강찬* 김성한* 민재홍** 박기식*** 정인정**** 현재의 시맨틱웹 연구 및 개발은 시맨틱웹의 기본 기술인 RDF/RDFS, 에이전트, 온톨로지에 초점이 맞추어져 있다. 본 고에서는 시맨틱웹의 기본 기술을 유기적으로 조직하고 향후 시맨틱웹의 연구와 기술 개발에 청사진의 역할을 할 수 있는 시맨틱웹의 시스템 구조를 제시한 후, 시스템 구조를 사용하기 위한 시맨틱웹 개발에 필요한 도구에 대하여 설명한다. ▧     I. 서 론 1990년대부터의 정보통신의 발달 및 인터넷 사용 환경의 편의성 제고 등으로 인하여 웹의 사용이 일반화되고 있을 뿐만 아니라 각종 다양한 정보들이 웹을 통해서 공유되고 있다. 즉, 각종 멀티미디어 정보들이 디지털화되고 대용량의 데이터 교환이 가능해졌으며 단순한 텍스트뿐만 아니라 이미지, 음성, 동영상 등 다양한 형태의 자료를 공유할 수 있게 됨에 따라서 다양한 정보의 공유와 그 방대한 양으로 인하여 웹은 정보의 바다로 부각되었다. 그러나 현재의 웹 환경은 컴퓨터를 매개로 하여 사람과 사람들간의 정보 교환을 위해 발달되어 모든 정보의 추출, 이해를 사람에게 의존하기 때문에 사용자가 원하는 유용한 정보를 추출하는 일은 그리 간단하지 않다. 이러한 환경을 개선하기 위해 에이전트, 검색 엔진, 자연언어 처리 등과 같은 기술이 웹 환경에서 적용되기 위하여 연구/개발되고 있으나 이러한 기술 역시도 현재의 웹 환경이 지니고 있는 문제점으로 인하여 한계가 있다. 현재의 웹은 HTML 마크업 언어를 기반으로 하여 ...

#062 Hashtable vs HashMap

미분류
hash table 값 얻기 HashMap은 키나 값에 Null을 허용 합니다. HashMap 출력방법은 다음 한가지 이네요. (Enumeration 지원 안함) HashMap hashmap = new HashMap(); hashmap.put("jakarta", "project"); hashmap.put("apache", "tomcat"); Set set = hashmap.entrySet(); Iterator keys = set.iterator(); while (keys.hasNext()) { key = (String)keys.next(); System.out.println(hashmap.get(key)); } 또한 Hashtable은 thread safe 한 객체이지만 HashMap은 그렇지 못해 unsynchronized 합니다. 이말은 즉 멀티 쓰레드 환경이 아니면 HashMap을 쓰면 속도가 빠르다는 말입니다. 굳이 동기화 하자면 다음과 같이 사용해야 겠지요 Map m = Collections.synchronizedMap(new HashMap(...)); 간단히 정리하자면 HashMap이 HashTable에 비해 좀더 실용적으로 변한 형태라고 보면 되겠네요 ^^ 일반적으로 쓴다면 HashMap을 사용하세요 HashMap 이나 Hashtable 이나 둘다 Map 인터페이스를 implements 하고있지만 프로그래밍 환경에 따라서 적절한 놈으로 골라써야 합니다. java API 문서에 보면 The HashMa...

#036 싱글톤 패턴

미분류
싱클톤 패턴 용도 하나만 있으면 되는 객체를 만들때예) 스레드 풀, 대화상자, 사용자 설정, 로그기록용 객체, 디바이스 드라이버 -- 문제 : 한클래스의 인스턴스가 두개 이상 만들어 지지 않도록 할 수 있을까????????? Singleton 패턴은..각종 설정 등이 저장된 클래스가 하나 있다고 칩시다. 프로그램 내에서 여기저기서 마구 접근해서 설정을 바꾸기도 하고 값을 가져오기도 합니다. 이런 클래스는 인스턴스를 하나만 가져야 합니다. 하나 만들어서 쓰는 곳마다 인자로 전달해주면 되긴 합니다만, 접근하는 곳이 많다면, 계속 인자로 전달하는 것은 그다지 바람직하지 않습니다. 전역변수처럼 아무곳에서나 이 인스턴스에 접근을 하면 편하겠죠. Singleton 패턴을 이용하면, 하나의 객체를 만들어서 아무데서나 접근할 수 있습니다.2. 예제 ---------------------  Singleton으로 구현된 클래스 ---------------- package ch05_Singleton; public class SingletonCounter { private static SingletonCounter singleton = new SingletonCounter(); private int cnt = 0; private SingletonCounter(){ } public static SingletonCounter getInstance(){ return singleton; } public int getNextInt(){ return ++cnt; } } ----...

#035 스트래티지패턴

미분류
  스트래티지 패턴 : 알고리즘 군을 정의 하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트레티지를 활횽하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경 할 수 있다. -- 아직 개념이 명확히 들어 머리에 들어오지는 않는.. 다시 읽기.      character 클래스는 다른 모들 캐릭터를 위한 추상 클래스 weaponBehavior 는 모든 무기 클래스에서 구형해야 하는 인터페이스 예)  public abstract class Character

#061 객체생성에유의하자

미분류
1. String Concatenation 다음의 코드가 있을 경우 String p = a + b ; //a,b are String objects 자바 컴파일러는 다음과 같이 컴파일 한다. String p = (new StringBuffer()).append(a).append(b).toSting(); 여기서 우리는 벌써 두개의 새로운 객체를 발견할 수 있다. - StringBuffer - toString()에 의한 String 그렇지만 이게 다는 아니다. 각각의 String과 StringBuffer는 private으로 문자 배열을 가지고 있다. 그러나 성능을위해서 이 문자 배열은 공유되므로 결과적으로 새로 생성된 객체는 ‘3’개가 된다. 자바에서 객체를 새로 생성하는것은 객체 생성 자체가 비싼 작업이라는 점, 그리고 추후 가비지 컬렉터가 더 많은 일을 해야 한다는 점에서 성능에별로 좋지 않은 영향을 미친다. 단순한 문자의 추가가 비효율적인 이유는 String 객체는 불변(immutable)이기 때문이다. 그러므로 “a”라는 문자열을 수정해서 “ab”라는 문자열로 바꿀 수는 없고 “ab”라는 새로운 객체를 생성해서 “a”를 치환해야만 한다. 이와는달리 StringBuffer 객체는 문자열을 변경할 수 있다. 문자열을 계속적으로 추가해야만 한다면 StringBuffer를 사용하는 것이 훨씬 효율적이다. 다음의 예제를 보자.   (예제 1) 수행시간: 2200 ms String s = new String(); for(i...

#002 Software Engineer – New Grad – Seoul

미분류
Software Engineer - New Grad - Seoul This position is located in Seoul, Korea. The area: Software Engineering Google의 소프트웨어 엔지니어는 세계적으로 인정받은 기술을 기반으로 장차 더 큰 부가가치를 창출시켜줄 차세대 기술을 개발합니다. Google은 자사의 세계적인 수준의 프로그래밍 기술을 사용하여 검색기술 뿐만 아니라 다양한 영역에서의 혁신을 주도하고 있습니다. 현재 진행중인 프로젝트에는 고급 정보검색 알고리즘, 확장성 및 스토리지 솔루션, 대규모 애플리케이션 등이 있습니다. Google 프로젝트는 모두 사용자 경험 향상이라는 기치 하에 수행됩니다. 이 외에 고객용 애플리케이션 부문의 네트워크 시스템, 광고 시스템, 복잡한 거래 시스템 등에서도 다양한 혁신 프로그램이 진행 중입니다. The role: Software Engineer - New Grad 괄목할만한 성장을 거듭하고있는 Google에서 차세대 검색엔진 개발에 참여할 우수한 Software Engineer를 찾고 있습니다. Google 엔지니어링 팀은 최첨단 정보 검색 알고리 즘, 대용량 데이터 및 빠르게 증가하는 사용자와 다양하고 참신한 검색기능을 다루는 것 과 관련된 이슈 등 여러 분야의 문제를 해결하고 있습니다. 무질서한 웹 정보 정리에 참 여를 원하시는 분은 연락주시기 바랍니다. Responsibilities: 대규모 분산 시스템의 코딩, 분석 및 문제해결 능력 Requirements: 컴퓨터 과학 학사 학위 소지자 ...

#060 객체 클래스 인터페이스 패키지 스레드 예외스트림

미분류
<객체와 클래스> <객체> 상태와 행동을 갖는다 프로그램에서 객체는 소프트웨어 객체로서 상태(변수)와 행동(메쏘드)를 갖는다 객체는 클래스로부터 생성된다 객체의 생성은  클래스의 인스턴스 생성과 같은 의미이다 객체의 초기화는 클래스의 생성자를 사용한다 객체가 속한 클래스가 그 객체의 자료형이다 객체 사용의 의미 객체의 변수를 읽거나 쓴다 객체의 메쏘드를 호출한다(객체에게 메시지를 보낸다) 객체와 클래스는 사실 의미가 다르지만 객체는 실세계 객체의 전자공학적 모델이어서 쉽게 구분이 가지 않는다  종종 객체를 클래스와 인스턴스 모두의 의미로 사용된다 자전거 - 객체,  자전거를 만드는 설계도 - 클래스 동일한 설계도로 많은 자전거를 만들 수 있다 <class> 객체를 생성하는 설계도이다 선언 class Name [extends Super] [implements Interface [,Interface, ...]] {몸체} 클래스명에 알파벳, _, $을 사용한다.   관례적으로 대문자를 사용한다 상위 클래스명이 없을 경우 자동적으로 Object 클래스가 상위 클래스가 된다 하나의 파일 안에 여러 개의 클래스를 정의할 때 단지 한 개의 클래스에만 public 접근 변경자를 붙여야 한다  응용 프로그램 클래스와 애플릿 클래스  응용 프로그램 클래스는 main 메쏘드가 있으며 아래와 같이 고정된 형식으로 쓰인다 public  static  void  main (String a...

#059 Java Development Framework

미분류
Java Development Framework 1. Development Framework의 필요성 예를 들어 각종 자동차 부품과 냉장고 부품이 전부 분해되어 바닥에 즐비하게 서로 섞여 있는 모습을 상상해 보겠습니다. 수많은 볼트와 넛트, 게스킷, 파이프, 심지어 팬치와 드라이버까지 마구 섞여 있습니다. 이러한 부품과 연장을 이용하여 우리가 만들려는 것은 청색의 카렌스입니다. 물론 완전히 분해된 부품들을 하나하나 조립해서 청색의 카렌스를 만들어 낼 수는 있습니다. 상당한 시간이 걸리겠죠. 카렌스를 만드는 데는 전혀 쓸모없는 냉장고 부품은 걷어내고, 엔진조립부터 시작하여 패인트칠까지 하다 보면, 갖가지 일이 발생합니다. 엔진의 성능을 높이위해 이렇게도 해보고 저렇게도 해보고, 그러다 보면 납기는 가까이 오고 결국 카렌스를 만들지 못하고 '티코'를 만들고 있는 자신의 모습을 보게 됩니다. 그러나, 엔진과 기어변속장치, 동력전달장치 등 각종 단위 부품을 미리 조립해 둔 반제품을 이용한다면 최종적으로 카렌스를 만드는 기간은 엄청나게 빨리 끝낼 수 있겠지요. 완제품을 만드는 사람은 엔진구조공학은 모르지만 단지 최종적인 조립을 위한 최소한의 '조립공정'과 기술만 보유하고 있으면 됩니다. 카렌스가 SI 프로젝트를 통해 완성시켜야 할 최종적인 시스템에 비유한다면, 각종 부품들은 API(Application Programming Interface)에 해당될 수 있습니다. 물론 지금의 SI프로젝트가 직면한 문제가 위에서 예를 든 것과 비슷한 상황인가란 질문에는 의견이 분분...

#058 java network

미분류
package kr.co.lecture.socket; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class SocketServer { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //서버 포트 예약 ServerSocket serverSocket = new ServerSocket(9090); //클라이언트 접속 대기 Socket clientSocket = serverSocket.accept(); //클라이언트 전송 데이터 수신 스트림 InputStream clientIs = clientSocket.getInputStream(); InputStreamReader isr = new InputStreamReader(clientIs); BufferedReader br = new BufferedReader(isr); ...