응~ 푸시도 안 되더니 PR도 안 돼~
깃 쓰레기 새끼 죽어
+) 22. 06. 22. PR 완료! 미안해 깃아 쓰레기는 나였어 죽지 마~
+) 22. 06. 22. 추가
PART 01. 운영체제와 컴퓨터
CHAPTER 02. 컴퓨터의 구조와 성능 향상
CPU와 메모리
레지스터의 종류
데이터 레지스터(DR): 메모리에서 가져온 데이터를 임시로 보관할 때 사용한다.
주소 레지스터(AR): 데이터 또는 명령어가 저장된 메모리의 주소가 저장된다.
프로그램 카운터(PC): 다음에 실행할 명령어의 주소를 기억하고 있다가 제어장치에 알려준다.
명령어 레지스터(IR): 현재 실행 중인 명령어를 저장한다.
메모리 주소 레지스터(MAR): 메모리에서 데이터를 가져오거나 메모리로 데이터를 보낼 때 주소를 지정하기 위해 사용한다.
메모리 버퍼 레지스터(MBR): 메모리에서 가져온 데이터나 메모리로 옮겨 갈 데이터를 임시로 저장한다.
버스의 종류
제어 버스
제어 버스에서는 다음에 어떤 작업을 할지 지시하는 제어 신호가 오고 간다.
제어 버스의 신호는 CPU, 메모리, 주변장치와 양방향으로 오간다.
주소 버스
메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지 알려주는 위치 정보(주소)가 오고 간다.
주소 버스는 메모리 주소 레지스터와 연결되어 있으며 단방향이다.
CPU에서 메모리나 주변장치로 나가는 주소 정보는 있지만 주소 버스를 통해 CPU로 전달되는 정보는 없다.
데이터 버스
데이터가 데이터 버스에 실려 목적지까지 이동한다.
데이터 버스는 메모리 버퍼 레지스터와 연결되어 있으며 양방향이다.
메모리의 종류
RAM(Random Access Memory): 읽거나 쓸 수 있음.
ROM(Read Only Memory): 읽기만 가능함.
램은 전력이 끊기면 데이터가 사라지는 휘발성 메모리와 전력이 끊겨도 데이터를 보관할 수 있는 비휘발성 메모리로 나뉜다.
휘발성 메모리
DRAM: 저장된 0과 1의 데이터가 일정 시간이 지나면 사라지므로 일정 시간마다 다시 재생시켜야 한다. (메인메모리에 사용)
SRAM: 전력이 공급되는 동안에는 데이터를 보관할 수 있어 재생할 필요가 없다. 따라서 속도는 빠르지만 가격이 비싸다. (캐시 같은 고속 메모리에 사용)
SDRAM: 클록틱(펄스)이 발생할 때마다 데이터를 저장하는 동기 DRAM이다.
비휘발성 메모리
너무 길어져서... 나머지는 여기 노션 링크 로 대체.
+) 22. 06. 23. 추가!
스프링이 개발자 대신 객체를 제어하기 위해서는 객체들이 Bean으로 등록되어 있어야 한다.
Configuration 관련 객체들은 @Bean과 @Component로 스프링 컨테이너에 객체를 빈으로 등록할 수 있다.
메서드 레벨에서 선언하며, 반환되는 객체(인스턴스)를 개발자가 수동으로 빈으로 등록하는 어노테이션이다.
@Bean
public BeanExample beanExample() {
return new BeanExample();
}
해당 클래스의 객체를 반환하는 메서드를 만들고, 메서드에 @Bean
을 선언하여 등록하면 된다.
컴포넌트는 클래스 레벨에서 선언하며, 스프링이 런타임 시에 컴포넌트 스캔을 하여 자동으로 빈을 찾고 등록하는 어노테이션이다.
@Component
public class ComponentExample {
}
*ComponentScan을 사용하면 클래스를 보다 쉽게 빈으로 등록할 수 있다.
→ 알아서 @Component 클래스를 찾아 자동으로 빈으로 등록한다.
@Component
는 @ComponentScan
의 대상이 되는 어노테이션으로, 스프링 컨테이너의 관리 대상이 되고 빈으로 등록된다.
@Service
, @Controller
, @Repository
도 모두 @Component
를 내장하고있다.
@Bean의 경우, 개발자가 컨트롤이 불가능한 외부 라이브러리들을 빈으로 등록하고 싶은 경우에 사용한다.
반대로 개발자가 직접 컨트롤이 가능한 클래스의 경우엔 @Component를 사용한다.
개발자가 생성한 클래스에는 @Bean 선언이 불가하다.
→ @Bean과 @Component는 각자 선언할 수 있는 타입이 정해져있어 해당 용도 외에는 컴파일 에러를 발생시킨다.
설정파일을 통해 빈을 관리해야 할 때, 설정파일에 해당하는 클래스 내 메서드에 @Bean 어노테이션을 사용할 수 있고, 간단하게 어노테이션 기반으로 빈을 등록하고 싶으면 @Component를 이용해서 스프링에게 등록해 달라고 알려줄 수 있다.
class Solution {
public double solution(int[] arr) {
double answer = 0;
if(arr.length >= 1 && arr.length <= 100) {
for(int i = 0; i<arr.length; i++) {
if(arr[i] >= -10000 && arr[i] <= 10000) {
answer += arr[i];
}
}
}
answer /= arr.length;
return answer;
}
}
➡️ 아무리 생각해도 내 코드 너무 더러운 것 같다... 라이브러리를 써야 더 간단해지는 것 같던데... 라이브러리를 잘 활용하자.