1. Checked Exception은 왜 생겨났고, 현재는 왜 안쓰는가?
- 쇼규모 프로그램에서는 개발자의 생산성과 코드품질을 향상시킬 수 있으나, 일반적인 대규모 소프트웨어에서는 그렇지 않다.
- 낮은 수준에서 발생하는 특정유형의 CheckedException 의 경우 (File I/O, Network, Database …) 일반적인 응용프로그램에서는 알 필요 없거나 알고싶지 않아한다. 만약 Exception을 캐치한다고 하더라도 적절하게 대응하기 힘든경우가 대부분이라 RuntimeException으로 rethrow처리하는 경우가 많다.
- 코드의 확장성에 이슈가 생길수 있다. 단일 CheckedException 사용은 훌륭하게 동작하는것으로 보이나 4~5개의 서로다른 CheckedExcpetion을 사용하는 하위 API를 호출하는 경우 Exception 체인이 기하급수적으로 증가할 수 있다.
- 반드시 예외 처리를 하는 코드를 작성해야 한다. 예외를 던지는 것은 모든 하위 메서드, 호출 트리에 누적되기 때문에 수많은 메서드를 조정해야 할 수도 있다.
2. Java 8 기준으로 GC는 어떻게 실행이 되는가? (heap young/old generation 동작 관점)
- parellel GC
- 멀티 스레드로 GC를 수행하기 때문에 stop-the-world 시간을 줄일 수 있다.
- minor GC(young)에서 멀티 스레드를 사용한다.(후에는 major GC(old)에서도 멀티 스레드 사용)
- https://www.youtube.com/watch?v=FMUpVA0Vvjw 참고
3. Java BigDecimal은 부동 소수점의 오류를 어떻게 해결하는가?
- BigDecimal은 십진법을 사용하여 숫자를 저장한다.
- 실수 타입인 double이나 float를 사용하지 않고 정수를 사용하여 소수를 다룬다.
- intVal : 정수부 값
- precision : 정수부+소수부 길이
- scale : 소수부 길이
- stringCache : 숫자를 String으로 변환한 값
- intCompact : 소수점을 제외한 전체 수(10.25 → 1025)
4. System.out.println 클래스를 절대 쓰지 말라고 하는데 이유가 무엇인가?
- 이 클래스는 블로킹 I/O인데 동기화가 동작된다는 이유때문에 멀티스레드에서 락이 발생한다.
- 출력이 완료될 때까지 실행이 멈추고 대기해야 하기 때문에 성능을 저하시킨다.
- 동기화 블록 안에서 블로킹 I/O 까지 일어난다면 대기가 계속 길어질 수 있다.
5. 도메인 vs 엔티티
- 도메인 : 특정한 문제 영역이나 분야
- 사용자가 이용하는 앱의 기능, 회사의 비즈니스 로직을 정의하고 있는 영역
- 유스케이스에서 한 액터가 수행하는 기능
- 음식을 만드는 '행위'
- 엔티티 : 도메인에서 식별 가능한 개별적인 객체나 개념
- 고유의 식별자를 갖는 객체로 자신의 라이프 사이클을 가진다.
- 주문, 회원, 상품과 같이 도메인의 고유한 개념을 표현한다.
- 도메인 모델의 데이터를 포함하며 해당 데이터와 관련된 기능을 함께 제공한다.
- 음식 제작의 '데이터'
※ 다음 주 예습 ※
1. HashMap
2. 스레드
👩💻 완전히 정복하는 프로세스 vs 스레드 개념
한눈에 이해하는 프로세스 & 스레드 개념 전공 지식 없이 컴퓨터의 프로그램을 이용하는데는 문제 없어 왔지만 소프트웨어를 개발하는 사람으로서 컴퓨터 실행 내부 요소를 따져보게 될때, 아
inpa.tistory.com
3. I/O
4. Serializable, NIO