[코드스테이츠] S1.Unit9 회고

JinYoung Choi·2023년 1월 10일
0

어느덧 세션1이 끝이났다! 사실 내일이 마지막날이긴 하지만...
기술 모의면접날 이기에 따로 배우는건 없기에 오늘이 마지막이라고 하자!

지금까지 왔던 길을 되돌아보면.. 분명 어제 까지 for문 하고 있던것 같은데 어느새 자바 문법을 모두 다 배웠다 뭐가 이리 빠르냐..

또한 두렵기도 하다 아직 세션이 3개나 더 남았는데 하나 배우고 지친 내가 열심히 할수 있을까 하고.. 심지어 자바 문법은 학교에서 맛보기라도 했지만 이제 배우는건 진짜 처음 배우는 것들이다!

말은 이렇게 해놓고 또 잘 적응해서 S2 회고에도 오늘은 할만 했다. 라고 적을 내 모습이 비춰지긴 한다.

S1도 어렵다 어려웠다 이렇게 얘긴 했지만 다 머리에 담아두긴 했기 때문이다 ㅋㅋ

난 내 자신을 믿는다 다음 세션도 부숴보자!

애너테이션

소스 코드가 컴파일되거나 실행될 때 컴파일러 또는 다른 프로그램에 정보를 전달해준다.

표준 애너테이션 - 자바에서 기본적으로 제공

  • @Override - 메서드 앞에만 붙일 수 있다 , 상위 클래스의 메서드를 오버라이딩하거나 추상 메서드를 구현하는 메서드라는 것을 컴파일러에게 알려줌
    사용하는 이유 - 메서드를 작성할때 개발자가 오타를 내는 경우가 발생하므로
 @Override
    public void example() {
        ...
    }
}
  • @Deprecated - 기존 코드를 호환성 문제로 남겨두어야 하지만 사용하는 것을 권장하지 않을때 사용
class example {
	@Deprecated
	private int old;

	@Deprecated
	int getOld() { return old; }
}
  • @SuppressWarnings - 컴파일 경고 메시지가 나타나지 않게 할때 사용

  • @FunctionalInterface - 함수형 인터페이스를 선언할 때, 컴파일러가 함수형 인터페이스 선언이 올바른지 확인 할때 사용

메타 애너테이션 - 애너테이션을 정의할 때 사용

  • @target - 대상을 지정하는데 사용
  • @Documented - javadoc으로 작성한 문서에 포함되도록 하는 애너테이션
  • @Inherited - 하위 클래스가 애너테이션을 상속받도록 한다. -> 하위 클래스도 상위 클래스에 붙은 애너테이션들이 적용
  • @Retention - 애너테이션 지속 시간을 결정하는데 사용
  • @Repeatable - 애너테이션을 여러 번 붙일 수 있도록 허용

람다

람다식 - 메서드를 하나의 식으로 표현, 자바의 문법요소중 하나, 반환타입과 이름 생략 가능

// 기존 방식
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() )

  • 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()

run()메서드는 Runnable 인터페이스와 Thread 클래스에 정의

방법 1 - Runnable 인터페이스를 구현한 객체에서 run()을 구현

방법 2 - Thread 클래스를 상속 받은 하위 클래스에서 run()을 구현

생성하는 것만으로는 run() 내부 코드가 실행되진 않음, start()메서드를 호출해야함.

스레드의 이름 조회 - 스레드의_참조값.getName()

스레드의 이름 설정하기 - 스레드의_참조값.setName()

스레드 인스턴스의 주소값 얻기 - Thread.currentThread()

스레디 동기화 - 두 스레드가 동일한 데이터를 공유하게 되면 문제가 발생할 수 있는데 이렇게 쓰레드들이 공유된 자원(예를 들어 객체 필드)을 동시에 접근하는 것을 막고, 각 쓰레드들이 순차적으로 혹은 제한적으로 접근하도록 하는 것 -> 임계 영역과 락을 설정한다.

임계 영역 - 단 하나의 스레드만 코드를 실행할 수 있는 코드 영역
락 - 임계 영역을 포함하고 있는 객체에 접근 할 수 있는 권한

임계 영역을 지정하는 방법 - 메서드 반환 타입 좌측에 synchronized 키워드를 작성 , 특정 영역을 synchronized 키워드와 함께 소괄호 안에 해당 영역이 포함된 객체의 참조를 넣고, 중괄호({})로 블럭을 열어, 블럭 내에 코드를 작성

스레드 실행 제어 메서드

  • sleep(long milliSecond) : 일정시간동안 스레드를 잠시 멈춘다.
  • interrupt() : 일시 중지 상태인 스레드를 실행 대기 상태로 복귀시킨다.
  • yield() : 다른 스레드에게 실행을 양보한다.
  • join() : 다른 스레드의 작업이 끝날 때까지 기다린다.
  • wait(), notify() : 스레드 간 협업에 사용

JVM(Java Virtual Machine)

JVM - 자바 프로그램을 실행시키는 도구, 자바와 운영체제 사이에서 통역가 역할을 수행해 운영체제로 부터 독립적이다.

Garbage Collection - 메모리를 자동으로 관리하는 프로세스, 더 이상 사용하지 않는 객체를 찾아 삭제하거나 제거해 메모리를 확보한다.

profile
백엔드 취준생

0개의 댓글