BLOG ARTICLE 객체지향 | 6 ARTICLE FOUND

  1. 2008/02/22 간단한 맥주 추천 프로그램. (6)
  2. 2007/10/31 String과 StringBuffer 성능 차이점 (2)
  3. 2007/10/29 Beat Box 연주 프로그램 (12)
  4. 2007/10/24 내부 클래스
  5. 2007/10/10 JAVA ?

웹브라우져에 사용자 취향을 묻고 거기에 대한 맥주를 추천해주

는 프로그램이다.

사용자가 브라우져를 통해 Index.html 안에 있는 옵션을 선택하

Servlet에게 내용이 보내진다.

Servlet에선 받은 내용을 Model에서 처리하며  결과를 얻어

ViewResult.Jsp로 보내지게된다.

Result에선 사용자에게 선택한 옵션에 대한 결과값을 출력하게 된다.

이것이 MVC패턴을 간단하게 응용한 프로그램이라고 할수있다.



Index

소스 보기


Servlet

소스 보기


Model

소스 보기


Result

소스 보기


소스파일

크리에이티브 커먼즈 라이선스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

: 최종명  jmchoi@it.soongsil.ac.kr


String은 내용을 변경할 수 없기 때문에 String에서 + 연산자를 사용하면 내부적으로StringBuffer를 생성해서 append() 메소드를 이용해서 문자열을 결합한다는 것은 대부분의 자바 프로그래머가 알고 있을 것입니다.

따라서 String을 많이 사용하는 서블릿이나 기타 프로그램에서는 되도록이면 StringBuffer char[]를 사용하시는 것이 효과적이라는 것도 다 알고 있는 사실입니다. 그런데 프로그램하다보면 귀찮아서라도 String을 많이 사용하는 것이 현실입니다.

그래서 잠시 10여분을 할애하여 String StringBuffer의 성능 차이를 테스트 해보았습니다. 테스트는 제가 새로 얻은(?) 펜티엄에 윈도우 2000이 설치된 컴퓨터 에서 했습니다. 테스트할 프로그램은 다음과 같습니다. 각 프로그램은 모두 "a" 문자열을 30,000번 씩 결합하도록 했습니다.

예제 : StringTime.java

    1  public class StringTime {

    2

    3      public static void main(String args[]) {

    4          Runtime rt = Runtime.getRuntime();

    5          System.out.print(rt.freeMemory());

    6          System.out.println("/" + rt.totalMemory());

    7          long start = System.currentTimeMillis();

    8          String a = "a";

    9          for(int i=0; i < 30000; i++) {

  10              a += "a";

  11          }

  12        long stop = System.currentTimeMillis();

  13          System.out.println(stop - start);

  14          System.out.print(rt.freeMemory());

  15          System.out.println("/" + rt.totalMemory());

  16      }

  17

  18  }

예제 : StringBuffer.java

    1  public class StringBufferTime {

    2

    3      public static void main(String args[]) {

    4          Runtime rt = Runtime.getRuntime();

    5          System.out.print(rt.freeMemory());

    6          System.out.println("/" + rt.totalMemory());

    7          long start = System.currentTimeMillis();

    8          StringBuffer a = new StringBuffer("a");

    9          for(int i=0; i < 30000; i++) {

  10              a.append("a");

  11          }

  12         long stop = System.currentTimeMillis();

  13          System.out.println(stop - start);

  14          System.out.print(rt.freeMemory());

  15          System.out.println("/" + rt.totalMemory());

  16      }

  17

18       }

테스트 결과

String

1830448/2031616

41800            -> 총 소요시간(단위: ms)

967576/2031616

StringBuffer

1830336/2031616

30               -> 총 소요시간(단위: ms)

1673200/2031616

시간 차이도 많이 났지만, 메모리 사용량도 상당한 차이가 있었습니다. 이와 함께 더 큰 문제는 이 작업이 많아질 수로 가비지 콜렉션에 의해 String을 사용하는 경우에 시간에 휠씬 큰 차이로 많이 소요된다는 것입니다.

String클래스와 StringBuffer클래스의 차이점

