본문 바로가기

프로그래밍/JAVA

(24)
[ JAVA ] 문자기반 스트림 1. Reader와 Writer ▶ Reader/Writer는 문자기반의 스트림의 조상이다. ▶ Reader/Writer의 메서드는 byte배열 대신 char배열을 사용한다는 것 외에는 InputStream/OutputStream의 메서드와 다르지 않다. ▶ 문자기반 스트림, 즉 Reader/Writer 그리고 그 자손들은 여러 종류의 인코딩과 자바에서 사용하는 유니코드(UTF-16)간의 변환을 자동적으로 처리해준다. ▶ Reader는 특정 인코딩을 읽어서 유니코드로 변환하고 Writer는 유니코드를 특정 인코딩으로 변환하여 저장한다. 메서드 설 명 abstract void close() 입력스트림을 닫음으로써 사용하고 있던 자원을 반환한다. void mark(int readlimit) 현재위치를 표시해..
[ JAVA ] 바이트기반의 보조스트림 1. FilterInputStream과 FilterOutputStream protected FilterInputStream(InputStream in) public FilterOutputStream(OutputStream out) ▶ 보조스트림은 자체적으로 입출력을 수행할 수 없기 때문에 기반스트림을 필요로 한다. ▶ FilterInputStream/FilterOutputStream은 InputStream/OuputStream의 자손이면서 모든 보조스트림의 조상이다. ▶ FilterInputStream/FilterOutputStream은 상속을 통해 원하는 작업을 수행하도록 읽고 쓰는 메서드를 오버라이딩해야 한다. ▶ 생성자 FilterInputStream(InputStream in)는 접근 제어자가 p..
[ JAVA ] Optional<T>와 OptionalInt public final class Optional { private final T value; // T타입의 참조변수 ... } ▶ Optional은 지네릭 클래스로 'T타입의 객체'를 감싸는 래퍼 클래스이다. ▶ Optional타입의 객체에는 모든 타입의 참조변수를 담을 수 있다. ▶ 최종 연산의 결과를 Optional객체에 담아서 반환하여 Optional에 정의된 메서드를 통해 null체크를 간단히 처리할 수 있다. ① Optional객체 생성하기 ▶ Optional객체를 생성할 때는 of() 또는 ofNullable()을 사용한다. ▶ empty() : Optional타입의 참조변수를 기본값으로 초기화할 떄 사용한다. // Optional 객체 생성 String str = "abc"; Optiona..
[ JAVA ] 스트림(stream) - ② 3. 스트림의 중간연산 ① 스트림 자르기 - skip(), limit() Stream skip(long n) Stream limit(long maxSize) // 기본형 스트림에도 skip()과 limit()이 정의되어 있으며, 반환 타입이 기본형 스트림이다. IntStream skip(long n) IntStream limit(long maxSize) ▶ skip()과 limit()은 스트림의 일부를 잘라낼 때 사용한다. ex) skip(3)은 처음 3개의 요소를 건너뛴다. limit(5)는 스트림의 요소를 5개로 제한한다. // 10개의 요소를 가진 스트림에 skip(3)과 limit(5)를 순서대로 적용하면 // 4번째 요소부터 5개의 요소를 가진 스트림이 반환된다. IntStream intStre..
[ JAVA ] 스트림(stream) - ① 1. 스트림이란? ▶ 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓음 ▶ 스트림은 데이터 소스가 무엇이던 간에 같은 방식으로 다룰 수 있게 하고, 코드의 재사용성을 높임 String[] strArr = {"aaa", "bbb", "ccc"}; // 문자열 배열 List strList = Arrays.asList(strArr); // 문자열을 저장하는 List Stream strStream1 = strList.stream(); // 스트림을 생성 Stream strStream2 = Arrays.stream(strArr); // 스트림을 생성 // 스트림으로 데이터 소스의 데이터를 읽어서 정렬하고 화면에 출력하는 방법 strStream1.sorted().forEac..
[ JAVA ] 쓰레드의 실행제어 효율적인 멀티쓰레드 프로그램을 만들기 위해서는 보다 정교한 스케줄링을 통해 프로세스에게 주어진 자원과 시간을 여러 쓰레드가 낭비없이 잘 사용하도록 프로그래밍 해야 한다. ⭐️ 쓰레드의 스케줄링과 관련된 메서드 메서드 설 명 static void sleep(long milllis) static void sleep(long millis, int nanos) 지정된 시간(천분의 일초 단위)동안 쓰레드를 일시정지시킨다. 지정한 시간이 지나고 나면, 자동적으로 다시 실행대기상태가 된다. void join() void join(long millis) void join(long millis, int nanos) 지정된 시간동안 쓰레드가 실행되도록 한다. 지정된 시간이 지나거나 작업이 종료되면 join()을 호출한 쓰..
[ JAVA ] 지네릭스(Generics) - ③ 1. 와일드 카드 지네릭 타입이 다른 것만으로는 오버로딩이 성립하지 않음. 이럴 때 사용하기 위해 고안된 것이 '와일드 카드'이다. 와일드 카드는 기호 '?'로 표현. 와일드 카드는 어떠한 타입도 될 수 있다. : 제한 없음. 모든 타입이 가능
[ JAVA ] 지네릭스(Generics) - ② 1. 지네릭 클래스의 객체 생성과 사용 class Box { ArrayList list = new ArrayList(); void add(T item) { list.add(item); } T get(int i) { return list.get(i); } ArrayList getList() { return list; } int size() { return list.size(); } public String toString { return list.toString(); } } ① 참조변수와 생성자에 대입된 타입(매개변수화된 타입)이 일치해야 한다. Box appleBox = new Box(); // OK Box appleBox = new Box(); // 에러 // 두 타입이 상속관계라도 일치해야 한다. /..