1. 패키지

- 관련 있는 클래스들을 하나로 묶은 것

- 내장 패키지 & 사용자 정의 패키지

- '이름 공간' - 동일한 이름의 클래스가 각 다른 패키지에 속할 수 있어 이름 충돌을 방지할 수 있음

- 세밀한 접근 제어 구현 가능 

- 파일의 맨 처음에 package 이름;

 

2. 패키지 사용

- 완전한 이름으로 참조하기 (패키지 이름이 클래스 앞에 붙음)

graphics.Rectangle myRect = new graphics.Rectangle();

 - 패키지 안에서 원하는 클래스만 포함하기

import graphics.Rectangle;

Rectangle myRect = new Rectangle();

 

- 패키지 안의 모든 클래스 포함하기

import graphics.*;

Rectangle myRect = new Rectangle();

 

 

3. 계층 구조의 패키지 

- ex) java - awt - font 구조의 패키지들이 있을 때,

java.awt.*를 포함시키면 java.awt.font 패키지는 자동으로 포함되지 않음!

별도로 포함시키기

import java.awt.*;
import java.awt.font.*;

 

4. 클래스 파일 로드

- 자바 소스 파일이 컴파일되면 .class 확장자를 가지는 클래스 파일로 변환되고 파일 시스템에 저장됨

- 클래스 파일은 JVM에 의해 로드됨

 

5. JVM이 클래스를 찾는 순서와 방법

- 부트스트랩 클래스

    - 자바 플랫폼을 구성하는 핵심적인 클래스

    - 디렉터리 jre/lib에 있는 여러 jar 파일들

 

- 확장 클래스

    - 자바 확장 메커니즘 사용하는 클래스

    - 확장 디렉터리에 있는 jar 파일들

 

- 사용자

    - 확장 메커니즘을 활용하지 않는 개발자 및 타사에서 정의한 클래스

 

- 방법

    - 현재 디렉터리 찾음

    - 일반적으로는 환경 변수인 CLASSPATH에 설정된 디렉터리에서 찾음

 

6. 자바 API 패키지

 

7. Object 클래스

- java.lang 패키지에 들어있음

- 자바 클래스 계층 구조에서 맨 위에 위치하는 클래스

- 메소드

 

- getClass() : 객체가 어떤 클래스로 생성되었는지에 대한 정보 반환

class Circle {  }
public class CircleTest {
    public static void main(String[] args) {
        Circle obj = new Circle();
        System.out.println("obj is of type " + obj.getClass().getName());
        System.out.println("obj의 해쉬코드=" + obj.hashCode());
    }
}

// obj is of type test.Circle
// obj의 해쉬코드=1554547125

 

- toString() : 객체의 문자열 표현 반환

- equals() : == 연산자 사용해서 객체의 주소가 동일한지 검사

 

8. Wrapper 클래스

- 정수와 같은 기초 자료형을 객체로 포장하고 싶은 경우 사용

int i = 100;
Integer obj = new Integer(i);

 

- 메소드

- 문자열 "100" -> 정수 100 : Integer.parseInt()

- 정수 100 -> 문자열 "100" : Integer.toString()

 

9. 오토박싱

- intValue() 대신

- 랩퍼 객체와 기초 자료형 사이의 변환을 자동으로 해주는 기능

Integer obj;

obj = 10;                      // 정수 -> Integer 객체
System.out.println(obj + 1);   // Integer 객체 -> 정수

 

10. String 클래스

- 메소드

 

 

11. String 클래스의 문자열 기초 연산

- length() : 문자열 길이 반환

- charAt() : String 객체 안에 들어있는 문자 추출 (문자 번호는 0부터 시작)

String s = "Hello World!"
char c = s.charAt(0);         // 'H' 반환

- 2개의 문자열 붙이는 방법

    - concat()

    - + 연산자   (** 더 편함!)

 

- indexOf() : 문자열 안에서 단어 찾기

String s = "The cat is on the table";
int index = s.indexOf("table");

if(index == -1)
    System.out.println("table은 없습니다.");
else
    System.out.println("table의 위치: " + index);

// table의 위치: 18

    - 같은 단어가 여러 번 있는 경우 가장 처음에 나오는 단어의 인덱스 반환

    - 모두 찾고 싶은 경우 반복문 이용!

 

- split() : 문자열을 단어로 분리

String[] tokens = "I am a boy.".split(" ");
for (String token : tokens)
    System.out.println(token);

/**
I
am
a
boy
**/

 

