1. Student 예제 복습 (List, Iterator, Scanner, 생성자 활용)
2. Lotto 예제 복습 (Method Overriding, List, for each문 활용)
3. Folder-File 예제 복습 (List, Iterator, equals() 활용)
4. 동영상 강의 시청 - String, Object 클래스
5. 동영상 강의 시청 - Java IO
6. 이것이 자바다 Chap 18 Java IO
1. Object 클래스
- java.lang 패키지 소속 (imort 없이 사용할 수 있다)
- Object는 최상위 클래스 (모든 클래스의 조상)
- 어떤 클래스든 오브젝트 타입으로 참조 가능
ex>
Object obj1 = new Object();
Object obj2 = new Bus();
- API
Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.
Object 클래스의 Method
- 모든 클래스가 Object 클래스를 상속받기 때문에 Object 클래스의 메소드를 모든 클래스에서 사용 가능
- 오버라이딩을 목적으로 제공하는 메서드: toString(), equals(), hashCode()
오버라이딩을 위해 준비된 메소드
오버라이딩 Overriding
상속된 메소드를 자식 클래스에서 재정의해서 사용
메소드가 오버라이딩 되면 무조건 자식의 메소드가 호출된다.
1) toString()
- 객체가 갖고 있는 값을 문자열로 바꿔서 반환하는 메소드
- 기본적으로 "클래스명@16진수해시코드"를 리턴
- 어떤 필드를 문자열로 만들것인지 오버라이딩을 통해 설정할 수 있다.
2) equals()
public boolean equals(Object obj) { ... }
두 객체를 비교해서 논리적으로 동등하면 true 리턴 (== 연산자와 같은 결과)
오버라이딩: 어떤 기준으로 값을 비교할지 기준을 설정해야 함
ex> Dice 클래스에서 faceCount를 기준으로 오버라이딩
public boolean equals(Object obj){
// 같은 레퍼런스라면 true
if(this ==obj)
return true;
// Object가 null이면 false
if(obj==null)
return false;
// 클래스 정보가 다르면 false, 클래스 정보는 메모리에 하나 뿐
if(getClass() !=obj.getClass())
return false;
// obj를 Dice 타입으로 형변환해서 비교
Dice other = (Dice) obj;
if(faceCount != other.faceCount)
return false;
return true;
}
3) hashCode()
- 객체를 식별할 하나의 정수값
(객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴하기 때문에 객체마다 다른 값을 갖는다)
- Hash 알고리즘에서 equals() 메소드와 함께 사용하는 경우가 많아, 함께 오버라이딩 한다.
Hash 알고리즘
- map이나 set 같은 자료구조에서 값을 꺼낼 때 사용하는 알고리즘
- 어떤 객체를 자료구조에 넣을때 객체가 갖고 있는 hashCode() 를 호출, 해당되는 버킷을 만든다.
값을 넣을때 equals()로 중복 값을 확인하고 값을 넣는다.
값을 꺼낼 때는 객체의 hashCode()를 구해서 버킷을 찾고 equals()로 해당 객체를 찾는다.
2. String 클래스
- new 연산자를 이용하지 않아도 객체를 생성할 수 있다.
- new 연산자는 새로운 인스턴스가 heap 메모리에 생성된다.
ex>
String str1 = "hello"; - 문자열로 생성하면 상수풀에 저장된다.
String str2 = "hello"; - str1과 같은 객체를 참조한다. (불변 클래스로 값이 바뀌지 않아 또 다른 객체를 생성할 필요가 없음)
String str3 = new String("hello"); - new 연산자를 이용하면 heap 메모리에 객체가 생성된다.
- String은 불변 클래스
ex>
String helloWorld = "Hello World!!!";
String str = helloWorld.substring(5);
substring() 을 이용해도 기존 값에는 영향이 없다.
문자열 +연산.
- 내부적으로는 StringBuffer 인스턴스를 만들어서 리턴하는 것이므로 비효율적
- StringBuffer, StringBuilder 를 직접 이용하는 것이 좋다.
String 메소드
String j= "ParkJaeHee";
String j2 = "JaeHeePark";
System.out.println (j.charAt(0));
System.out.println (j.equals(j2));
System.out.println (j.getBytes() );
System.out.println(j.indexOf("Park"));
System.out.println (j.length() );
System.out.println (j.replace("Park","Happy") );
System.out.println (j.substring(4));
System.out.println(j.substring(0,4));
System.out.println(j.toLowerCase());
System.out.println(j.toUpperCase());
실행 결과>
P
false
[B@1b6d3586
0
10
HappyJaeHee
JaeHee
Park
parkjaehee
PARKJAEHEE
1. IO 패키지
자바에서 데이터는 Stream을 통해 입출력된다.
2. 입력 스트림과 출력 스트림
- 입력 스트림의 출발지: 키보드, 프로그램, 파일
출력 스트림의 도착지: 모니터, 프로그램, 파일
- 자바의 기본적인 데이터 입출력(IO) API는 java.io 패키지에서 제공
파일 시스템의 정보를 얻기 위한 File 클래스와 데이터를 입출력하기 위한 다양한 입출력 스트림 클래스를 제공
- 스트림 클래스
구분
|
바이트 기반 스트림
|
문자 기반 스트림
|
||
입력 스트림
|
출력 스트림
|
입력 스트림
|
출력 스트림
|
|
최상위 클래스
|
InputStream
|
OutputStream
|
Reader
|
Writer
|
하위 클래스
|
XXXInputStream
|
XXXOutputStream
|
XXXReader
|
XXXWriter
|
2.1 InputStream
- InputStream은 바이트 기반 입력 스트림의 최상위 클래스로 추상 클래스이다.
FileInputStream, BufferedInputStream, DataInputStream 등이 상속 받는다.
주요 메서드
리턴 타입
|
메소드
|
설명
|
int
|
read()
|
입력 스트림으로부터 1바이트를 읽고 리턴
(4바이트 int 타입으로 리턴하기 때문에 4바이트 중 마지막 1바이트에 데이터)
|
int
|
read(byte[]b)
|
바이트 배열의 길이만큼 읽고 배열에 저장, 읽은 바이트를 리턴
|
int
|
read(byte[]b, int off, int len)
|
len개 만큼의 바이트를 읽고, 배열 b[off]부터 저장, 읽은 바이트 len개 리턴
|
void
|
close()
|
사용한 시스템 자원을 반납하고 입력 스트림을 닫는다.
|
- OutputStream은 바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스이다.
FileOutputStream, PrintStream, BufferedOutputStream, DataOutputStream 등이 상속 받는다.
주요 메서드
리턴 타입
|
메소드
|
설명
|
void
|
write(int b)
|
출력 스트림으로 1바이트를 보낸다.
(int 값에서 마지막에 있는 1바이트만 출력)
|
void
|
write(byte[]b) |
출력 스트림으로 주어진 바이트 배열 b의 모든 바이트를 보낸다.
|
void
|
write(byte[]b, int off, int len) |
출력 스트림으로 주어진 바이트 배열 b[off]부터 len개까지의 바이트를 보낸다.
|
void
|
flush() |
버퍼에 잔류하는 모든 바이트를 출력한다.
|
void
|
close()
|
사용한 시스템 자원을 반납하고 출력 스트림을 닫는다.
|
2.3 Reader
- Reader 는 문자 기반 입력 스트림의 최상위 클래스로 추상 클래스이다.
FileReader, BufferedReader, InputStreamReader 등이 상속 받는다.
리턴 타입
|
메소드
|
설명
|
int
|
read()
|
입력 스트림으로부터 한 개의 문자를 읽고 리턴한다.
(리턴된 int 4바이트 중 끝에 있는 2바이트에 문자 데이터가 들어있다.)
|
int
|
read(char[] cbuf)
|
문자 배열에 저장하고 실제로 읽은 문자 수를 리턴한다.
|
int
|
read(char[] cbuf, int off, int len)
|
len개의 문자를 읽고 문자 배열 cbuf[off]부터 len개까지 저장한다. len개 리턴
|
void
|
close()
|
|
2.4 Writer
- Writer 는 문자 기반 출력 스트림의 최상위 클래스로 추상 클래스이다.
FileWriter, BufferedWriter, PrintWriter, OutputStreamWriter 등이 상속 받는다.
리턴 타입
|
메소드
|
설명
|
void
|
write(int c)
|
출력 스트림으로 주어진 한 문자를 보낸다.
|
void
|
write(char[] cbuf)
|
출력 스트림으로 주어진 문자 배열의 모든 문자를 보낸다.
|
void
|
write(char[] cbuf, int off, int len)
|
문자배열 cbuf[off]부터 len개의 문자를 보낸다.
|
void
|
write(String str)
|
주어진 문자열을 전부 보낸다.
|
void
|
write(String str, int off, int len)
|
주어진 문자열 off순번부터 len개의 문자를 보낸다.
|
void
|
flush()
|
|
void
|
close()
|
|
'T.I.L' 카테고리의 다른 글
T.I.L 2023-08-30 WED (1) | 2023.08.30 |
---|---|
TIL 2023-08-27 (0) | 2023.08.27 |
TIL 2023-08-25 (0) | 2023.08.25 |
TIL 2023-08-24 (0) | 2023.08.24 |
TIL 2018-12-13 (0) | 2018.12.13 |