본문 바로가기

자바환경설정

[22-D13][OOP] Package, JAVA Source, API Document, import, 기본 Package

[01] package(Folder, Directory)

- 같거나 비슷한 처리를 하는 클래스를 그룹으로 묶어 지정하는 것을 패키지 지정이라고 합니다.

- 폴더에서 파일을 분류하듯이 패키지도 클래스를 그룹별로 분리합니다.

- 패키지의 개념과 폴더는 완전히 같습니다. 'itwill.java' 패키지가 있으면 소스나 컴파일된
파일은 'itwill/java' 폴더안에 저장되어야 합니다.

- 모든 클래스는 기본 패키지인 java.lang을 자동으로 import함으로 선언하지 않아도 됩니다.

- 패키지 클래스는 반드시 javac -d . *.java로 컴파일 할것
↑ ↑
│ │
│ 기준 폴더(현재 폴더)

└ 지정된 폴더안에 패키지의 형태로 폴더를 만든후
컴파일된 클래스 저장

- 기본 DOS 명령어
CD temp: temp 폴더로 이동
CD.. : 상위 폴더로 이동
CD\ : 드라입의 root 폴더로 이동
CD c:\ojt\temp: c:\ojt\temp 폴더로 이동
F: : f 드라이브로 이동
DEL : 파일 삭제
MD corejava: 폴더 생성


1. eclipse에서의 패키지 생성 및 클래스 테스트

package wbc.korea.baseball.kbo.hero;

2. 콘솔상에서의 단일 패키지의 컴파일 및 실행

1) workspace/javaD13/src 폴더상에 corejava 폴더를 생성

2) 메모장을 이용해서 Star.java를 작성해 corejava 폴더에
저장합니다.

3) 컴파일
javac [패키지 생성 옵션] [컴파일된 클래스 저장 폴더] java 파일

cd F:\200903_java1000\workspace\javaD13\src\corejava
javac -d ../../bin Star.java

4) bin 폴더에 corejava 폴더가 생성되고 Star.class가
있는지 확인합니다.

5) 실행할때에는 패키지를 전부 나열해야 합니다.

cd F:\200903_java1000\workspace\javaD13\bin
java corejava.Star


[02] JAVA API Source

[03] API Document

- http://www.nulunggi.pe.kr/java/api/j2sdk_1_4_0_doc_kor/index.html
- http://java.sun.com/j2se/1.4.2/docs/api/
- http://java.sun.com/javase/6/docs/api/


[04] import
- java.lang 패키는 모든 클래스에서 자동 인식되어져 사용가능합니다.
그외의 패키지는 import 라는 명령어로 클래스나, 인터페이스가 있는
패키지 즉 폴더를 명시해주어야 인식이 가능합니다.


예) 3자리 천단위마다 ','의 출력

>>>>> CommaTest.java

import java.text.DecimalFormat;

// import java.text.*;

public class CommaTest {

public static void main(String[] args) {
DecimalFormat df = new DecimalFormat("###,###,##0");
String pay = df.format(2000000);

System.out.println("급여: " + pay);
}
}

[05] java.lang Package
- import문에 명시하지 않아도 기본적으로 자동으로 import됩니다.

1. Object Class
- C언어의 void * 같습니다.
- 모든 클래스는 기본적으로 이 클래스를 상속받습니다.
- 모든 클래스의 객체는 이 클래스 타입으로 형변환을 할 수 있습니다.
- 가장 상위에 있는 공통 데이터 타입입니다.
- 메소드가 특정 클래스의 타입을 받지 않고 다양한 모든 타입을 받으려면 인수의 타입을 Object로 지정해야 합니다.
이 예는 Collection에서 많이 발견하게 됩니다.


2. Wrapper Class
- 기본 primitive(int, float, char, double...)데이터 타입을 객체화 시킨 클래스들입니다.
- 첫자를 대문자로 시작하며 Boolean, Byte, Character, Double, Integer...
- int는 하나의 정수 값을 저장할 수 있습니다. 그러나 Integer는 정수를 저장 할 수 있을
뿐만 아니라 그 정수를 편집할 수 있는 메소드까지 가지고 있어 편리함을 제공합니다.
따라서 전형적인 객체지향의 속성중 하나인 캡슐화를 지원합니다.
- 값을 입출력하는 속도를 가지고 본다면 int는 Integer 보다는 매우 빠릅니다.

>>>>> Wrapper.java

import java.lang.*;

public class Wrapper {

public static void main(String[] args) {
//정수 100을 2진수로 변환
String bin = Integer.toBinaryString(100);
System.out.println("100의 2진수는:" + bin);

// 100의 8진수

// 10의 16진수

//문자열을 통한 정수 객체의 생성
Integer it = new Integer("10");
System.out.println("값 출력:" + it.intValue());

//문자열의 정수 변환
int kuk = Integer.parseInt("100");
System.out.println("숫자 kuk 값 출력:" + kuk);
}
}

