본문 바로가기
국비 학원 가서 개발새발

국비학원 12일차) 예외, Set(HashSet,TreeSet) Iterator //예습:제네릭,IO와 스트림,

by 휴일이 2022. 10. 14.



추상메소드를 하나라도 가지고 있으면 -> 추상 클래스
일반 클래스에 abstract 만 붙여도 추상 클래스로 인식하긴 함
super <-부모꺼 자식이 가져온 거

ArrayList<부모> list = new ArrayList<부모>();
해서 자식 클래스 넣기 가능


예외
try - catch
try - catch - catch... 캐치블럭 여러개도 가능(Exception으로 통일도 가능)
try - catch - finally
ㄴfinally 는 에러 나든, 안 나든
try catch가 성립 하든 안 하든 무조건 실행되는 블럭


Set(HashSet)
순서X 중복X
set.contains() <-괄호 안에 있는 게 포함되어 있나요? true or false
set.clear() <-전부 지워주세요

List / Set 은 모두 Collection에 포함되어 있는 거라서
명령어 다 같아용!!!


Set(TreeSet)
순서X 중복X
순서는 상관 없으나 자동 정렬 해줌
명령어 다 같아요~ Collection에 포함 되어 있음!


Iterator
Collection(데이터 집합) 안 요소들을 열거하기 위한
표준을 제공하는 인터페이스

hasNext()
다음 요소가 있는지 true or false(boolean)
요소가 존재할 때까지 next() 수행(다음꺼 보여줘!)

while(it.hasNext()) {
System.out.println(it.next())
}
이런 식으로 사용 ! !


다음주
io / 쓰레드 /네트워크
io 메모장으로 이용하긴 하는데
DB있는데 굳이??? 활용도 떨어짐
시스템 관리하는 사람들이 많이 씀 우린 웹이라 잘 안 씀

쓰레드, 네트워크도 마찬가지~
간단하게만 볼 거예요

Map은 공부해오세용
io도 기본이에용

SQL문 배움
DB 한 다음에 자바 넘어와서
JDBC 배울 거예용

DTO == VO
Service / DAO(상속인터페이스) DAOINP (상속받는거)


자바스크립트, Jquery

 

 

 

 

 

 

--------------------예습

 

 

<Generics> - 객체를 다루는 메서드,컬렉션 클래스에 컴파일시 타입 체크

객체 타입을 컴파일 시 체크하여 객체 타입 안정성 높임, 형변환 번거로움 줄어듬

ArrayList<Student> sList = new ArrayList<Student>();   <---- <> 가 제네릭

sList.add(new Student()); //OK

sList.add(new Tv()); //Error

 

저장된 객체 꺼낼 때, 형변환 할 필요가 없어 편리함

장점

1 타입 안정성 제공

2 타입 체크 / 형변환 할 필요가 없어 코드 간결해짐

 

 

<타입 변수> - ' < > ' 안에 있는 T <T>

Map<K, V> - key타입변수, value 타입 변수 //여러개인 경우 , 로 나열

 

ArrayList같이 제네릭 클래스를 생성할 땐, 실제 타입 지정해줘야 함

ArrayList<Tv> tvList = new ArrayList<Tv>(); //Tv타입만 담을 수 있다

 

 

<용어> class B <T> {}

Box<T> 제네릭 클래스, 'T의 Box' or 'T Box'라고 읽음

T 타입 변수, 타입 매개변수

Box 원시 타입(raw Type)

 

ArrayList<Tv> list = new ArrayList<Tv>();

                 ㄴ참조변수 제네릭타입  ㄴ 생성자 제네릭 타입 //반드시 일치해야함

 

ArrayList<Product> list = new ArrayList<Product>();

list.add(new Tv()); //Product의 자손이라 OK

list.add(new Audio()); //Product의 자손이라 OK

- 단, 저장 객체를 꺼낼 땐 형변환 필요함

Tv t = (Tv)list.get(0);    <-Product의 자식 객체라 형변환 필요

 

 

Iterator<E>

Iterator<Student> it = list.iterator(); //Student타입 리스트만 가능

 

HashMap<K,V> - K,V도 전부 참조형 타입