* String은 문자열의 내용이 조금이라도 바뀌거나 스트링 컨케트네이션되면 새로운

  객체를 만든다.

  레퍼런스를 잃어버린 객체는 가비지 컬렉션의 대상이 되며 새로운 객체에  새 주소를

  주므로 해쉬코드도 변한다. Immutable한 특징도 가지고 있다.

* StringBuffer는 원래 있던 객체의 내용만 바뀌는 Mutable한 특징이 있다.

  Mutable : 변덕스러운.

  Immutable : 불변의.

StringBuffer 안의 모든 문자열을 지우고 싶을때


StringBuffer sb = new StringBuffer();
sb.append("안녕하세요.abc");
sb.delete(0, sb.length());


-----------------------------------------------------------------------------------


이제부터 StringBuffer를 애용합시다!

크리에이티브 커먼즈 라이선스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)




사용자 삽입 이미지

설명 : 중간에 체크박스는 박자를 나타내며 체크를 한뒤에 시작을 누르면 비트박스가 연주된다.
 

코드보기


크리에이티브 커먼즈 라이선스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

내부 클래스는 외부 클래스의 모든 변수와 메소드(private포함)를

내부 클래스 내에 정의한 변수와

메소드인것 처럼 사용할수있다.

일반 클래스의 장점을 대부분 활용할수도 있고 특별한 권한까지 있다.

Ex



하지만 내부 클래스의 인스턴스는 외부 클래스의 인스턴트와 꼭 연결되어 있어야한다.

또한 내부 객체는 반드시 힙에 들어있는 특정 외부 객체와 연결되어야 한다.

그럼 어떻게 연결을 해야됄까??

Ex


이런식으로 사용을 하면된다.

private로 지정된거까지 마음대로 다룰수있음으로 효율적인 클래스라고 생각한다.

크리에이티브 커먼즈 라이선스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

JAVA ?

D.N - Programming/JAVA 2007/10/10 19:50

자바(Java)를 이야기할 때 크게 두 가지로 나누어 이야기 할 수 있습니다. 먼저, 기계어, 어셈블리어(Assembly), 포트란(FORTRAN), 코볼(COBOL), 파스칼(PASCAL), 또는 C 등과 같이 프로그래밍을 하기 위해 사용하는 자바 언어가 있고, 다른 하나는 자바 언어를 이용하여 프로그래밍 하기 위해 사용할 수 있는 자바 API(Application Programming Interface)와 자바 프로그램을 실행시켜 주기 위한 자바 가상머신(Java Virtual Machine) 등을 가리키는 자바 플랫폼(Platform)이 있습니다. 다시 말해서, 자바 언어는 Visual C++와 비유될 수 있고, 자바 플랫폼은 윈도우 95/98/NT 및 윈도우 95/98/NT API와 비유될 수 있습니다.


그림 1. 자바(Java)


자바 언어(Java Language)를 이용하여 작성한 자바 프로그램(Java Program)은 자바 컴파일러(Java Compiler)를 이용하여 자바 바이트코드(Java Byte code)로 컴파일 되고, 이 자바 바이트코드는 자바 가상머신에 의해 해석되어 실행되는데, 이때 자바 가상머신은 자바 바이트코드에 대한 해석기 즉 인터프리터(interpreter)로 동작하게 됩니다. 이렇게 자바 프로그램은 컴파일 방식 및 인터프리터 방식이 모두 적용된다는 것입니다.


자바 컴파일러(Java Compiler):자바 언어로 작성된 자바 프로그램을 중간 언어(intermediate language) 형태인 자바 바이트코드로 컴파일 합니다<.

