목록SelfStudy/JAVA (23)
YJ의 새벽
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/beNjjA/btr8vPiJriI/38uDHrKcKLJeHsvPfECbvk/img.png)
컬렉션 -- 자바에서 제공하는 자료구조를 담당하는 프레임워크. -- 추가, 삭제, 정렬 등 기능처리가 간단하게 해결되어 자료구조적 알고리즘을 구현할 필요 없음. -- 크기의 제약이 없다. -- 여러 타입의 데이터가 저장 가능하다. List ( ArrayList, Vector , LinkedList ) -- 자료들을 순차적으로 나열한 자료구조, -- 인덱스로 관리되며, -- 중복 O Set ( HashSet , LinkedHashSet, TreeSet ) -- 저장 순서가 유지되지 않고, -- 중복 X ( null 도 중복을 허용하지않는다 ) Map ( HashMap , HashTable ) -- 키와 값 으로 구성되어 있으며, -- 키는 중복저장을 하용하지않고 , 값은 중복 저장 가능. -- 키가 중복되..
--partitioningBy () : 스트림을 2분할 한다. import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; class Student{ String name; boolean isMale; //성별 int hak; //학년 int ban; //반 int score; Student(String name, boolean isMale , int hak, int ban, int score){ this.name =name; this.isMale = isMale; this.hak = hak; this.ban = ba..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rh2cL/btrYMYhQLcy/J9Qi0QJ1e2kUl4hRVNmJp0/img.png)
스트림 ?? --다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것. ***스트림만들기 -> 중간연산 (여러번 가능) -> 최종연산 (1번) 중간연산 : 연산결과가 스트림인 연산. 반복적 사용가능. 최종연산 : 연산결과가 스트림이 아닌 연산. 단 한번만 적용가능. (스트림요소 소모) ex ))) stream. distinct(). limit(5) . sorted() . forEach (System.out :: println) 중 간 연 산 최종연산 --스트림은 데이터 소스로부터 데이터를 읽기만 할뿐, 변경하지않는다. --스트림은 Iterator 처럼 일회용이다. --최종연산 전까지 중간연산이 수행되지 않는다. --지연된 연산. --스트림은 작업을 내부 반복으로 처리한다. --스트림의 작업을 병렬로 처..
람다식과, 함수형인터페이스 알고봐야합니다. ** 메서드참조 (클래스이름 :: 메서드이름) --하나의 메서드만 호출하는 람다식은 메서드참조로 더 간단히 할 수있다. --static 메서드참조 (x) -> 클래스명.method(x) = 클래스명 :: method 람다식 ---- > 메서드참조 --인스턴스메서드 참조 (obj,x) -> obj.method(x) = 클래스명 :: method 람다식 ---- > 메서드참조 EX )))) import java.util.function.Function; public class Example6 { public static void main(String[] args) { //Supplier 입력X 출력O //Supplier s = () -> new MyClass(); ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bc4pph/btrYAlFW9hV/3Ss5MUsK3RWqefwzDwKAOK/img.png)
--자주 사용되는 다양한 함수형 인터페이스를 제공. Runnaber --> void run() --> 매개변수도 O, 반환값도 X. Supplier --> T get() --> 매개변수는 X, 반환값만 O. Customer --> void accept (T t) --> 매개변수만 O, 반환값은 X. Functin --> R apply (T t) --> 일반적인 함수. 하나의 매개변수를 받아서 결과를 반환 Predicate --> boolean test (T t) --> 조건식 표현하는데 사용, 매개변수는 하나. 반환은 boolean **매개변수가 2개인 함수형 인터페이스 BiConsumer --> void accept (T t, U u) --> 두개의 매개변수만 O, 반환값이 X BiPredicate -..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/n2RI9/btrYEiU0ydF/jhBh9Sf7Z2UZo4ElZRK370/img.png)
람다식?? 함수는 일반적 용어, 메서드는 객체지향개념. 함수는 클래스에 독립적, 메서드는 클래스에 종속. 근본은 같다. --익명(이름이없는) 함수 --함수 (메서드) 를 간단한 식 으로 표현하는 방법. --반환값이 있을때, return 문 생략가능. ( ; 세미콜론 ) 안붙인다. --람다식은 익명 함수가 아니라 익명 객체이다 ! public class Example2 { public static void main(String[] args) { //Object obj = (a , b) -> a > b ? a : b ; //람다식 , 익명객체. Object obj = new Object() { int max ( int a , int b ) { // b ? a : b ; } }; int value = obj...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dQIpAG/btrYtvVIPVt/U4q79v5Vpxi9D15IXAftDk/img.png)
동기화 ( synchronization ) --한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는것. --동기화하려면 간섭받지 않아야 하는 문장들을 "임계영역"으로 설정. --임계영역이란 : 중단한 작업을 다른쓰레드가 들어오지 못하는 영역. --임계영역은 락(lock)을 얻은 단 하나의 쓰레드만 출입 가능. ( 객체 1개에 락1개 ) --synchronized 를 이용한 동기화. 2가지. -- 임계영역은 한번에 한개의 쓰레드만 들어갈수있기에 갯수를 최소화하는게 좋다. ( 메서드보다 특정한영역을 지정하는게 좋음 ) class Account { private int balance = 1000; //private 으로해야 동기화의 의미가있다. public synchronized int getBal..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bHC3Bg/btrYpg495DY/yI7MWeAT3mHQzcVQrVkgXK/img.png)
**static void sleep : 천분의 일초. 5초 ( 5000 ) **void join : 다른 쓰레드를 기다린다. **void interrupt : 쓰레드를 깨운다. **void suspend : 일시정지 **void resume : 다시 재생 **static void yield : 양보 **static 붙은메서드는 자기 자신에게만 호출 가능하다. static void sleep() --현재 쓰레드를 지정된 시간동안 멈추게한다. ( 자기자신 ) --예외처리를 꼭 해야한다. (InterruptedException이 발생하면 깨어남 ) --특정 쓰레드를 지정해서 멈추게하는것은 불가능 . class ThreadEx extends Thread{ // thread1 생성 @Override public ..