2009년 10월 15일 목요일

JAVA 설명

JAVA applet
web 브라우저 상에서 동작하는 프로그램이며, web서버로부터 자동적으로 다운로드 되어 클라이언트의 web브라우저 상에서 동작한다.
JAVA servlet
서버에서 실행되고, 실행결과를 web페이지로 클라이언트에 보내준다.
JSP
HTML문서 속에 JAVA코드를 삽인하는 형태로 서버에서 실행되고, 그 결과를 클라이언트에게 보내준다.
JAVA Beans
컴퍼넌트로 구성하여 이들을 조합하여 애플리케이션을 만들수 있다.

JAVA 프로그램 개발 툴
SE(Standard Edition)
클라이언트향 개발 환경
EE(Enterprise Edition)
서버향 개발 환경
ME(Micro Edition)
소형 기기향 개발 환경

프로그래밍의 기본적인 흐름
1. 파일명.java에서 파일명은 실행할 클래스의 이름과 대문자, 소문자까지 똑같아야 한다.
2. 컴파일은 javac Hello.java
3. 실행 java Hello

변수
int는 32bits, long 64bits, 실수형 float는 32bits double 64bits
float형 변수에 실수값을 대입할 경우 변수 뒤에 f또는 F를 붙여서 대입해야 하며, 그렇지 않으면 컴파일 에러남

배열
배열의 요소를 구한다.
int [] a = new int [4];
int b = a.length; --> b는 4
int [][] a = {
{1,2,3},
{4,5},
};
int b = a.length; b -> 2
int c = a[1].length; c-->2

오버라이딩
슈퍼 클래스의 메소드는 서브 클래스에서 다시 정의하는 것을 말한다.
예) class Greeting {
void bye(){
system.out.printIn("good bye");
}
}
class Insa extends Greeting {
void bye() {
system.out.printIn("안녕히");
}
}

super
서브 클래스 안에서 super라는 말을 사용하면 슈퍼 클래스의 필드와 메소드를 참조할 수 있다.
class Insa extends Greeting {
void byeEnglish() {
super.bye()
}
}

final
필드나 클래스에 붙이는 제한자이며, final을 붙이면 필드는 값을 변경할 수 없게 되고 클래스는 상속 할 수 없게 된다.
추상 클래스
처리 내용을 기술하지 않고 호출만 정의한 메소드를 추상 메소드라 하며, 추상 메소드를 가진 클래스를 추상 클래스라 한다.
추상 클래스의 오브젝트는 new하여 생성할 수 없다.

abstract class Animal {
String name;
abstract void cry();
}

class cat extends Animal {

void cry() {
System.out.println("야옹");=>오버라이딩 하여 cry메소드를 고양이에 맞춰 표현한다.
}
}

interface
클래스와 비슷한 구조이미난 정의와 추상 메소드만이 멤버가 될 수 있다.
클래스에서 인터페이스로서만이 사용된다.
interface Greet {
void greet();
}
interface Talk {
void talk();
}
class Morning implements Greet, Talk {
public void greet() {
System.out.println("안녕하세요!");
}
public void talk() {
System.out.println("날씨 좋아요!");
}
}

class Meet {
public static void main(String [] args) {
Morning morning = new Morning();
morning.greet();
morning.talk();
}
}

다형성
1. 오브젝트의 다형성
상속한 클래스의 오브젝트는 슈퍼 클래스로도 서브 클래스로도 다룰 수 있다.
이렇게 하나의 오브젝트와 메소드가 많은 형태를 가지고 있는 것을 다형성이라한다.
class A{
int m = 10;
void p() {
}
}
class B extends A {
int n = 20;
void p() {
}
}
A a = new A();
B b = new B();
b.m = 30;
a = b;
결과 a.m = 30이 된다. b = a의 대입연산은 되지 않는다.
A a = new B(); 로도 오브젝트 생성 가능하다

instanceof
오브젝트가 지정한 클래스의 오브젝트인지를 조사하기 위한 연산자입니다.
또는 오브젝트가 인스턴스를 구현하고 있는지를 조사할 수도 있다.
boolean flag = c instanceof X; c는 오브젝트명이고, X는 클래스명이다.
boolean flag = c instanceof Y; c는 오브젝트명이고, Y는 인터페이스 명이다.

Clone()
Object 클래스에 있는 메소드는 당연히 모든 클래스에 상속되지만 곧바로 사용할 수 없다.
clone()메소드를 사용하기 위해서는 Cloneable이라는 인터페이스를 구현할 필요가 있다.
clone()을 사용하게 되면, string과 같은 참조형 변수는 복제 되지 않는데, public을 붙여 clone()메소드를 오버라이딩하여
모든 멤버를 복제할 수 있다.
class person implements cloneable {
string name;
int age;

public object clone() {
person a = new person();
a.name = new string(name);
a.age = age;
return a;
}
}