자바 바이트코드(Java Byte code):컴퓨터는 각 CPU에 따라 서로 다른 기계어를 갖습니다. 이러한 이유 때문에 도스 또는 윈도우 95/98/NT 등이 설치되어 있는 컴퓨터에서 실행되는 프로그램이 유닉스가 설치되어 있는 컴퓨터에서는 실행되지 않는 것입니다. 그러나, 자바 바이트코드는 이러한 플랫폼에 상관없이 자바 가상머신에 의해 실행될 수 있도록 정의된 중간코드입니다. 따라서, 자바 바이트코드로 컴파일 되기만 하면, 자바 인터프리터인 자바 가상머신이 설치되어 있는 곳이면 어디에서든 실행시켜 줄 수 있습니다. 이는 자바 개발자 또는 사용자로 하여금 자바 프로그램을 개발하거나 사용할 때 그 플랫폼이 윈도우 95/98/NT, 유닉스, 또는 매킨토시인지 전혀 신경 쓰지 않아도 되도록 합니다.


자바 인터프리터(Java Interpreter) 또는 자바 가상머신(Java Virtual Machine):

자바 바이트코드 명령어를 해석하고, 이를 자바 인터프리터가 설치되어 있는 플랫폼(윈도우 95/98/NT, 유닉스, 매킨토시 등)에 맞게 실행시켜 줍니다. 자바 인터프리터는 자바 바이트코드를 실행시켜 주기 위한 기능을 명세하고 있는 자바 가상머신을 구현해 놓은 것으로서 자바 가상머신과 같은 의미로 사용되며, 주로 자바 가상머신으로 많이 사용됩니다.


자바 바이트코드는 자바 가상머신에서 실행되는 기계어라고 생각하면 됩니다. 그리고, 모든 자바 인터프리터는 자바 가상머신을 구현해 놓은 것으로, 자바 가상머신과 자바 인터프리터를 같은 것으로 생각할 수 있습니다. . 이러한 자바 가상머신은 JDK(Java Development Kit)에 포함되어 있을 수도 있고, 자바 호환 웹 브라우저 내에 내장되어 있을 수도 있습니다. 또는, 자바 칩과 같이 하드웨어에 직접 구현될 수도 있습니다. 자바 바이트코드는 “write once, run anywhere”라는 말을 가능하게 해 줍니다. 다시 말해서, 자바 언어를 이용하여 작성한 자바 프로그램을 각 플랫폼(윈도우 95/98/NT, 리눅스, 유닉스, 매킨토시 등)에 맞게 제공되는 자바 컴파일러를 통해서 바이트코드로 컴파일 할 수 있습니다. 그리고, 이 바이트코드는 자바 가상머신이 있는 어떤 곳에서도 실행될 수 있습니다.


그림 2. 플랫폼 독립적인 자바


플랫폼이란 프로그램이 실행되는 하드웨어 또는 운영체제와 같은 소프트웨어적인 환경을 말합니다. 대부분의 플랫폼은 하드웨어와 운영체제를 함께 일컬어 말합니다. 그러나 자바 플랫폼은 하드웨어와 무관하게 동작하는 오직 소프트웨어적인 플랫폼이란 점에서 다른 플랫폼과 다릅니다. 이를 위해 자바 플랫폼은 다음과 같은 두 가지의 구성요소를 갖습니다.


자바 가상머신(Java Virtual Machine; Java VM): 자바 가상머신은 자바 플랫폼의기반을 이루며, 다양한 하드웨어기반 플랫폼에 포팅(poring) 됩니다. 다시 말해서, 자바 가상머신은 윈도우 95/98/NT, 유닉스, 또는 매킨토시 등과 같은 기존의 운영체제 또는 인터넷 익스플로러와 넷스케이프 등과 같은 웹 브라우저 등, 여러 가지 플랫폼에 설치되어 사용될 수 있으며, 사용자는 자바 바이트코드로 컴파일된 자바 프로그램을 실행시키기 위해서 이 자바 가상머신을 이용하면 됩니다.


자바 API(Java Application Programming Interface):자바 API는 윈도우 API와 같이 운영체제에서 제공해 주는 라이브러리와 같은 것입니다. 다시 말해서, 자바 프로그램을 개발하기 위해 사용할 수 있는 라이브러리 또는 클래스들이라 할 수 있습니다. 이러한 자바 API는 서로 관련된 클래스들을 묶어서 패키지 단위로 제공되고 있습니다

크리에이티브 커먼즈 라이선스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)