HashMap<String, Student> map = new HashMap<String, Student>();

map.put("자바왕",new Student("자바왕",1,1,100)); //각각 맞는 타입으로 저장

 

 

<제한된 제네릭 클래스> - 타입 종류 제한?

제네릭 타입에 extends 사용하면, 특정 타입의 자손들만 대입 가능(인터페이스도 동일)

class FruitBox<T extends Fruit> //Fruit타입의 자손들만 타입 지정 가능

<T extends Fruit & Eatable> // & 기호 붙이면 인터페이스도 OK

- static 멤버에 타입 변수 붙이는 건 불가

 

 

<와일드 카드> - 다형성

<? extends T> T와 그 자손들만 가능(상한제한) - 얘를 마니 씀

<? super T> T와 그 조상들만 가능(하한 제한)

<?> 제한X 모든 타입 가능(? extends Object와 동일)

ArrayList<? extends Product> list = new ArrayList<Tv>();

ㄴ Product 타입과 그 자손들만 가능

 

 

<제네릭 메서드> 메서드 선언부에 제네릭 타입이 선언 된 메서드

static <T> void sort(List <T> list, Comparator<? super T> c)

앞 T와 뒤 T는 별개

클래스에도 정의 가능함

static 멤버는 타입 매개변수 사용 불가하지만

메서드가 제네릭 타입이면 OK

 

 

 

 

<입출력 I/O와 스트림> Input 입력 Output 출력

스트림(Stream) 두 대상을 연결하고 데이터를 전송해주는 "연결 통로"

 

                                          입력스트림

Java                       <--------------------- 파일(test.txt)

int ch=in.read();       Hello                   Hello

out.write("world")  dlrow                     

                              ------------------------->

                                     출력스트림

 

FIFO (First In First Out) 이라고 보면 됨 Queue와 같음

 

 

<바이트 기반 스트림> InputStream OutputStream / 바이트 단위로 데이터 전송

 

입력

File(InputStream,Out....)   파일 입출력

ByteArray(InputStream,Out...) 메모리(byte배열)

Piped(InputStream,Output...) 프로세스(프로세스간의 통신)

Audio(InputStream...Out..) 오디오 장치

 

 

InputStream 읽기

abstract int read() : 1byte를 읽어온다(0~255) 더 이상 읽을 게 없으면 -1 반환

int read(byte[] b) : b 크기만큼 바이트를 읽어서 채우고, 읽은 바이트의 "수"를 반환(배열 저장값)

int read(byte[] b, int off, int len) : b의 인덱스(off)부터 len 개 까지 읽는다

ㄴb[10], 3, 5 -> b의 index 3부터 5개만 읽음 [3][4][5][6][7]

close() : 필수!!!스트림 닫고 자원 반환

 

OutputStream 출력

abstract void write(int b) : 1바이트를 출력(하나씩 출력)

void write(byte[] b) : b의 모든 바이트 출력(배열 저장 내용 전부)

void write(byte[] b,int off,int len) : 배열 b의 인덱스off부터 len개의 바이트 출력

void flush : 버퍼 잔류 모든 바이트 출력

close() : 필수!!!스트림 닫고 자원 반환

 

 

 

<문자 기반 스트림> Reader입력 Writer 출력

char는 2byte라서, 문자 기반 스트림을 이용해야 함

InputStream -> Reader

OutputStream -> Writer

 

<문자 읽기> Reader

int read() : 1개의 문자 읽고 리턴(더 이상 읽을 문자 없으면 -1)

int read(char[] c) : 문자를 읽어 한자씩 배열에 저장하고 읽은 문자 수 리턴

int read(char[] c,int off, int len) : c의 [off]에서 부터 len개 만큼 읽기

void close() : 입력 스트림 닫고 사용 메모리 해제

 

<문자 출력> Writer

void write(int c) : 매개값인 한 문자 출력

void write(char[] c) : 배열의 모든 문자 출력

void write(char[] c,int off,int len) 배열c의 [off]부터 len개의 문자 출력

void write(String str) 매개값 문자열 출력

flush() : 버퍼 잔류 문자 출력 비우기

close() : 출력 스트림 닫고 메모리 해제

728x90