객체는 처리의 추상화이다. 쓰레드는 일정의 추상화이다.
Objects are abstractions of processing. Threads are abstractions of schedule.
- James O. Coplien -
무엇
과 언제
를 분리한다.무엇
과 언제
가 밀접하게 연관이 되어 있어 무엇
이 언제
발생했는지 알 수 있다.무엇
과 언제
를 분리하면 구조와 효율이 극적으로 나아진다?EJB Container 안에서 돌아간다.
Container는 동시성을 부분적으로 관리한다.
웹 요청이 들어올 때마다 비동기식으로 서블릿을 실행한다. -> 쓰레드
하지만 Container의 decoupling은 완벽과는 거리가 멀고, 동시성의 정확한 구현을 위해 각별한 노력을 취해야 한다.
public class X{
private int lastIdUsed;
public int getNextId(){
return ++lastIdUsed;
}
}
니모닉 | 설명 | 피연산자 스택 |
---|---|---|
ALOAD 0 | this를 피연산자 스택에 넣는다. | this |
DUP | 스택 첫째 값(this)를 복사한다. 이제 피연산자 스택에 this 값 두 개가 존재한다. | this, this |
GETFIELD lastId | 스택 첫째 값(this)의 lastId 필드에서 값을 가져와 스택에 넣는다. | this, 42 |
ICONST_1 | 스택에 정수 상수 1을 넣는다. | this, 42, 1 |
IADD | 스택 첫째 값(1)을 스택 둘째 값(42)에 더하고 그 결과(43)을 스택에 넣는다. | this, 43 |
DUP_X1 | 43을 복사해 this 아래 넣는다. | 43, this, 43 |
PUTFIELD lastID | 스택 첫째 값(43)을 스택 둘째 값(this)이 가리키는 현재 객체의 lastID 필드에 넣는다. | 43 |
IRETURN | 스택 첫째 값이자 유일한 값(43)을 반환한다. | (empty) |
로버트 C.마틴, 클린 코드, 인사이트, 2020, p225-p244