자바와 C#에서의 동일한 작동을 코드로 알아 볼께요.~~~

우선 C#
using System;
using System.Reflection;
class App
{
    static void Main(string[] args)
    {
        App pr = new App();
        Type type = pr.GetType();
        MethodInfo method = type.GetMethod("Sum");
        if (method != null)
        {
            Console.WriteLine(method.ToString());
            Console.WriteLine(method.Invoke(null, new object[] { 1, 2 }));
        }
    }
    public static int Sum(int i,int j)
    {
        return i+j;
    }
}



 

결과
Int32 Sum(Int32, Int32)
3


 

JAVA
import java.lang.reflect.Method;
public class methodInvoke
{
 public static void main(String[] args)
 {
  Method methods[] = methodInvoke.class.getDeclaredMethods();
  for (int i = 0; i < methods.length; i++)
  {
   if (methods[i].toString().equals("public static int methodInvoke.Sum(int,int)"))
   {
    Integer x = new Integer(1);
    Integer y = new Integer(2);
    try
    {
     System.out.println(methods[i].toString());
     System.out.println("1 + 2의 값--");
     System.out.println(methods[i].invoke(null, new Object[] {x,y}));
    }
    catch(Exception e)
    {
        System.out.println(e.getMessage());
    }
   }
  }
 }
 public static int Sum(int x, int y)
 {
  return x + y;
 }
}



 

결과
public static int methodInvoke.Sum(int,int)
1 + 2의 값--
3


일단 중요했던 점은 자바 코드 작성시 예외처리를 아예 빼고 invoke를 사용하게 된다면 실행이 되지 않았다. ㅡ.ㅡ; 뭐 이건 이클립스로 실행한게 아니라 J#으로 했기에 정확하지 않을 수도 있지 않을까?? ^^;; 그리고 나머지 메소드들도 나오지 않아 딱맞는 메서드를 메서드 명으로 찾았다.

일단 대충 같은 결과에서 본 시점은 C#코드가 더 간단하다는 점이다. 특정 만든 클래스에서 Type을 받고 거기에서 특정 함수를 찾기도 쉽고, 실행도 보다 편리 하다는점. 아무래도 자바가 나온 뒤에 C#이 나왔으니 어쩔수 없나? 아님 내가 자바를 많이 모르니 더 쉬운 방법을 못찾을수도 있었을 것이다.

내가 이 invoke를 이번에 다루는 이유는 내가 지금 보는 소스에서 본 내용이기에 써보았다. ^^ 특정 조건에 따라 함수를 실행 하게 되는데 기존에는 실행 함수중에서 조건 값을 가지고 if else if else ~~ 로 분기를 하였으나, xml문서로 조건 값들에 대한 메서드를 설정하고 if else if 를 사용하지 않고 조건에 맞는 문자열을 찾아 method에 값을 받고 invoke한다. 음..  이 방식이 그렇게 빠른가? 솔직히 잘 모르겠다. 그냥 대충 if else if else 로 구별 해도 상관 없지 않을까? 하는 생각이 들기도 했지만.

앞으로 좌절금지 열심히 아자아자다!!

Java 2007/01/23 22:08

내가 이해한 JAVABEAN

뭐 여러가지 정의도 있겠지만.. 내 나름대로의 이해한것이다. ^^

분명 javabean 은 java + bean 의 합성어일 것이다. ^^ 그렇다면 java야 그렇다고 치고 bean의 뜻은 무엇인가?

bean〔〕 ( been)  n.
1 콩(cf. PEA);잠두;강낭콩
 soy(a) beans 대두, 콩
 French[kidney] beans 강낭콩
 small beans 팥
2 (콩 같은) 열매, 그 나무
 coffee beans 커피 열매
3 《미·속어》 머리
4 [pl.;보통 부정문으로] 《영·속어》 적은 돈
5 [pl.;보통 부정문으로] 《미·속어》 조금, 소량;하찮은  


.............

영어 사전에서의 뜻은 대충 저렇다.. 그렇다면은 javabean이란? 뭐 딱부러지게 말할수 있는 한단어는 떠올르지 않는다..... 그렇다면 javabean 가 무엇인지 알아보자 ^^

public class Bean
{
 private String name;
 public void setName(String name)
 {
  this.name = name;
 }
 public String getName()
 {
  return this.name;
 }
}



위와 같은 구조의 클래스가 자바빈즈 클래스이다.. 대~~ 충은.. 클래스안에 저장할수 있는 스트링이나 다른 변수 객체들이 있고, 그것을 접근하기 위한 set 메서드와, get 메서드를 구현 시켜 놓은다면 그 클래스는 javabean 클래스라고 볼수 있다..  라고 이해했다.

음... 뭐라 딱히 딱부리지게 우리 말로 표현 할 수는 없지만, 단어의 뜻을 보고 생김새도 보니 이미지는 떠올른다. ^^

Programing 2007/01/22 22:16

Connection Pool

Connection Pool

이놈은 무엇이냐? 일반적으로 DB접속을 하는 간단한 프로그램을 할때 프로그램을 만드는 순서는 디비 커넥트 후 쿼리 실행 후 디비를 클로우즈 한다. 그런데 이런 디비 작업이 1~2 개각 아닌 수십 수백 이상의 작업을 해야 하는 경우에 각각 작업을 할때마다 디비를 연결했다 닫았다 하면 굉장히 큰 부하가 걸린다. 그리고 속도또한 느리게 된다.

