자바프로그래밍 언어: 그래픽과 애플릿

 

자바에서의 그래픽 구조에 대해 알아본다. 
그래픽 컨텍스트에 대해 알아본다. 
애플릿에 대해 알아본다. 
이미지 처리 방식에 대해 알아본다.

 

1. 그래픽구조

일반적으로 그래픽을 처리하기 위해서는 그림을 그릴 주체가 있고 그 주체가 그림을 그릴 때 사용할 수 있는 펜이나 붓 등의 도구가 있어야 한다.  또한 그 도구를 가지고 그림을 그릴 수 있는 장소, 즉 도화지 등과 같은 대상이 있어야 한다. 

그래픽 주체 
자바에서의 그래픽 주체는 그림을 직접 그리도록 명령을 내리는 사람, 즉 프로그래머 그 자체가 주체가 될 수 있으며.  자바 자체적으로 자동으로 그림을 그릴 수 있도록 만들어놓은 자바가상머신이 될 수 있다. 
따라서 실제로 그림을 그리는 작업이 일어나도록 하는 주체를 의미한다.

그래픽 도구 
자바에서의 그래픽 도구는 주체가 그림을 그릴 수 있도록 펜, 붓, 폰트, 팔레트 등과 같은 것을 의미한다. 
이러한 도구들을 만든 후 여러 번 사용할 수 있도록 정보를 저장하는데, 이를 그래픽 컨텍스트(Graphic Context)라 한다. 
이번 장에서 가장 중요하게 보게 될 내용으로 자바에서는 그래픽 컨텍스트를 추상화시킨 클래스가 java.awt.Graphics 클래스이다

그래픽 대상 
자바에서의 그래픽 대상은 그림을 그릴 수 있는 곳을 의미하는데, 우리가 앞에서 배운 AWT의 모든 컴포넌트나 이미지, 프린터 등이 될 수 있다. 
자바에서 제공하는 모든 컴포넌트는 paint()메서드가 포함되어 있어 자신이 그려져야 할 때 자동으로 호출되어 지정된 곳에 그릴 수 있도록 하고 있다 .
그러기 때문에 프로그래머가 일일이 paint()메서드를 만들어주지 않아도 화면에 출력시킬 수가 있는 것이다.

 

2. 그래픽 컨텍스트

그래픽 컨텍스트
앞에서도 잠깐 언급을 했듯이 그림을 그리기 위해 사용하는 도구들을 추상화시킨 것으로 두 가지 기능을 가지고 있다. 
첫 번째로 실제로 그림을 그리는 작업을 할 수 있도록 그래픽 메서드를 가지고 있다.
두 번째는 그래픽 메서드를 이용해서 그림을 그릴 때 사용하는 각종 도구들, 즉, 그래픽 정보를 설정할 수 있는 기능이다. 
예를 들어 원, 사각형을 그릴 수 있도록 하는 메서드와 그러한 그림을 그릴 때 사용하는 색상, 굵기 등을 설정할 수가 있는데 이러한 기능들을 담당하는 것이 그래픽 컨텍스트이다.

Graphics 클래스 
Graphics 클래스는 그래픽 작업을 할 수 있도록 기능들을 추상화시킨 클래스로 그림을 그릴 수 있는 각종 메서드를 지원하고 있다. 
API메서드 중에 fill이 붙어 있는 것들은 채우기 기능을 가지고 있는 메서드들이다. 

Color 클래스 
그래픽 컨텍스트에 색상을 설정하기 위해 사용하는 클래스이다. 
Color 클래스 객체를 생성할 때 사용할 색상을 지정하여 그래픽 컨텍스트에 설정하면 그 이후의 모든 색상에 적용하여 사용할 수 있다. 

Font 클래스 
그래픽 컨텍스트에 글꼴을 설정하기 위해 사용하는 클래스이다. 
Font 클래스 객체를 생성할 때 사용할 글꼴의 속성을 지정하여 그래픽 컨텍스트에 설정하면 그 이후의 모든 글자에 적용하여 사용할 수 있다.

 

3. Applet 

Applet은 우리가 앞에서 보았던 AWT에서 컨테이너의 역할을 하는 것으로 웹브라우저에 다운되어 실행될 수 있는 프로그램을 의미한다. 
애플릿이 나오면서 동적으로 물체가 움직이고, 게임을 하는 등 특별히 소프트웨어를 다운받아 설치하지않고 그냥 웹브라우저상에서 프로그램이 실행될 수 있도록 해 준 것이다. 
애플릿은 브라우저에 내장되어 있는 자바 VM에 의해 동작이 된다. 
사용자는 별도의 자바 VM을 설치하지 않아도 애플릿이 실행될 수 있는데, 브라우저의 버전이나 개발사에 따라 지원하는 버전이 다를 수 있기 때문에 작성된 애플릿 프로그램이 원래 의도대로 동작하지 않을 수도 있다. 
그래서 이러한 문제를 해결하기 위해서 썬에서 해결책으로 나온 것이 바로 자바 플러그인(Java Plug-In)이라는 것이다.

Applet의 실행 
애플릿은 어플리케이션 프로그램과 달리 main()함수가 존재하지 않기 때문에 독자적으로는 실행이 불가능하다.
웹브라우저나 JDK가 설치되어 있는 bin 폴더에서 제공하는 애플릿 뷰어(appletviewer)와 같은 프로그램내에서만 실행이 가능하다. 
웹브라우저는 기본적으로 읽을 수 있는 문서 형태가 HTML형태이므로, 애플릿 코드를 직접 브라우저에 삽입하여 작성하는 것은 아니다. 
즉, 애플릿 코드는 우리가 지금까지 작성했던 방식으로 .java형태로 작성해서 컴파일 시킨 후 HTML코드에서 컴파일된 CLASS파일을 불러 실행될 수 있도록 하는 방법을 사용한다. 
브라워저에서 CLASS파일을 불러오는 코드는 <applet>태그를 사용하면된다.

 

