13-1. API
Application Programming Interface
import java.lang.*; (생략)
자바를 사용하면서 필수적인 클래스들을 모아놓은 패키지
1. Math 클래스(수학과 관련)
메소드명(매개변수타입) : 반환형
1. 올림 => Math.ceil(double) : double
2. 반올림 => Math.round(double) : long
3. 버림 => Math.floor(double) : double
4. 절대값 => Math.abs(int/double/long/float) : int/double/long/float)
5. 최소값 => Math.min(int, int) : int
6. 최대값 => Math.max(int, int) : int
7. 제곱근(루트) => Math.sqrt(double) : double
8. 제곱 => Math.pow(double, double) : double
2. String 클래스 => 불변클래스 (변하지 않음을 의미)
String은 클래스지만 new를 사용하여 생성자를 호출하지 않고 대입연산자를 통해서 직접 값을 대입하여 생성한다.
String str = "hello";
리터럴 값 대입 시, String Pool영역에 올라가며, String Pool 안에 같은 리터럴이 존재하면 새로운 주소값의 객체를 생성하지 않고 기존의 주소값을 참조한다.
String str1 = "hello";
String str2 = "hello"; 이면,
String 은 같은 리터럴을 가지면 같은 주소값이다
str1 = str2
String str1 = new String("hello");
String str2 = new String("hello"); 이면,
new String 하면 다른 주소값을 갖지만
equals와 toString과 hashCode()는 override되어서 같은 값을 가지게 된다( 리터럴값으로 변환하게 되어있음)
str1 ≠ str2
str1.toString = str2.toString
str1.equals(new String str2)
str1.hashCode = str2.hashCode
System.identityHashCode(str1) ≠ System.identityHashCode(str2)
1. 단일문자 추출 => 문자열.charAt(int index) : char
2. 문자열합치기 => 문자열.concat(String str) : String
3. 문자열 길이 => 문자열.length() : int
4. 인덱스부터 끝까지 추출 => 문자열.substring(int beginindex) : String
인덱스부터 인덱스까지 추출 => 문자열.substring(int beginindex, int endindex) : String
5. 단일문자 변경 => 문자열.replace(char old, char new) : String
6. 앞뒤 공백제거 => 문자열.trim() : String
7. 대문자로 변경 => 문자열.toUpperCase() : String
소문자로 변경 => 문자열.toLowerCase() : String
8. 배열로 담은 후 배열을 반환 => 문자열.toCharArray() : char[]
# 문자열 합치기
문자열에 문자열을 추가할 수도 있다. 그럴 경우 새롭게 heap메모리에 새로운 공간을 할당하고 새롭게 집어넣는다.
이를 막기위해 임시공간을 만들어 한번에 처리해주는 'StringBuffer'가 있지만,
여기서 동시 제어기능(Thread Safe)기능을 뺀 'StringBulder'를 더 많이 사용한다.
public void method5() {
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" World");
System.out.println(sb);
}
# 문자열 분리하기
방법1. 구분자를 제시해서 해당 문자열을 분리시키는 방법 => 배열이용
public void method6() {
String str = "One,Two,Three,Four";
String[] arr = str.split(",");
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
for문을 다르게 쓸 수도 있다.
(String s라는 변수에 arr배열을 순차적으로 접근한다.)
for(String s : arr) {
System.out.println(s);
}
방법2. 분리된 각각의 문자열을 토큰으로 취급하는 방법 => 토큰이용
public void method7() {
StringTokenizer stn = new StringTokenizer(str, ",");
System.out.println("분리된 문자열의 개수 : " + stn.countTokens());
while(stn.hasMoreTokens()) {
System.out.println(stn.nextToken());
}
}
countTokens() : 분리된 문자열의 개수를 알려주는 메소드
hasMoreTokens() : 토큰이 남아있다면 true, 토큰이 하나도 남아있지않다면 false
nextToken() : 다음 토큰을 지정
3. Wrapper Class : 기본자료형을 객체로 포장해주는 클래스
(기본자료형 <-> Wrapper 클래스)
boolean <-> boolean
char <-> Character
byte <-> Byte
short <-> Short
int <-> Integer
long <-> Long
float <-> Float
double <-> Double
public void method8() {
Integer i1 = 10;
Integer i2 = 15;
System.out.println(i1.equals(i2));
System.out.println(i1.compareTo(i2));
}
equals는 주소값을 비교하고, true/false 값을 반환해준다.
intValue를 이용하여 문자열을 Integer타입으로 변환해보자.
Integet i3 = new Integer("123");
int num = i3.intValue();
System.out.println(num);
String형을 기본자료형으로 바꿀 수 있다. (parse)
String str1 = "10";
String str2 = "15.0";
System.out.println(str1 + str2);
int i = Integer.parseInt(str1);
double d = Double.parseDouble(str2);
System.out.println(i + d);
기본자료형을 String형으로 바꿀 수 있다. (valueOf)
String strI = String.valueOf(10);
String strD = String.valueOf(15.0);
System.out.println(strI + strD);
13-2. I.O(Input/Output)
간단하게 파일을 만들어 볼 수 있다.
java.io 패키지의 File 클래스를 이용한다.
package com.kh.chap01_file;
import java.io.File;
import java.io.IOException;
public class FileRun {
public static void main(String[] args) {
try {
File folder = new File("ff");
folder.mkdir();
File file = new File("ff\\test.txt");
file.createNewFile();
} catch(IOException e) {
e.printStackTrace();
}
}
}
File이란 클래스 안의 객체 중 createNewFile(파일이름/경로)이라는 메소드를 이용해서 파일을 생성해준다. 이때 CheckedException이 발생할 수 있으므로 예외처리를 해주어야 한다. 또한, mkdir() 메소드를 이용하여 파일도 생성할 수 있다.
+ 다른 메소드
isFile() : boolean타입. 파일이니?
getName() : String타입. 파일이름?
getParent() : String타입. 상위폴더?
length() : long타입. 파일크기?
getAbsolutePath() : String타입. 절대경로?
I.O란, 프로그램 상의 데이터를 외부매체(모니터, 스피커, "파일")로 출력하거나, 입력장치(키보드, 마우스, 카메라, 마이크, "파일")로 입력받는 과정이다.
I.O를 진행하려면 프로그램과 외부매체와의 통로(Stream)을 만들어야 한다.
#바이트 스트림 (1Byte)
1. 출력 (Output)
public void FileSave() {
FileOutputStream fout = null;
try {
fout = new FileOutputStream("a_byte.txt");
fout.write(97);
fout.write('A');
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
} fianlly {
try {
if(fout != null) {
fout.close();
}
} catch(IOException e) {
e.printStackTrace();
}
}
}
FileOutputStream() : 파일과 연결되는 통로를 만든다. (매개변수에 true를 넣으면 이어서 작성)
write() 를 이용하여 데이터를 출력할 수 있다. 한글은 2Byte이므로 깨진다.
Stream을 다 사용하고 나면 Close() 를 꼭 해줘야 하는데,
예외가 발생을 했던 안했던 무조건 실행해야 하므로 finally 를 이용하여 작성한다. (예외가 생기면 무시하고 예외를 찾으러 가기 때문)
2. 입력 (Input)
public void fileRead() {
FileInputStream fis = null;
try {
fis = new FileInputStream("a_byte.txt");
int value = 0;
while((value = fis.read()) != -1) {
System.out.println(value);
}
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
} finally {
try {
if(fis != null) {
fis.close();
}
} catch(IOException e) {
e.printStackTrace();
}
}
}
FileInputStream() : 파일과 연결되는 통로를 만든다.
read() 를 이용하여 데이터를 입력받는다. 1Byte 단위로 하나씩 읽는다.
만약 다 읽으면 값이 -1이 출력된다. 그러므로 -1이 입력되기전까지만 입력받는다.
Stream을 다 쓰면 Close() 해준다.
'JAVA > JAVA수업' 카테고리의 다른 글
#15. Set (0) | 2023.07.21 |
---|---|
#14. I.O(Writer/Reader), buffer, Collection, List (0) | 2023.07.20 |
#12. 추상클래스, 인터페이스, 예외처리 (0) | 2023.07.18 |
#11. 상속, 다형성 (0) | 2023.07.17 |
#10. 오버로딩, static, 객체배열, list (0) | 2023.07.14 |