person x = new person();
person y = (person)x.clone();-->모두 복제

스트림
데이터 입출력을 스트림이라 한다.
Java에는 스트림을 위한 클래스가 java.io패키지에 마련되어 있습니다.
관련 클래스는 다음과 같다
스트림 입력 스트림 출력 스트림
문자스트림 Reader Writer
바이트스트림 InputStream OutputStream

java.io를 사용하기 위해서는
import java.io.*; 하면 된다.

예외처리
try - catch-finally throws
try
{}안에 예외가 발생할 것 같은 처리를 기술한다.
catch
예외의 종류를 나타내는 예외 오브젝트를 인수로 받아들인다.
finally
{}속의 처리는 예외가 일어나든 일어나지 않든 항상 실행된다. finally문은 생략 가능

class Main {
public static void main(String [] args) {
try {
back(args[0]);
} catch(Exception e) {
System.out.println("커맨드라인 인수가 없습니다.");
} finally {
System.out.println("종료합니다.");
}
}
static void back(string a) throws Exception {
System.out.println(a);
}
}
결과
> java Main apple
apple
종료합니다.
> java Main
커맨드라인 인수가 없습니다.
종료합니다.

파일 읽기/쓰기
FileReader라는 스트림 클래스를 사용한다.
FileReader in = new FileReader("file.txt");
int c;
string s = new string();
while((c = in.read()) != -1)
s = s + (char) c; //읽은 데이터는 int형인데 이를 char형으로 변환하여 String 클래스의 오브젝트에 대입한다.
system.out.print(s);
in.close(); //닫는다
FileWrite out = new FileWriter("file2.txt");
out.write("Hello\n");
바이너리 파일 읽기/쓰기
FileInputStream in = new FileInputStream("file3.dat");
FileOutputStream out = new FileOutputStream("file4.dat");

키보드 입력
int a;
a = System.in.read();

BufferedReader
행단위로 데이터를 읽어 들일 수 있다.
InputStreamReader a = new Input StreamReader(System.in);
BufferedReader b = new BufferedReader(a);

readline()메소드는 읽어 들인 한 행의 데이터를 string클래스의 문자열로 반환한다.
string c = b.readline();

import java.io.*;
class NumberGame {
public static void main(string [] args) {
try {
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
int a, b = 7;
System.out.println("이름을 입력");
String name = in.readLine();
}
}
}

패키지
클래스와 인터페이스를 모은 것을 말한다. java.io도 패키지이다.
package pack1;
public class A {
public클래스는 다른 패키지에서도 사용가능하며,
public을 붙일수 있는 클래스는 파일 하나에 하나이다.
}

import pack1.B ; pack1패키지안에 B를 사용하겠다. *인경우 pack1패키지 안에 모든 클래스를 사용하겠다.

JAR(Java ARchive)
복수의 클래스파일과 그 밖의 파일을 하나로 모아 압축한 파일 형식이다.
용량을 줄일 수 있기 때문에 데이터 교환하기 편하다.
> jar cf AB.jar A.class B.class //A.class B.class를 신규 작성한 JAR파일 AB.jar에 저장한다.

매니페스트(manifest)파일
JAR파일에 들어 있는 파일의 정보를 기술한 파일이며, 매니페스트 파일을 지정하지 않고 아카이브를 작성하게 되면,
표준 매니페스트 파일이 포함된다.

Hello.jave파일 내용 class Hello {
void hello() {
System.out.println("Hello");
}
}
Bye.java class Bye {
void bye() {
System.out.println("Bye");
}
}
Greeting.java class Greeting {
public static void main(String [] args) {
Hello h = new Hello();
Bye b= new Bye();
h.hello();
b.bye();
}
}
manifest.txt 내용
Main-class: Greeting

>jar cfm G.jar manifest.txt Hello.class Bye.class Greeting.class

JAR파일 실행은 '-jar'사용
> java -jar G.jar
Hello
Bye

콜렉션 클래스
오브젝트 데이터의 관리를 지원하는 클래스의 총칭이다.
예를 들어 ArrayList클래스가 있으며 java.util패키지에 포함된 콜렉션클래스중 하나이다.
File클래스는 파일명 자체를 표현함과 동시에,파일과 디렉토리를 다루기 위한 클래스이기도 하다.

J2SE6.0의 for문
int [] a = {1,2,3,4};
for(int b : a) {
system.out.println(b);
}
결과 > 1
2
3
4