hoya
BeanFactory와 ApplicationContext의 차이점
BeanFactory 스프링 컨테이너의 최상위 인터페이스입니다. 스프링 빈을 관리 및 조회하는 역할을 수행합니다. ApplicationContext는 BeanFactory를 상속받은 관계입니다. ApplicationContext BeanFactory의 기능을 모두 상속 받아서 제공합니다. 빈을 관리하는 기능과 더불어 편리한 부가기능을 제공합니다. BeanFactory와 ApplicationContext의 차이점은? 로딩방식 BeanFactory는 빈을 필요한 시점에 로딩하는 LazyLoading 방식이지만 ApplicationContext는 처음부터 모든 빈을 로딩하는 EagerLoading방식을 취합니다. 따라서 BeanFactory가 ApplicationContext 보다 조금 가벼운 특성을 지닙니다..
스프링 빈의 쓰레드 안정성에 대하여
싱글톤 빈 스프링의 빈은 싱글톤 패턴으로 관리됩니다. 싱글톤이란 생성자가 여러 차례 호출 되더라도 실제로 생성되는 객체는 최초에 생성된 객체를 반환하게 됩니다. 이렇게 하는 이유는 메모리 절약을 위해서 입니다. 보통 싱글톤 패턴이 적용되는 객체가 필요한 경우는 해당 객체가 리소스를 많이 차지하는 역할을 하는 무거운 클래스일 때 적합합니다. 싱글톤 빈의 쓰레드 안전성 그렇다면 싱글톤 빈은 쓰레드에 있어서 안전할까요? 결론적으로 말하자면, 안전하지 않습니다. 만약 싱글톤 빈 내부적으로 값이 변할 수 있는 인스턴스 멤버 변수가 존재한다면, 모든 쓰레드가 하나의 공유되는 변수를 사용하기 때문입니다. 이를 방지하려면 싱글톤 객체로 하여금 상태(stateful)를 유지하게 설계하면 안됩니다. 스프링에서 쓰레드 안정..
명령어 사이클과 인터럽트에 대하여
명령어 사이클 CPU가 명령어를 처리하는 정형화된 흐름을 명령어 사이클이라고 합니다. CPU는 명령어를 실행하기 위해 명령어를 메모리에서 가져와야 합니다. 이 단계를 인출 사이클이라 합니다. 명령어를 인출하고나면 명령어를 실행해야합니다. 이것이 실행 사이클입니다. 실행 사이클에서 제어장치가 명령어 레지스터에 담긴 데이터 값을 해석하고 제어신호를 발생시키게 됩니다. 프로그램을 이루는 모든 명령어는 일반적으로 인출과 실행사이클을 위 그림과 같이 반복하며 실행됩니다. 하지만 모든 사이클이 다음과 같이 이루어지는것은 아닙니다. 추가적인 메모리 접근이 더 필요한 경우가 있기 때문입니다. 이떄 필요한 작업들을 간접 사이클이라고 부릅니다. 그렇다면 인출, 실행, 간접 사이클이 명령어 사이클의 끝일까요? 이 밖에도 고..
CPU 구성 요소에 대하여
CPU CPU는 메모리에 저장된 명령어를 읽고 해석하고 실행하는 장치입니다. CPU 내부는 계산을 담당하는 ALU, 명령어를 읽고 해석하는 제어장치, 임시 저장 장치인 레지스터라는 요소로 구성되어있습니다. 각 구성요소에 대해 차근차근 살펴보도록 하겠습니다. ALU ALU는 계산을 하기 위한 부품입니다. 계산을 하기 이해서는 피연산자와 수행할 연산이 필요합니다. 1 + 3 을 예로 들면 1과 3같은 피연산자와 +와 같은 연산이 필요한 것이죠 ALU는 피연산자를 레지스터를 통해 받아들입니다. 또한 제어 장치로 부터 받아들인 제어 신호로 수행할 연산을 받습니다. ALU는 이렇게 받은 정보를 바탕으로 산술 및 논리 연산과 같이 다양한 연산을 수행합니다. ALU는 계산한 결과값을 곧바로 메모리에 저장하지 않습니다..