본문 바로가기

JAVA공부(이것이 자바다)

(17)
입출력스트림 입출력스트림은 forEach로 안도는게 좋다 왜냐면 읽어온 크기만큼 돌아야하는데 내가 읽지 않은 부분까지 순회하게 되기 때문이다. try { InputStream is = new FileInputStream("C:/Temp/test2.db"); byte[] data = new byte[100]; while(true) { int num = is.read(data);//읽어온 수 리턴~ if(num == -1) break; for(int i=0; i= 0) { out.write(buffer, 0, read); transferred += read; } return transferred; } 문자 변환 스트림 문자 셋의 종류를 지정할 수있다. public static String read() throws Exc..
스트림 람다식은 데이터가 많을 때는 느리다. 하지만 데이터가 적을 때는 직관적이고 좋다. 스트림은 병렬처리를 해서 속도를 극대화하는 용도이다. 컬렉션의 정보를 전달해서 컬렉션을 반복 처리하기 위해서 사용한다 Stream stream = list.stream(); stream.forEach(item -> {...}); stream과 iterator의 차이 1.내부반복자 이므로 처리 속도가 빠르고 병렬처리에 효율적이다. -> 콜백함수인 인터페이스 참조변수를 통해 전달되기 때문에 속도가 빠르지 않다 하지만 병렬처리를 했을때는 빠르다. 2.람다식으로 다양한 요소처리를 정의 할 수 잇다. 3.중간처리와 최종처리를 수행하도록 파이프라인을 형성할 수 잇다. --> 스트림은 멀티스레드 병렬 처리시 fork와 join을 자동으..
컬렉션 자료구조 Set 저장순서가 유지되지 않는 컬렉션, 저장 순서가 유지 되지 않는다. 중복이 허용되지 않는다. 같으면 저장을 하지 않기 때문에 처음 데이터가 남아있다. Object를 통해서 매개변수를 받는 거는 equals와 hashCode를 재정의해야한다. HashSet hashCode()값과 equals 값이 둘다 true면 동일객체로 판단하고 중복저장하지 않는다 Set set = new HashSet(); Iterator 반복자를 얻어와서 객체를 하나씩 순회하는 것이다 키가 많아지면 for-each보다 성능이 좋아진다. Set set = new HashSet(); Iterator iterator = set.iterator(); --> iterator로 순회하면서 제거할 것을 찾아 삭제하는 건 멍청한 짓. 걍 r..
스레드 멀티스레드 사용이유 작업을 동시에 해서 더 빠르게 처리하기 위함 스레드 정의 방법 4개 ① //Runnable을 상속받아 run 메소드를 재정의 class BeepPrintImpl implements Runnable { @Override public void run() { for(int i=0; i call()로 해결!! -submit()를 통해 Collable인터페이스를 재정의 해서 call()함수를 불러 와 Future객체를 통해 call()함수가 리턴한 값을 읽어 올 수 있다. 컬렉션 자료구조 컬렉션 자료구조를 바탕으로 한 객체들을 추가, 삭제, 검색할 수 있는 인터페이스와 클래스 도구들이다. List 객체 추가 boolean add(E e) - 주어진 객체를 맨끝에 추가 void add(int i..
java.base 이어서 리플렉션 기존프로그램의 변경없이 완전히 동적인 코드를 짜기 위한 도구이다. Constructor 클래스 getConstructor() -> 생성자 정보를 얻어온다. newInstance() -> 객체 생성을 한다. getMethods() - > 객체 내에 어떤 함수가 있는지 함수명 리스트를 받아온다. Method 클래스 ->단점 : 존재하지 않는 함수에 대해서 오류를 말하지 않는다 Constructor의 getMethods()를 통해서 함수명이 존재하는지 확인해야한다. getMethod() - > 함수를 검색하는 메소드, if문을 통해서 함수가 있는지 확인하고 사용해야한다. invoke() - > 함수 호출을 하는 메소드, 함수를실행할때 필요한 객체정보와 함수에 대한 인자를 전달해 주어야한다. publi..
java.base 모듈 java.base는 모든 모듈이 의존하는 기본 모듈로 모듈 중 유일하게 requires하지 않아도 사용할 수 있다. Object 클래스 모든 클래스가 암시적으로 상속받는 최상위 클래스이다. object클래스가 가지고 있는 함수는 equals()와 hashCode(), toString()가 있는데 이를 오버라이딩해서 사용한다. --equals() public boolean equals(Object obj){ if(obj instanceof Member target){ if(id.equals(target.id)){ return true; } } return false; } --hashCode() public int hashCode(){ int hashCode = no + name.hashCode(); ret..
중첩클래스 이어서 라이브러리추가 파일 찾으러 폴더 열기 add external jar 중첩클래스의 바깥클래스 접근 인스턴스 멤버 클래스 - 바깥 클래스의 모든 필드와 메소드 정적 멤버 클래스 - 바깥 클래스의 정적 필드와 정적 메소드 바깥클래스의 객체를 얻으려면 바깥클래스이름.this 이렇게 써야한다. 중첩 인터페이스 UI프로그램에서 이벤트를 처리할 목적으로 많이 활용된다. static - Button객체 없이 ClickListener인터페이스를 사용가능 하다. public class Button{ public static interface ClickListener { void onClick(); } } 익명객체 이름이 없는 객체 익명 자식 객체 - 클래스를 상속해서 만듦 new 부모생성자(매개값,...){ } 익명 구현..
인터페이스 이어서 인터페이스 타입변환 인터페이스를 타입 변환할때 운좋으면 내가 원하는대로 자식객체로 캐스팅 되겠지만 운나쁘면 에러난다. 자식객체가 일치 하지 않는데 변경해야 할 수 있기 때문이다. 그래서 instanceof를 통해 확인해주어야 한다. 인터페이스 참조 변수를 통해 인터페이스에 추상클래스로 정의 되어있는 애들만 불러올 수있다. if( a instanceof C c){//인터페이스 a참조변수가 가리키고 있는 객체가 C클래스라면 바꿔주시오 } 인터페이스 다형성 인터페이스에 어떤 구현 객체가 담겼냐에 따라서 메소드 호출결과가 달라진다. --> 추상클래스랑 비슷 봉인된 인터페이스 무분별한 자식인터페이스 생성을 방지하기 위해 봉인된 인터페이스를 사용한다. sealed 인터페이스를 직접 상속 받는 인터페이스는 non-s..