어느덧 세션1이 끝이났다! 사실 내일이 마지막날이긴 하지만...
기술 모의면접날 이기에 따로 배우는건 없기에 오늘이 마지막이라고 하자!
지금까지 왔던 길을 되돌아보면.. 분명 어제 까지 for문 하고 있던것 같은데 어느새 자바 문법을 모두 다 배웠다 뭐가 이리 빠르냐..
또한 두렵기도 하다 아직 세션이 3개나 더 남았는데 하나 배우고 지친 내가 열심히 할수 있을까 하고.. 심지어 자바 문법은 학교에서 맛보기라도 했지만 이제 배우는건 진짜 처음 배우는 것들이다!
말은 이렇게 해놓고 또 잘 적응해서 S2 회고에도 오늘은 할만 했다. 라고 적을 내 모습이 비춰지긴 한다.
S1도 어렵다 어려웠다 이렇게 얘긴 했지만 다 머리에 담아두긴 했기 때문이다 ㅋㅋ
난 내 자신을 믿는다 다음 세션도 부숴보자!
애너테이션
소스 코드가 컴파일되거나 실행될 때 컴파일러 또는 다른 프로그램에 정보를 전달해준다.
@Override
public void example() {
...
}
}
class example {
@Deprecated
private int old;
@Deprecated
int getOld() { return old; }
}
@SuppressWarnings - 컴파일 경고 메시지가 나타나지 않게 할때 사용
@FunctionalInterface - 함수형 인터페이스를 선언할 때, 컴파일러가 함수형 인터페이스 선언이 올바른지 확인 할때 사용
람다
람다식 - 메서드를 하나의 식으로 표현, 자바의 문법요소중 하나, 반환타입과 이름 생략 가능
// 기존 방식
void lamdahi() {
System.out.println("람다식 예");
}
// 람다식
() -> {System.out.println("람다식 예");}
람다식도 객체이기 때문에 객체를 먼저 생성해야 한다.
그렇기에 자바의 함수형 인터페이스를 사용하는데 함수형 인터페이스는 단 하나의 추상 메서드만 선언할수 있다. -> 람다식과 인터페이스 메서드가 1:1 매칭되어야 하기 때문
@FunctionalInterface
interface LamdaInterface {
void ex();
}
public class LamdaExample {
public static void main(String[] args) throws Exception {
LamdaInterface example = () -> System.out.println("ex() 호출");
example.ex();
}
}
//출력
ex() 호출
메서드 참조 - 람다식에서 불필요한 매개변수를 제거할 때 사용
정적 메서드 참조 - 클래스 :: 메서드
인스턴스 메서드 참조 - 참조 변수 :: 메서드
생성자 참조 - 클래스 :: new
스트림
배열 또는 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 하는 반복자
스트림의 핵심적인 특징은 4가지다.
1. 스트림은 생성,중간 연산,최종 연산 세 단계의 파이프라인으로 구성
2. 스트림은 원본 데이터 소스를 변경하지 않음
3. 스트림은 일회용
4. 스트림은 내부 반복자
배열 스트림 생성 -> Arrays.stream() 또는 Stream.of()
ex ) Stream stream = Arrays.stream(arr); , Stream stream = Stream.of(arr);
Arrays 클래스에는 int,long,double과 같은 기본형 배열을 데이터 소스로 스트림을 생성하는 메서드도 있다. sum(), average()등 유용한 메서드 사용가능
컬렉션 스트림 생성 -> stream() ex) Stream stream = list.stream();
필터링(filter() , distinct() )
매핑(map()) - 원하는 필드를 추출하거나 특정 형태로 변환할때 사용
정렬(sorted()) - 정렬을 할때 사용
스킵(skip()) - 스트림의 일부 요소를 건너뛰고 싶을때 사용
리미트(limit()) - 스트림의 일부를 자를때 사용
peek() - forEach() 처럼 요소들을 순회할때 사용 forEach()와 차이점은 중간 연산자이다.
기본 집계(sum() , count() , average(), max() , min()) - 말그대로 집계
매칭(allMatch(), anyMatch(), noneMatch()) - 조건을 만족하는지 안하는지 여부 판단
요소 소모(reduce()) - 스트림 요소를 줄여가며 연산을 수행하고 결과 반환
요소 수집(collect()) - 스트림 요소를 다양한 타입의 결과로 수집하고 싶은 경우 사용
파일 입출력(I/O)
FileInputStream - 파일 내용을 출력할때 이용
FileOutputStream - 파일을 생성할때 이용
FileReader - 파일을 읽을때 이용
FileWriter - 파일에 문자열을 입력할때 이용
File - 파일과 디렉토리에 접근 할때 사용
스레드(Thread)
프로세스 - 실행 중인 애플리케이션
스레드 - 하나의 코드 실행 흐름
메인 스레드 - 가장 먼저 실행되는 메서드는 main 메서드인데 메인 스레드가 main 메서드를 실행시켜준다.
멀티 스레드 - 하나의 프로세스는 여러 개의 스레드를 가질 수 있다 .
run()메서드는 Runnable 인터페이스와 Thread 클래스에 정의
방법 1 - Runnable 인터페이스를 구현한 객체에서 run()을 구현
방법 2 - Thread 클래스를 상속 받은 하위 클래스에서 run()을 구현
생성하는 것만으로는 run() 내부 코드가 실행되진 않음, start()메서드를 호출해야함.
스레드의 이름 조회 - 스레드의_참조값.getName()
스레드의 이름 설정하기 - 스레드의_참조값.setName()
스레드 인스턴스의 주소값 얻기 - Thread.currentThread()
임계 영역 - 단 하나의 스레드만 코드를 실행할 수 있는 코드 영역
락 - 임계 영역을 포함하고 있는 객체에 접근 할 수 있는 권한
임계 영역을 지정하는 방법 - 메서드 반환 타입 좌측에 synchronized 키워드를 작성 , 특정 영역을 synchronized 키워드와 함께 소괄호 안에 해당 영역이 포함된 객체의 참조를 넣고, 중괄호({})로 블럭을 열어, 블럭 내에 코드를 작성
JVM(Java Virtual Machine)
JVM - 자바 프로그램을 실행시키는 도구, 자바와 운영체제 사이에서 통역가 역할을 수행해 운영체제로 부터 독립적이다.
Garbage Collection - 메모리를 자동으로 관리하는 프로세스, 더 이상 사용하지 않는 객체를 찾아 삭제하거나 제거해 메모리를 확보한다.