-
Notifications
You must be signed in to change notification settings - Fork 38
2020.09.26 2번째 스터디
-
코테로 바빠 공부하기가 힘들었다.
-
스터디 끝나고 정리할 듯.
-
NTS 알고리즘이 어려웠다.
-
아이템3개라서 여유.
-
아이템의 주제가 난해한 주제는 아니었다.
-
자료가 많아서 찾기 쉬웠다.
-
시간여유는 있음. 스터디 진행에는 무리없을듯.
- 코테, 기업제출용 과제가 겹침. 스터디는 월, 화에 몰아서 진행
- 스터디 끝나고 정리할 듯.
- 수업 듣고 있는 관련이 있어 정리(유한 상태 머신)
- 그렇게 알 필요가 없는 것에 대해 공부를 함. -> 너무 Deep한 내용이 많았다.
- 내용적으로는 의미있었던건 자바에서 레퍼런스 관리, 가비지 컬렉션 동작에 대해 많은 걸 알게 되었다.
- 아이템 수도 적고 처음보는게 많아서 아이템 숫자를 줄인게 정말 좋았다.
- 메모리누수, 가비지 컬렉터에 대해서 새로 배울수 있어 좋았다.
p.32 (1번째 문단 마지막) Pattern은 입력받은 정규표현식에 해당하는 유한 상태 머신(finite state machine)을 만들기 때문에 인스턴스 생성 비용이 높다
정규표현식용 Patten 클래스와 유한 상태 머신이 낯선데 이 2가지 개념을 간략하게 설명해주시면 좋을 것 같습니다.
A: 이건 생략.
p.33 (2번째 문단) 어댑터를 생각해보자. 어댑터는 실제 작업은 뒷단 객체에 위임하고, 자신은 제2의 인터페이스 역할을 해주는 객체다. 디자인 패턴 중 하나로 어댑터를 본 것 같은데 어댑터 패턴의 예시를 한번 보여주시면 좋을 것 같습니다.
A: BufferedReader, InputStreamReader가 대표적인 어댑터 패턴이다.
프록시패턴, Delegate 등등
코쿼 수업중에 한번 언급되었던 내용 같은데,, String을 생성하는 방법에 대해서 간단하게나마 알아보면 좋을듯 합니다. 예를 들면,
String str1 = new String("new!!");
String str2 = "new!!";
String constant pool과 관련 있을 것 같긴 한데... 그리고 위 두 방법 간에 어떻게 차이가 있는 지에 대해 알아보면 좋을 듯해요! 면접에서 이 질문을 하는 경우가 있다.
A: 자바성능튜닝에서 Java5.0이후에는 더하기 연산할 때는 최적화하여 주소를 buffer, builder를 이용하여 붙이는 걸로 안다.
5.0이후, 8.0이후에도 유의미한 변화가 있었다. 자바봄 아이템 6을 참고하면 좋을거 같다.
일반적으로 프로그래밍(C언어)에서는 String ()하면 그대로 static으로 저장한다. String 연산할 때 커다란 단점이 있기 때문에 String constant pool에 어떻게 돌아가는지 공부를 해야한다.
Q: Spring 컨트롤러에서 래퍼클래스로 타입으로 설정하는 것이 좋은가? 아니면 원시타입으로 받는것이 나은가?
A: 일반적으로 래퍼클래스로 받아 null 처리하는게 쉽다. 래퍼클래스가 Default로 생각하자.
ArrayList
- remove(): 실제 null 처리를 하는 건가?, 참조만 바꾸는 건가
- 실제는 size를 줄이면서 Null 처리한다.
참조를 담은 변수를 유효 범위(scope) 밖으로 밀어낸다는 것이 어떤 방식을 말하는 걸까요?
A: 지역변수, 인텔리J 기준으로 밑줄뜰 때 그게 유효 범위 밖에 있다는 것이다.
유효범위 밖이면 GC가 처리하지 못함 -> 메모리 누수 발생의 요인이 될 가능성이 높다.
static final 한 상수를 어떻게 null 로 처리할 수 있는가?
A: 캐싱이라는 범위가 광범위하다. 그 의미(static final 상수)가 아니다. 다른 방법 캐시방법에 대해서 null로 처리하라는 뜻.
백그라운드 스레드를 활용하는 방법이 정확하게 어떤건가요?
A: 저는 배치 작업같은 느낌으로 받아드렸습니다. 스레드 A,B가 있다고 가정했을 때, A에서는 map에 캐시를 넣고, 빼는 등의 작업만 담당하여 계속하되, B에서는 일정 시간마다 map에 있는 key들이 유효한 값인지 확인하는 주기적인 작업을 진행한다라고 이해했습니다. 그래서 ScheduledThreadPoolExecutor
를 책에서 언급한듯 싶습니다.
-> 운영체제를 공부하자.
기본 컬렉션은 Strong, soft, weak 중 어느것인가?
A: Strong일 가능성이 있다. null하더라도 객체가 GC에서 처리하지 않는다.
ExceptionHandler도 리스너인가?
A: 개념적으론 리스너이지만 실제론 어떻게 구현되어있는지는 모른다. 자바진영에선 콜백, 리스너를 잘 사용하지 않는다.
실제로는 사용해본 적이 없다.
A: BufferdReader와 같은 걸 이미 사용하고 있고, try-with-resources를 사용하여 외부 리소스를 처리하는 경우를 추천한다.
아이템6: new String 쓰지마라, primitve있는데 오브젝트 왜 쓰냐, 코스트가 비싸면(DB 커넥트) 풀을 사용해라.
아이템7: Strong, soft, weak 레퍼런스에 GC 동작차이를 알자. 메모리 최적화 할 땐, java.lang.ref를 직접 사용하지말고 WeakHashMap을 사용하자.
아이템8: try-with-resources 를 사용하라.