- boolean contains(charSequence s) : s에 지정된 문자들을 포함하고 있으면 true 리턴

- String replace(Charsequence target, Charsequence replacement) : target이 지정하는 일련의 문자들을 replacement가 지정하는 문자들로 변경한 문자열 객체 리턴

- String subString(int beginIndex) : beginIndex 인덱스부터 시작하는 부분 문자열 반환

- String subString(int beginIndex, int endIndex) : beginIndex부터 endIndex(포함x)까지의 부분 문자열 반환

- String trim() : 문자열 앞뒤의 공백 문자들을 제거한 문자열 객체 반환

 

12. StringBuffer 클래스

- String 클래스의 경우 빈번하게 문자열을 변경할 때 비효율적

∵ 새로운 String 객체를 생성하고 기존의 내용을 복사해야 하기 때문

 

 

- 메소드

    - append()

    - insert()

    - 어떤 타입의 데이터도 받을 수 있도록 중복 정의 되어있음

StringBuffer sb = new StringBuffer("Hello");   // 16바이트 공간 할당
int length = sb.length();        // 5
int capacity = sb.capacity();    // 21

StringBuffer sb = new StringBuffer("10+20=");
sb.append(10+20);
sb.insert(0, "수식 ");
// sb = "수식 10+20=30"

 

13. Math 클래스

- 지수, 로그, 제곱근, 삼각함수와 같은 기본적인 수치 연산을 위한 메소드 제공

 

14. Random 클래스

- 난수 발생

import java.util.*;
public class RandomTest {
    public static void main(String[] args) {
        Random random = new Random();
        for (int i = 0; i < 10; i++) 
            System.out.print(random.nextInt(100) + ", ");
    }
}

// 12, 48, 9, 3, 44, 84, 60, 4, 34, 50,

 

15. Array 클래스

import java.util.*;

public class ArraysTest {
    public static void main(String[] args) {
        int[] array = {9, 4, 5, 6, 2, 1};
        Arrays.sort(array);               // 정렬
        printArray(array);
        System.out.println(Arrays.binarySearch(array, 9));     // 9 탐색
        Arrays.fill(array,8);       // 배열 8로 채움
        printArray(array);
    }
    
    private static void printArray(int[] array) {
        System.out.print("[");
        for(int i = 0; i < array.length; i++)
            System.out.print(array[i] + " ");
        System.out.println("]");
    }
}

