본문 바로가기
(학) (공) (web)

04.19(46일차) - Enum, 어노테이션, 자바 Stream

by 만석이 2024. 4. 19.
===문자 변환 보조 스트림===
- 바이트 기반 스트림으로 텍스트 파일을 읽거나 쓸 경우, 한글을 포함한 비 영어권 문자들이 정상적으로 출력되지 않았다.
- 소스 스트림이 바이트 기반의 스트림이고, 입출력 데이터가 문자라면 Reader와 Writer로 변환하여 사용하는 것을 고려해야 한다.

===InoutStramReader===
- 바이트 기반 스트림 InputStream을 문자 기반 스트림인 Reader로 변환하는 보조스트림


--------------------------------------------------------------------------------------------------------------
열거형
- 상수를 가지고 생성되는 객체들을 한 곳에 모아둔 하나의 묶음 (상수 - 바뀌지않는값)
- 상수를 사용자가 지정한 이름으로부터 0부터 순차적으로 증가 시켜준다.(Index값을 가진다.)

Enum클래스가 컴파일될 때 자동으로 추가되는 메서드 
name() : 열거형의 상수의 이름을 문자열로 반환
ordinal : 열거형의 상수가 정의된 순서를 반환
valueOf("String s") : 매개변수를 enum에서 가져온다. 없으면 예외발생
ValueOf(Item.class,String s) : 넘겨받은 class에서 매개변수로 받은 문자열과 같은 상수를 찾아 가져온다.
Values() : 열거형 상수안에 들어있는 내용들은 enum타입의 배열로 반환

--------------------------------------------------------------------------------------------------------------
어노테이션
- 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시키는것
- 어노테이션은 주석(comment)처럼 프로그래밍 언어에 대한 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 수 있다는 장점이있다.
- 어노테이션의 뜻은 주석, 주해, 메모이다.

1.표준어노테이션
- JDK가 제공
- 컴파일시 컴파일러에게 정보를 제공


@Override 컴파일러에게 재정의하는 메서드라는것을 알린다.
@Deprecated 앞으로 사용되지 않을것을 권장하는 대상에게 붙힌다.
@suppressWarnings 경고를 무시해준다.
@SafeVarargs (매개변수에 가변 인수를 쓸 때 발생하는 예외를 억제할 때) 경고를 무시해준다.
@Functionallnterface 함수형 인터페이스로 사용하겠다.


2.메타 어노테이션
- 어노테이션을 만들기 위한 어노테이션
- java.lang.annotaion패키지에 정의되어있다.

어노테이션 만드는법
@interface 어노테이션명{ -> 다른곳에서 @어노테이션명 으로 사용

}

@Target
- 어노테이션이 적용 가능한 대상을 지정

대상의 종류
TYPE : 클래스의 어떤 요소에나 적용 가능, DEFAULT
FLELD : 클래스의 특정 필드
METHOD : 클래스의 메서드
PARAMETER : 메서드의 파라미터
CONSTRUCTOR : 생성자
ANNOTATION_TYPE : 어노테이션 타입 


타입을 여러개 지정하는법
@Target({대상,대상,대상})


@Retention(기간)
- 어노테이션이 유지되는 기간을 지정하는데 사용
SOURCE : 소스코드에 이용, 컴파일 후 사라짐
CLASS : .class파일에 존재하지만 런타임시 사라짐
RUNTIME : 어노테이션이 컴파일러와 런타임에 사용 가능


--------------------------------------------------------------------------------------------------------------

===자바 Stream===
기존 Java에서 컬렉션 데이터를 처리할 때 for, foreach 루프문을 사용하면서 컬렉션 내의 요소들을 하나씩 다루었다.
간단한 처리나 컬렉션의 크기가 작으면 큰 문제가 없지만 복잡한 처리가 필요하거나 컬렉션의 크기가 커지면 루프문의 사용은 성능 저하를 일으키게 되었다.

스트림의 등장
Java8에서 추가된 기능으로 컬렉션 데이터를 선언형으로 쉽게 처리할 수 있다.

복잡한 루프문을 사용하지 않아도 되며 루프문을 중첩해서 사용해야 하는 최악의 경우도 없어졌다.

스트림은 '데이터의 흐름'이다. 배열 또는 컬렉션 객체에 함수를 여러개 조합하여 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다.

람다식을 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있다.


===스트림의 특징===
스트림은 데이터 소스로부터 데이터를 읽기만 할 뿐 원본데이터는 변경하지 않는다.

스트림은 하번 사용하면 닫히기 때문에 다시 사용할 수 없다.

스트림 사용 과정 
1. 스트림 객체 생성
2. 가공하기 : 필터링, 매핑을 통해 원하는 결과를 만들어 가는 작업
3. 결과만들기 : 가공한 결과물을 다시 배열이나, 컬렉션으로 반환받는 작업(출력만도 가능)