-
2021.07.26~27 기록장TIL 2021. 7. 25. 23:03
ToDo
- 알고리즘 2문제
- 책 읽기
- 토비의 스프링
Done
- 알고리즘 1문제
- 토비의 스프링
Weekly goal
- 책 읽기
- 토비 스프링 코딩
- 북마크 보기
토비의 스프링
112p.
DI
오브젝트 레퍼런스를 외부로부터 주입받고 이를 통해 여타 오브젝트와 다이내믹하게 의존관계가 만들어짐.
컨피규레이션에 설정 정보를 저장해 놓으면 ioc컨테이너가 런타임 시에 주입을 해준다.
절차 지향으로 오브젝트를 생성하는 것이 아닌 외부로부터 주입받아 사용한다.
578p.
postConstruct는 빈이 다 만들어지고 의존관계까지 다 만들고 실행된다.
618p.
DI에 인터페이스를 사용하는 이유는?
1. 다형성을 위해
2. 인터페이스 분리 원칙을 통해 클라이언트와 의존 오브젝트 사이의 관계를 명확하게 알 수 있다.
예로
sql에 관련된 인터페이스들이 있고 그것을 구현한 mysqlService가 있다.
admin은 updateSql 기능까지 사용해야 한다면 updateSql인터페이스를 DI 받고. user는 default기능만 받으려면 sql인터페이스만 받으면 된다. 모두 MysqlService에 구현되어 있기에 실제 설정에서는 MysqlService만 넣어주면 된다.
이로 인해 어드민과 유저는 의존하는 인터페이스를 통해 연관 관계과 명확해진다.
이로 인해 클라이언트가 정말 필요한 기능에만 접근한다는 것이다.
625p.
자바 엔터프라이즈 환경에서 빈이 상태를 가지면 좋지 않다고 했다.
이유는 상태가 변경되면 동시성 문제가 발생할 수 있기 때문이다.
map은 상태로 사용했을 때 동시성 문제가 발생할 수 있다. 아님 사용하면서 동기화를 해주면 되지만 이는 성능 이슈로 이어질 수 있다.
이를 해결하기 위해 java에선 ConcurrentHashMap을 제공한다.
이 맵은 데이터 조작 시 전체 데이터에 락을 걸지 않고 조회는 락을 아예 사용하지 않는다. 그래서 어느 정도 안전하면서 성능을 보장해준다.
'TIL' 카테고리의 다른 글
2021.07.29 기록장 (0) 2021.07.28 2021.07.28 기록장 (0) 2021.07.27 2021.07.24~25 기록장 (0) 2021.07.23 2021.07.23 기록장 (0) 2021.07.22 2021.07.22 기록장 (0) 2021.07.21