공유자원이 여러개 있는 상황에서도 적용이 가능한 동기화 도구
만약 사용할 공유자원이 없을 경우 무한정 wait함수를 호출한다면 CPU낭비로 이어진다.
세마포에서는 wait함수 호출 시 사용할 자원이 없을 경우, 프로세스를 대기상태로 만들고, 해당 프로세스의 PCB를 세마포를 위한 대기 큐에 넣는다.
다른 프로세스가 임계구역에서 작업이 끝나고 signal함수를 호출하면 대기큐에 들어간 PCB를 제거 한뒤, 프로세스 준비상태로 변경한다.
임계구역에 대해 매번 signal, wait 함수를 명시하면 불편하고 누락할 수 있는 위험이 있다.
세마포에 비해 사용자가 사용하기 편한 동기화 도구
모니터는 공유자원과 공유자원에 접근하기 위해 인터페이스를 묶어서 관리한다.
프로세스는 인터페이스를 통해서만 접근 가능
예외 전환
복구할 수 없는 예외는 가능한 빨리 런타임으로 전환하는것이 좋다.
어플리케이션의 로직을 담기 위한 예외는 checked exceptio로 만든다.
JDBC의 SQLException은 대부분 복구할 수 없는 예외이므로 런타임 예외로 포장해야한다.
SQLException의 에러코드는 DB에 종속되기 떄문에 DB에 독립적인 예외로 전환 될 필요가 있다.
DAO를 데이터 액세스 기술에서 독립시키려면 인터페이스 도입과 런타임 예외 전환, 기술에 독립적인 추상화된 예외로 전환이 필요하다.
아래 그림에서 OrderServiceImpl는 MemberRepository , DiscountPolicy 에 의존한다는 것을 바로 알 수 있다. → 정적 의존관계
하지만 각 각 MemberRepository , DiscountPolicy 에 어떤 구현체가 의존되는지 알 수 없다. → 동적 의존관계
어플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존관계
클래스에 선언된 import문 만으로 의존관계를 파악할 수 있다.
어플리케이션을 실행하지 않아도 어떤 클래스가 의존되는지 알 수 있다.
프로그래밍에 있어 두 모듈간의 연결을 뜻한다.
일반적으로 둘 중 하나가 다른 하나를 어떤 용도로 사용함을 뜻함.
의존성에 있는 두 관계는 수행 순서 지정이 필요하다.