스터디 활동 내용에 따라 매 주 목요일, 각자 공부한 내용을 정리하여 발표를 하고 있다.
나는 Mutual Exclusion이 필요하게 된 배경(Assembly Code에서 일어나는 상황)과 primitive한 구현방법부터 Semaphore기법까지에 대해서 발표했다.
이게 중요한게 아니고, 다른 팀원의 발표내용 중에서 기록해놓고 싶은 내용이 생겨 글을 작성하게 됐다.
첫번째는 동기/비동기에 대한 내용이다. 지금까지 공부하면서 상당히 자주 들었든 용어이고, 특히 자바스크립트 얘기와 함께 자주 나오는 용어였던걸로 기억한다. 하지만 제대로 배우거나, 필요했던 적은 없어서 계속 궁금했던 내용이었다. 그런데 이 주제가 사실 굉장히 심오하고 어려운 내용이고, 발표한 팀원도 이해하기 힘들었다고 한다. 하지만 이해하기 너무 쉽게 간단하게 알려주어서 바로 메모장을 키고 기록했다. (물론 블록킹/논블록킹에 대한 내용도 함께이다.)
* Java는 기본적으로 동기/Blocking 방식임을 알 수 있다.
* JavaScript는 비동기/NonBlocking 방식이 사용된다고 한다!
참고하신 자료 : [10분 테코톡] 🎧 우의 Block vs Non-Block & Sync vs Async
(너무 도움되는 영상이라고 꼭 보라고 추천하셨는데, 내용과 설명이 정말 좋았다)
두번째는 제네릭의 상한경계와 하한경계에 대한 예시였다. 이 팀원분은 제네릭에 빠지셔서 3주 연속 제네릭에 대해 발표하셨는데, 제네릭 하나에서도 내용이 정말 깊다는 것을 느꼈다. 저번주까지는 상한/하한경계 (거기다 공변성이 어쩌구..) 등에 대해 알려주셨는데, 사실 대부분 그렇듯이 그 개념은 이해를 해도 잘 와닿지는 않을 것이다. 그래서 이번주에는 상한/하한경계가 필요한 상황의 아주 적절한 예시를 들고 와 설명해주셨다. 들을 때는 정말 감탄하면서 바로 이해가 되었는데, 하한 경계의 경우 돌아서니 또 헷갈리는 개념이었다. 이야기를 나눠보니 다른 분들도 다 비슷한 것 같았다.
ex) ? extends Trash
// 쓰레기를 버려야지, 돈을 버리면 안된다 -> extends 쓰레기
ex) ? super Trash
// 쓰레기통에는 쓰레기들만 받아 넣을 수 있음, 다른건 안 받음 -> super 쓰레기
PECS 공식 (참고)
- 외부에서 온 데이터를 생산(Producer) 한다면 <? extends T> 를 사용 (하위타입으로 제한)
- 외부에서 온 데이터를 소비(Consumer) 한다면 <? super T> 를 사용 (상위타입으로 제한)
상호배제 발표내용 : https://www.notion.so/a31153f8fad74865b2bcf2a88d69ccc3