이것을 해결하기 위해 나온 개념이 커넥션 풀~~ 미리 데이터 베이스와 연결을 몇개 해논 다음 디비작업이 필요한 경우 열린 통로로 작업 하고 끝나도 디비를 닫지 않는다. 왜 닫지 않냐 하면 나중에 쓰일 때 다시 쓰기 위해서... 이렇게 몇개의 디비를 열어 놓아서 바로바로 처리 하게 해주는 것이다.

흔히 쓰는 메모장 프로그램을 쓸때 쉽게 파일을 열수 있는 방법으로 빈 메모장 프로그램을 하나 실행시킨후 파일 탐색기에서 파일을 드래그 앤 드롭 하면 파일이 열리게 되고 텍스트 파일이나 기타 다른 파일들이 열리게 된다. 비단 메모장 프로그램 뿐만 아니라 한글이나 그림판 MS워드 등등등.. 수많은 프로그램들이 이런 기능들을 지원하게 된다. 그래서 한번 해보았다.

User inserted image
User inserted image


























다음과 같이 폼한개와 텍스트 박스 하나를 놓았다. 그 후 텍스트 박스의 AllowDrop 의 속성을 True로 바꾸어 주었다.



그리고 다음과 같은 소스를 이벤트를 추가하면 파일을 저장 할수 있다.

private void textBox1_DragDrop(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        string[] file = (string[])e.Data.GetData(DataFormats.FileDrop);
        foreach (string str in file)
        {
            this.textBox1.Text += str + "\r" + "\n";
        }
    }
}
private void textBox1_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        e.Effect = DragDropEffects.Copy | DragDropEffects.Scroll;
    }
}


다음과 같이 수정한 다음 파일을 드래그 해서 텍스트 파일 위에 올려 놓으면 파일명을 넘겨 받게 된다.

Java 2007/01/15 22:07

Java 세팅

일단 JVM을 설치 해야 할것이다. 맞나? Java Runtime Environment (JRE) 이건가? 이것을 썬사의 홈페이지 들어가서 설치 한다. 일단 내가 사용하는 버전은 1.4버전

그 다음 왼쪽링크들중에 있는 이클립스를 설치 한다. 음.. 그리고 톰캣을 설치.. 그 링크도 왼쪽에 있다. 그리고 톰캣 설정법은 긁어 왔다. 쩝..

설정

서버에서 TCP를 이용하여 파일을 하나 지정 받아서 대기 하고 있는다. 그런후 클라이언트에서 접속을 하게 되면 그 파일을 전송 받고, 클라이언트 프로그램에서는 파일을 받아 기록하게되는 간단한 소스 이다.

using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
public class FileServer
{
private FileStream file;
private NetworkStream ns;
private IPAddress ipAddress;
private TcpListener listener;
private Thread sender;
private TcpClient client = null;
private long sendSize = 0;
public FileServer(string f)
{
 this.file = File.OpenRead(f);
 this.ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
 this.listener = new TcpListener(ipAddress,3000);
 
 listener.Start();
 sender = new Thread(new ThreadStart(this.Acceping));
 Console.WriteLine("서버 실행중...");
 sender.Start();
}
~FileServer()
{
 file.Close();
}
public void Acceping()
{
 while(true)
 {
  client = listener.AcceptTcpClient();
  Console.WriteLine("클라이언트 접속");
  ns = client.GetStream();
  this.Send();
  ns.Close();
  client.Close();
 }
}
public void Send()
{
 byte[] b = new byte[1024];
 int count = 0;
 while( (count = this.file.Read(b,0,b.Length)) > 0 )
 {
  this.ns.Write(b,0,b.Length);
  this.sendSize += count;
 }
 Console.WriteLine("데이터 전송 완료");
}
public static void Main(string [] args)
{
 if( args.Length != 1)
 {
  Console.WriteLine("Usang args : AppName <fileName>");
  return;
 }
 if(!File.Exists(args[0]))
 {
  Console.WriteLine("File Access Error");
  return;
 }
 FileServer fServer = new FileServer(args[0]);
}
}


위의 코드를 실행 컴파일 시킨후 실행 시키게 된다. 그리고 다음은 클라이언트 소스 프로그램이다.

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
public class Client
{
private TcpClient client;
private NetworkStream ns;
private FileStream fs;
private Thread receive;
public Client(string ipAddress)
{
 this.client = new TcpClient(ipAddress,3000);
 this.ns = client.GetStream();
 this.fs = new FileStream("get.dat" , FileMode.Create);
 receive = new Thread(new ThreadStart(this.Receive));
 receive.Start();
}
public void Receive()
{
 int count = 0;
 byte[] b = new byte[1024];
 while( (count = ns.Read(b,0,b.Length))>0)
 {
  fs.Write(b,0,b.Length);
 }
 Console.WriteLine("파일전송완료");
}
~Client()
{
 fs.Close();
 ns.Close();
 client.Close();
}
public static void Main(string[] args)
{
 Client cl = new Client(args[0]);
}
}


div>