2014년 2월 10일 월요일
20140210 패키지(package), 예외처리(exception)
: 패키지(package)
1. 패키지는 관련있는 파일들을 한 폴더에 모아두는 정리 역할을 한다.
기본 패키지 폴더인 scr폴더에 모두 모여있으면 구분이 불간으 하다.(수백 수천개의 java파일들)
2. 패키지는 클래스와 다르다
패키지 생성시 클래스와는 다르게 소문자만 사용한다
Class : ExampleNumber1
package : package.test -> src 폴더 속에 package 폴더 속에 test폴더를 만든다.
3. 패키지 내의 자바 파일을 사용하는 방법
import package.* // 패키지 폴더 안의 자바 파일들을 사용
import package.test.* // 패키지 폴더 안의 test 폴더 안의 자바 파일들을 사용
Ex) 기본적으로 클래스를 생성할 때 java.lang을 상속받는다
-> (java.lang.)System.out.println(); //즉, 패키지를 import 시켜 놓으면 이런식의 활용이 가능하다.
4. static import 문장의 사용
import static java.lang.System.*;
메인 함수 안에 { out.println(); } 으로 사용 가능
5. 자바가 지원하는 패키지
java.beans // 자바빈즈 구조에 기초한 컴포넌트 개발 시 이용
.io // 입출력 스트림을 위한 클래스
.math // 수학관련 클래스
.net // 네트워킹 클래스
.nio // 새로운 네트워킹 클래스
.sql // DB에 저장된 데이터 접근하기 위한 클래ㅡㅅ
.util // 날짜, 난수 생성기 등의 유틸리티 클래스
javax.net // 네트워킹 애플리케이션을 위한 클래스
6. java.lang 패키지
.object // 기초 메소드를 제공하는 모든 클래스의 슈퍼 클래스
.Math // 수학 함수 포함 메소드
.String // 문자열을 다루는 클래스
.System // 시스템 정보 제공 및 입출력 제공 클래스
7.Math 클래스
static double max(double a, double b) // 큰수
static double min(double a, double b) // 작은수
static double pow(double a, double b) // a의 b제곱
static double random() // 0.0과 1.0 사이의 난수를 반환
static double sqrt(double) // a의 제곱근
8. System 클래스의 메소드
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) // 지정된 소스 배열을 목적지 배열로 복사
static long currentTimeMillis() // 밀리 초 단위로 현재 시각을 반환
static void exit(int status) // 현재 실행중인 자바 가상 기계를 중단
==>Ex) System.exit(1);
9. Wrapper 클래스
보통 인트 등의 변수를 생성할 때, 우리는 약식을 사용하는데...
Integer obj = new Integer(10); // 원래 형식
int obj = 10; // 약식
랩퍼 클래스는 byte -> Byte 처럼 첫 글자를 대문자로 해주면 된다.
int -> Integer
char -> Character
두개를 제외하고 (byte, short, long, float, double, boolean, void)모두 첫 글자를 대문자로 바꾸면 된다.
보통 사용 했던 이유는 스트링을 숫자로 읽을 때
Integer num = Integer.parseInt(String st) 로 사용했던 것 같다.
String s1 = Integer.toString(10); // 10(숫자)을 "10"(문자화)로 만들어 준다
int i = Integer.parseInt("10"); // "10"(문자)을 10(숫자)로 만들어 준다
우리가 보통 변수를 사용할 때
int abc = 100;
String s = "99";
System.out.print(abc+s); // 의 결과는 '10099'가 나온다
오토박싱 때문인데 문자화 시켜주는 ""을 자동으로 채워주고 풀어주고 한다
10. java.util 패키지
모든 클래스를 다룰 수 없기 때문에... 중요하다고 하는 몇 개만!
Random() // 난수 발생 객체 생성
Random(longseed)// 주어진 시드를 이용한 난수 발생기 객체 생성
double nextDouble() // 더블형의 0.0~1.0 의 난수를 발생
float nextFloat() // 플롯형의 0.0~1.0 의 난수를 발생
int nextInt(int n) // 0~n사이의 난수 발생
11. Array 클래스
static List asList(Object[] a) // 주어진 배열을 고정 길이의 리스트로 변환
static int binarySearch(int[] a, int key) // 주어진 값을 int형의 배열에서 이진 탐색(반씩 잘라서 탐색)->주의 할 점은 반드시 정렬이 되어 있어야 한다는 것이다.
static boolean equals(int[] a, int[] a2) // 두 배열이 같으면 true 반환
12. date 클래스(매우 중요)
Date d = new Date();
d.getYear() // 1900년 이후 년도
d.getMonth // 0~11월
d.getDate() // 윤달 계산까지 내장되어 있음
13. Calendar 클래스(매우 중요/빈도가 가장 높음)
Calendar rightNow = Calendar.getInstance(); // 현재 시간을 갖는다
boolean after(Object when) // 현재 객체가 주어진 시간보다 이후 이면 true반환
boolean before(Object when) // 현재 객체가 주어진 시간보다 이전 이면 true반환
static Calendar getInstance() // 현재 시각을 나타내는 Calendar 객체를 반환
Date getTime() // Calendar 객체를 Date 객체로 반환
void set(int year, int month, int date, int hourOfDay, int minute, int second) // 각 필드 값 설정
void setTime(Date date) // Date 객체의 값으로 Calendar 객체를 설정한다.
14. StringTokenizer
자료구조? 알고리즘? 에 종종 나오는 문제들을 해결해주는 메소드 같다.
int countTokens() // 문자열에 존재하는 토큰의 개수 반환
boolean hasMoreTokens() // 다음 토큰을 가지는지 반환
String nextToken() // 다음 토큰을 반환.
String nextToken(String delim) // 다음 토큰을 반환하고 분리자를 delim으로 변경
: 예외처리(Exception)
앞으로 예외처리는 기본적으로 탑재 시키는 코드를 작성해야 한다.(배웠으니까)
예외 처리에는 수 많은 종류의 예외들을 만났을 때 어떻게 프로그램을 종료 시키지 않고 계속 진행하며
심각한(?) 예외들을 처리해 나갈 수 있는지 방법을 알 수 있다.
1. try and catch와 finally(생략 가능)
try{
예외 잡을 코드
}catch(Exception e){ //여러개의 캐치도 가능하다
예외 발생 시 처리 코드
}finally{ // 생략 가능
try 블록 종료 후 반드시 실행되어야 하는 코드
}
예외 처리를 할 때 if문을 이용해 처리도 가능하지만 try/catch를 사용하도록 하자.
2. try-with-resources
자바 se 7부터 추가된 기능으로
BufferedReader 객체를 이용해 파일로부터 데이터를 읽을 경우
BufferedReader는 종료 시 반드시 닫혀야 한다
try(BufferedReader br = new BufferedReader(new FileReader(path))){
return br.readLine();
}
의 식으로 사용한다. try 의 괄호 안에 들어가 있으므로 try-with-resources이다
이는 try 문장이 정상/비정상 적으로 종료되어도 예외가 발생해도 BufferedReader는 무조건 닫힌다.
3. 예외 처리의 종류
예외에는 Error, RuntimeException, 기타 3가지가 있다.
에러는 개발자가 잡을 수 없는 예외이고
RuntimeException은 개발자가 '반드시' 잡아야 하는 에러이다.
그 대상에는....
ArithmeticExetipn // 어떤 수를 0으로 나눌 때
NullPointExetipn // 널 객체를 참조할 때
ClassCastExetipn // 적절치 못하게 클래스 형변환 시
NegativeArraySizeExetipn // 배열의 크기가 음수값
OutOfMemoryExetipn // 사용 가능한 메모리가 없음
NoClassDefFoundExetipn // 원하는 클래스를 찾지 못함
ArrayIndexOutOfBoundsExetipn // 배열을 참조하는 인덱스의 오류
4. 예외의 다형성
1. Exception
1.1 IOException 1.2 NumberException
1.2.1 TooBigException 1.2.2 TooSmallException
의 형식으로 트리 구조를 이루고 있다.
즉 최 상위는 Exception 이고 각각의 예외를 직접적으로 처리하려면 하위 구조의 예외를 직접 써주면 된다.
5. throw, throws
throws는 {...} 안의 여러줄의 코드를 모두 검사하고 예외 발생시 처리해주는 명령
throw는 하나의 인수만을 요구하는 Throwable객체
6. 사용자 정의 예외
public class MyException extends Exception {}의 식으로 사용한다.
예외처리를 공부하면서 느낀점은 "경험, 노하우, 컴퓨터 시스템의 기본 지식 등이 없으면 잘 배워놓고 제대로 써먹지
못하는 상황이 발생할 것 같은 느낌의 느낌이다.
이제 밥을 먹으러 가야겠따.
라벨:
학습
Do you wanna hear me?.....................................
모두가 아니라고 하는 길을 걸어 가 보겠다.
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기