3. System Class

>>>>> System.out 객체 분석하기
java.lang
Class System
java.lang.Object
|
+-java.lang.System

System.out
---
static PrintStream <--- print(), println() Overloading

4. Math 클래스
- 난수 발생의 범위: 0 ~ 0.999999~, 1은 발생이 되지않습니다.
- 0 <= 난수 <1
공식:
max: 최대값, min:최소값

(int)(d * ((max-min)+1))+min

>>>>> MathTest.java
public class MathTest {
public static void main(String[] args) {
//Math m = new Math(); //ERROR

System.out.println("abs:" + Math.abs(-100));
System.out.println("ceil:" + Math.ceil(1.1));
System.out.println("floor:" + Math.floor(1.9));
System.out.println("(int)(a + 0.5f):" + (int)(10.5 + 0.5f));
System.out.println("round(10.4):" + Math.round(10.4));
System.out.println("round(10.5):" + Math.round(10.5));
System.out.println("round(10.6):" + Math.round(10.6));

System.out.println("-----------------------");

double d; int r;

for(int i=0; i<=4; i++){
d = Math.random();

//r = (int)d; //0
//r = (int)(d * 10); //0 ~ 9
//r = (int)(d * 10)+1; //1 ~ 10
r = (int)(d * 11)+10; //10 ~ 20
//(int)(d * ((max-min)+1))+min

System.out.println(r);
}
}
}

[05] 문자열 관련 Class

1. 문자열 비교
- 문자열 객체가 생성은 되나 기존에 heap영역에 같은 문자열이 존재하면 그 문자열을
공유합니다.

- 아래의 코드는 해시코드가 같습니다. 따라서 객체를 공유합니다.
String a1 = "Apple";
String a2 = "Apple";
String a3 = new String("Apple");

- if (a1 == a2){ } 결과는 true가 나옵니다.

- if (a1 == a3){ } 결과는 false가 나옵니다.

- if (a1.equals(a3)){ } 결과는 true가 나옵니다.
따라서 문자열 비교는 항상 equals()메소드를 사용합니다.

2. 문자열 추출의 이용
>>>>> SubString.java
public class SubString {

public static void main(String[] args) {
String url="Http://www.kma.go.kr/test/test.jsp";

//index 0~6번째 문자 추출
System.out.println(url.substring(0, 7));

//index 25번째 문자부터 추출
System.out.println(url.substring(25));

//특정 문자의 위치 파악
int i = url.indexOf(':');
System.out.println("':'의 위치" + i);

//특정 문자 ":"까지 문자열 추출
String str1 = url.substring(0, i);
System.out.println("str1:" + str1);

//대문자로 변환
str1 = str1.toUpperCase();
System.out.println("str1.toUpperCase():" + str1);

//HTTP로 문자열이 시작하는지 검사
if(str1.startsWith("HTTP")){
System.out.println("HTTP Protocol 입니다.");
}

url="ftp://www.test.pe.kr";

//특정 문자의 위치 파악
i = url.indexOf(':');

//특정 문자까지 문자열 추출
str1 = url.substring(0, i);

//대문자로 변환
str1 = str1.toUpperCase();

if(str1.startsWith("FTP")){
System.out.println("FTP Protocol 입니다.");
}


}
}


3. StringBuffer Class
- 메모리(버퍼)를 이용하여 문자열 편집을 실행합니다.

- String 클래스는 문자열 편집시 계속적인 메모리할당, reference 값이 부여되나, StringBuffer는 처음에 문자열을 할당한후
메모리를 계속 연장하여 처리함으로 반복적인 객체생성이 되지 않아 처리속도가 매우 빠름니다.

- 메모리 운용은 사용되는 버퍼 크기보다 16이 큰 용량으로 자동으로 증가됩니다.

- 문자열 편집용 클래스입니다.

- 문제가 되는 문자열 처리 방법, 변수의 문자열 값에 변화가 일어날시 계속적으로 객체가 새롭게
생성됩니다.

>>>>> StringBufferExam1.java

class StringBufferExam1 {
public static void main(String args[]) {

String test = "테스트";
String test2 = new String("테스트");

String str = "하나";
System.out.println(str.hashCode());
str = str + " 둘";
System.out.println(str.hashCode());
str = str + " 셋";
System.out.println(str.hashCode());
System.out.println("--------------------------------");

String a1 = "Apple";
String a2 = "Apple";
String a3 = new String("Apple");
System.out.println(a1.hashCode() + " " + a2.hashCode() + " " + a3.hashCode());
System.out.println("--------------------------------");

StringBuffer sb = new StringBuffer();
sb.append("하나"); // sb 객체에 문자열을 추가합니다.
System.out.println(sb.hashCode());
sb.append(" 둘");
System.out.println(sb.hashCode());
sb.append(" 셋");
System.out.println(sb.hashCode());
System.out.println("sb.toString(): " + sb.toString());

}
}