Applet관련 태그 및 메서드 
Applet관련 태그 
웹브라우저에서 애플릿코드를 실행시키기위해서 HTML에서 제공하는 태그가 바로 <applet>이다. 
이 태그를 이용해서 HTML에서 애플릿코드를 지정해서 쉽게 애플릿코드를 사용할 수 있도록 해주는 기능을 한다.

<applet>태그 형식 

<applet code=”애플릿 클래스이름” 
width=”웹브라워저상의 애플릿의 폭” 
height=”웹브라워저상의 애플릿의 높이” 
codebase=”애플릿코드가 있는 위치” 
> 
<param name=”파라미터 이름” 
value=”파라미터가 가지는 값” 
> 
</applet>  

<applet>태그의 속성 
code : HTML에서 애플릿으로 작성하여 컴파일된 CLASS파일을 불러와서 실행할 수 있도록 지정하는 속성으로 CLASS파일의 확장자는 생략 가능하며 패키지 자체를 지정하여도 된다. 
width, height : 웹브라우저에서 애플릿이 보여줄 수 있는 영역을 지정하는 속성이다.  웹브라저의 크기변경에 따라 가변적으로 변경될 수 있다. 
codebase : 애플릿 파일이 있는 위치를 지정하는 속성으로 일반적으로 HTML파일과 같은 위치에 있다면 생략이 가능하고 다른 위치에 있으면 반드시 경로를 설정해줘야 된다. 
<param>태그 : 이 태그는 애플릿이 실행될 때 HTML에서 애플릿으로 초기값을 넘겨줄 수 있도록 해주는 기능으로 name은 애플릿에서 값을 얻어갈 수 있도록 해주는 파라미터 이름이고 value는 name에 의해서 실제적으로 넘어오는 파라미터값을 지정하는 속성이다. 

Applet이 실행되는 동작의 도식화

Applet 보안
자바 애플릿은 서버로부터 다운로드되어 웹브라우저를 통하여 실행되는 프로그램으로 다운로드된 애플릿 프로그램이 시스템에 접근하여 시스템의 정보를 읽거나 파일을 가지고 갈 수도 있다면 문제가 아주 심각할 것이다. 
애플릿은 이런한 행위를 하지 못하게 보안이 되어있고 이런 보안문제가 발생하면 예외를 던지고 실행을 멈추게한다. 

 

Applet 보안정책
1. 애플릿이 다운로드된 시스템의 파일을 읽거나 쓸 수 없다.
2. 애플릿이 다운로드된 시스템의 프로그램을 실행하거나 공유 라이브러리를 호출 할 수 없다.
3. 애플릿이 다운로드된 시스템의 정보를 알아낼 수 없다.
4. 바이너리 코드를 불러내 사용할 수 없다.
5. 애플릿을 제공한 서버 이외의 다른 시스템과 통신을 할 수 없다. 

 

FontMetrics 클래스 
사용자가 정확한 위치에 문자를 출력시킬 수 있도록 FontMetrics 클래스를 제공하고 있다. 

FontMetrics의 문자열에 대한 정보
Width : 문자열의 폭
BaseLine : 폰트의 기준선(이 기준선에 의해 글자가 출력된다.)
Descent : 기준선보다 아래에 있는 공간
Ascent : 기준선보다 위에 있는 공간
Leading : 현문자의 decent과 다음 문자라인의 Ascent 사이의 공간으로 아래 글자와의 경계에 사용되는 빈 공간
Height : Ascent + Descent + Leading

 

4. 이미지 처리

자바에서는 디스크에 저장되어 있는 이미지 파일을 불러와 화면에 출력시킬 수 있는 기능을 제공한다. 
이미지를 불러 올 수 있는 메서드로는 getImage() 메서드를 이용하고, 이 메서드는 Toolkit 클래스와 Applet 클래스의 메서드이다. 
Toolkit 클래스의 getImage() 메서드는 일반적인 어플리케이션 프로그램에서 사용하는 메서드이고, Applet 클래스의 getImage() 메서드는 애플릿 프로그램에서 사용하는 메서드이다. 
getImage() 메서드는 이미지를 불러오면서 이미지 객체를 생성해주는 메서드이다. 
이미지 객체를 관리하기 위해서 자바에서는 java.awt 패키지의 Image 클래스를 제공한다.

 

더블버퍼링을 이용한 이미지 처리
이미지를 출력시키는 경우 화면을 지웠다가 다시 그리게 되면 깜박거림을 피할 수가 없다. 
그래서 이러한 문제점을 해결하기 위해서 많이 사용하는 방법이 더블 버퍼링 기법이다. 
더블 버퍼링 기법이란 화면에 이미지를 직접 그리지 않고, 메모리상에 미리 그려 놓았다가, 필요할 때 한 번만 화면에 출력시키는 방법이다. 
매번 화면을 지웠다 그렸다하는 것이 아니라 보이지 않는 메모리상에서 지웠다 그렸다하고 화면에는 최종적으로 보여줄 때 한 번만 출력을 시켜 깜박거림을 최소화시켜주는 기법인것이다. 

+ Recent posts