/**
[1 2 4 5 6 9 ]
5
[8 8 8 8 8 8 ]

 

16. Calender 클래스

- 추상 클래스, 날짜와 시간에 대한 정보

- 특정 시각을 연도, 월, 일 등으로 변환하는 메소드

 

17. 예외처리

- 오류가 발생했을 때 오류를 사용자에게 알려주고, 모든 데이터를 저장하게 한 후에 사용자가 프로그램을 종료할 수 있도록 하는 것이 바람직!

- 예외: 잘못된 코드, 부정확한 데이터, 예외적인 상황에 의해 발생하는 오류

- ex) 0으로 나누는 연산, 배열의 인덱스가 한계를 넘는 경우, 디스크에서 하드웨어 오류 발생 등

 

public class DivideByZero {
    public static void main(String[] args) {
        int result = 10 / 0;
        System.out.println("나눗셈 결과: " + result);
    }
}

// 오류

 

18. try-catch 블록

try {
    // 예외가 발생할 수 있는 코드
} catch (예외 클래스 변수) {
    // 예외를 처리하는 코드
}
// 아래 구문은 생략 가능
} finally {
    // 여기 있는 코드는 try 블록이 끝나면 무조건 실행됨
}

-ex)

import java.util.Scanner;

public class DivideByZeroOk {
    public static void main(String[] args) {
        try {
            int retult = 10 / 0;   // 예외 발생
        } catch (ArithmeticException e) {
            System.out.println("0으로 나눌 수 없습니다.");
        }
        System.out.println("프로그램은 계속 진행됩니다.");
    }
}

// 0으로 나눌 수 없습니다.
// 프로그램은 계속 진행됩니다.

 

19. 예외의 종류

- Error : 너무 심각해서 할 수 있는 방법이 없음 -> 통과

- RuntimeException : 프로그래밍 버그이므로 스스로 고쳐야 함 -> 통과

- Error나 RuntimeException이 아닌 예외 : 반드시 처리해야 함!! -> 검사

 

 

// 배열 인덱스 예외 처리

public class ArrayError {
    public static void main(String[] args) {
        int [] array = { 1, 2, 3, 4, 5 };
        int i = 0;
        
        try  {
            for (i = 0; i <= array.length; i++)
                System.out.print(array[i] + " ");
        } catch ArrayIndexOutOfBoundsException e) {
            System.out.pritnln("인덱스 " + i + "는 사용할 수 없네요!");
        }
    }
}

// 1 2 3 4 5 인덱스 5는 사용할 수 없네요!
// 입력 예외 처리

public class ExceptionTest3 {
    public static void main(String[] args) {
        try { 
            int num = Integer.parseInt("ABC");
            System.out.println(num);
        } catch (NumberFormatException e) {
            System.out.println("NumberFormat 예외 발생");
        }
    }
}

 

20. try - with - resources 문장

- 문장의 끝에서 리소스들이 자동으로 닫혀지게 함

import java.io.*;

public class TryTest {
    public static void main(String[] args) {
        try (FileReader fr = new FileReader("test.txt")) {
            char[] a = new char[50];
            fr.read(a);
            for (char c : a)
                System.out.print(c);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

21. 예외 떠넘기기

- 가끔 메소드가 발생되는 예외를 그 자리에서 처리하지 않고, 자신을 호출한 상위 메소드로 전달하는 편이 더 적절할 수 있음

import java.io.*;

pulbic class ExceptionTest {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("test.txt");
        char[] a = new char[50];
        fr.read(a);
        for (char c : a)
            System.out.print(c);
    }
}

 

'Software > JAVA' 카테고리의 다른 글

[JAVA] Day9. 이벤트 처리  (2) 2023.01.08
[JAVA] Day8. 자바 GUI 기초  (2) 2023.01.08
[JAVA] Day6. 추상클래스, 인터페이스, 중첩클래스  (0) 2022.12.29
[JAVA] Day5. 상속  (0) 2022.12.29
[JAVA] Day 3-4. 클래스와 객체  (2) 2022.12.29

출처) 코뮤니티 모각코 "JAVA를 자바" 과정

 

1. 예외처리가 필요할 때

오류에 부딪힐 때 오류를 없애는 것이 가장 좋지만, 모두 없앨 수 없다면 그것을 제대로 처리하는 것도 중요하다.

오류를 무시할 때도 있고, 적절한 조치를 취해야 할 때도 있다.

 

그 때 사용할 수 있는 것이 "try, catch, throw" 등이다.

 

2. try, catch, finally

 

1) try~catch

 

int[] value = new int[3];

value[3] = 10;

 

위 코드를 실행하면 ArrayIndexOutOfBoundsException 오류가 발생한다.

 

오류 발생 시 "오류 발생" 이라는 문장이 출력되도록 코드를 짜면 아래와 같다.

 

int[] value = new int[3];

 

try {

    value[3] = 10;

} catch (ArrayIndexOutOfBoundsException e) {

    System.out.println("오류 발생");

}

 

위 코드를 실행하면 오류 발생 이라는 문장이 출력된다.

이처럼 예외 처리는 try~catch 문으로 할 수 있다.

 

try {
	실행문
} catch(예외1) {
	예외1 발생 시 실행문
} catch(예외2) {
	예외2 발생 시 실행문
}

 

catch (ArrayIndexOutOfBoundsException e) {

    System.out.println("오류 발생");

}

 

이처럼 괄호 안에는 예외처리 할 오류의 형식과 오류를 칭할 이름(e)을 적는다.

 

2) finally

 

예외가 발생했을 때에도 무조건 실행하고 싶은 코드가 있을 경우 사용하는 것이 finally이다.

예를 들어, 나눗셈에서 0으로 숫자를 나누면 ArithmeticException 오류이다.

 

int num;try {    num = 4 / 0;} cath(ArithmeticException e) {    System.out.println("오류 발생");    num = -1;} finally {    System.out.println("무조건 실행");}

 

System.out.println(num);

 

위 코드는 ArithmeticException 오류가 발생했을 때 오류 발생 문장을 출력하고 num 변수에 -1을 저장한다.또한, 오류와 관계없이 무조건 실행이 출력된다.

 

실행결과는 위와 같다.

'Software > JAVA' 카테고리의 다른 글

[JAVA] Day2. 조건문, 반복문, 배열  (0) 2022.12.27
[JAVA] Day1. 자바 기초  (0) 2022.12.27
[JAVA] 객체지향  (0) 2021.07.22
[JAVA] 배열  (0) 2021.07.20
[JAVA] 스캐너로 입력받기  (0) 2021.07.15

+ Recent posts