try-with-resources
1개 이상의 자원을 선언한 try문. try리소스 문이라고도 부른다.
ex) InputStream, BufferdReader 등. close()메서드를 호출하는 것들.
Java7부터 추가된 문법이다.
statement(문법)의 끝에서 각각의 지정해준 리소스가 닫히는 것을 보장한다.
ex)
try (Resource resource = getResource()) {
use(resource);
} catch(...) {
...
}
// 복수의 자원 객체를 전달
try (Resource resource1 = getResource();
Resource resource2 = getResource()) {
use(resource);
} catch(...) {
...
}
일급 컬렉션(First Class Collection):
콜렉션을 Wrapping하면서 다른 멤버 변수가 없는 상태를 일급컬렉션 이라한다.
ex)
Map<String, String> map = new HashMap<>(); map.put("1", "A"); map.put("2", "B"); map.put("3", "C"); // Wrapping 후 public class Student { private Map<String, String> studentClass; public Student(Map<String, String> studentClass) { this.studentClass = studentClass; } }
장점:
비즈니스에 종속적인 자료구조를 갖는다
2. Colletion의 불변성을 보장한다.
* final을 사용하는 것은, 단순히 재할당만을 금지할 뿐, 값 변경이 가능하다는 문제가 있다.
따라서, 불변성을 보장하는 객체가 아주 중요 한 상황에서는 일급 컬렉션 혹은 래퍼 클래스 등의 방법으로 해결해야한다.
* 따라서, 컬렉션의 값을 변경할 수 있는 메서드가 없는 일급 컬렉션을 만들면, 불변 컬렉션이 완성되므로, 불변성을 보장하는 것이다.
3. 상태와 행위를 한 곳에서 관리
* 결제 프로그램을 생성한다 가정하였을 때, 결제 방식의 상태에 따라 지정된 메소드 내에서 전체 결제 값을 계산하기를 원하고 있음에도 기존 방식에서는 **계산 방식을 강제할 수 있는 수단이 없다.**
똑같은 기능을 하는 메소드를 중복 생성할 가능성도 높고, 계산 메소드를 누락할 수도 있는 가능성도 존재하기 때문에,
특정 결제 프로그램에 따라 결제 총 금액을 뽑기 위해서는 사용해야하는 계산식을 컬렉션과 함께 둘 수 있는 것이 좋은데
이를 가능케하는 것이 일급 컬렉션이다.
```java
public class PayGroups {
private List<Pay> pays;
public PayGroups(List<Pay> pays){
this.pays = pays;
}
public Long getTotalPaySum() {
return pays.stream()
.filter(pay -> PayType.isNaverPay(pay.getPayType()))
.mapToLong(Pay::getAmount)
.sum();
}
}
// 사용시?
List<Pay> pays = Array.asList(
...
);
PayGroups payGroups = new PayGroups(pays);
Long totalPaySum = payGroups.getTotalPaySum();
//위와 같이 관리가 가능하다.
```
4. 컬렉션에 이름을 부여한다.
* 변수명에서도 이름을 부여할 수 있지만, 변수명에 이름을 부여하는 것은 특정 그룹에 대한 검색을 시도 할 때, 변수명으로만 검색이 가능하다.
하지만 이는 개발자마다 이름을 다르게 지을 수 있으므로, 검색이 까다롭기 때문에, 검색이 거의 불가능 하다고 볼 수 있다.
또한 변수명에 불과하기 때문에 의미를 부여하기가 어려워 명확한 표현이 불가능하다.
* 일급 컬렉션을 생성 할 경우, 컬렉션을 기반으로 용어 사용 및 검색을 하면 되므로 조금 더 명확한 뜻을 전달하기가 쉬워진다.
자바의 정석 네트워크 끝내기
알고리즘 풀이 1회
try-with-resources에 대하여 공부
일급 컬렉션에 대한 공부
근력운동
BufferdReader의 효율
ArrayList에 크기를 지정에 대하여 공부