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 |