본문 바로가기

T.I.L

TIL 2018-12-12

 

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 메소드
리턴 타입
메소드명(매개 변수)
설명
char
charAt(int index)
특정 위치의 문자 리턴
boolean
equals(Object anObject)
두 문자열을 비교
byte[]
getBytes()
byte[]로 리턴
byte[]
getBytes(Charset charset)
주어진 문자셋으로 인코딩한 byte[]로 리턴
int
indexOf(String str)
문자열 내에서 주어진 문자열의 위치를 리턴
int
length()
총 문자의 수를 리턴
String
replace(CharSequence target, CharSequence replacement)
target 부분을 replacement로 대치한 새로운 문자열을 리턴
String
substring(int beginIndex)
beginIndex 위치에서 끝까지 잘라낸 새로운 문자열을 리턴
String 
substring(int beginIndex, int endIndex)
beginIndex 위치에서 endIndex 전까지 잘라낸 새로운 문자열을 리턴
String
toLowerCase
알파벳 소문자로 변환한 새로운 문자열을 리턴
String
toUpperCase
알파벳 대문자로 변환한 새로운 문자열을 리턴
String
trim
앞뒤 공백을 제거한 새로운 문자열을 리턴
String
valueOf(int i)
valueOf(double d)
기본 타입값을 문자열로 리턴
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()
사용한 시스템 자원을 반납하고 입력 스트림을 닫는다.
 
2.2 OutputStream
- 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