day8 🌕

장미·2022년 6월 21일
0

오늘의 성과

목록 보기
8/129

어제 못 끝낸 거 마저 끝내기!


계산기 클래스, 메서드 분해하고 PR 올리기

응~ 푸시도 안 되더니 PR도 안 돼~
깃 쓰레기 새끼 죽어
귀멸의 칼날 이모티콘

+) 22. 06. 22. PR 완료! 미안해 깃아 쓰레기는 나였어 죽지 마~


운영체제 2챕터 마저 읽고 정리하기 (88쪽부터)

+) 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이다.

        • 비휘발성 메모리

          • 플래시 메모리, FRAM(Ferroelectric RAM), PRAM(Phase change RAM) 등

      • 부팅: 컴퓨터를 켰을 때 메모리에 운영체제를 올리는 과정.
        사용자가 컴퓨터의 전원을 켜면 롬에 저장된 바이오스가 실행된다.
        바이오스는 CPU, 메모리, 하드디스크, 키보드, 마우스와 같은 주요 하드웨어가 제대로 작동하는지 확인한다.

너무 길어져서... 나머지는 여기 노션 링크 로 대체.


컴포넌트와 빈의 차이

+) 22. 06. 23. 추가!

스프링이 개발자 대신 객체를 제어하기 위해서는 객체들이 Bean으로 등록되어 있어야 한다.

  • Bean: Spring IoC 컨테이너가 관리하는 자바 객체.

Configuration 관련 객체들은 @Bean과 @Component로 스프링 컨테이너에 객체를 빈으로 등록할 수 있다.


@Bean

메서드 레벨에서 선언하며, 반환되는 객체(인스턴스)를 개발자가 수동으로 빈으로 등록하는 어노테이션이다.

@Bean
public BeanExample beanExample() {
    return new BeanExample();
}

해당 클래스의 객체를 반환하는 메서드를 만들고, 메서드에 @Bean을 선언하여 등록하면 된다.


@Component

컴포넌트는 클래스 레벨에서 선언하며, 스프링이 런타임 시에 컴포넌트 스캔을 하여 자동으로 빈을 찾고 등록하는 어노테이션이다.

@Component
public class ComponentExample {
}

*ComponentScan을 사용하면 클래스를 보다 쉽게 빈으로 등록할 수 있다.
→ 알아서 @Component 클래스를 찾아 자동으로 빈으로 등록한다.

@Component@ComponentScan의 대상이 되는 어노테이션으로, 스프링 컨테이너의 관리 대상이 되고 빈으로 등록된다.

@Service, @Controller, @Repository도 모두 @Component를 내장하고있다.


@Bean의 경우, 개발자가 컨트롤이 불가능한 외부 라이브러리들을 빈으로 등록하고 싶은 경우에 사용한다.
반대로 개발자가 직접 컨트롤이 가능한 클래스의 경우엔 @Component를 사용한다.

  • 개발자가 컨트롤 할 수 있는 클래스 == 개발자가 만든 클래스
    → 컨트롤러 등에 사용하는 클래스를 의미한다.

개발자가 생성한 클래스에는 @Bean 선언이 불가하다.
→ @Bean과 @Component는 각자 선언할 수 있는 타입이 정해져있어 해당 용도 외에는 컴파일 에러를 발생시킨다.

설정파일을 통해 빈을 관리해야 할 때, 설정파일에 해당하는 클래스 내 메서드에 @Bean 어노테이션을 사용할 수 있고, 간단하게 어노테이션 기반으로 빈을 등록하고 싶으면 @Component를 이용해서 스프링에게 등록해 달라고 알려줄 수 있다.


코테 간단한 거 1문제

평균 구하기

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;
    }
}

➡️ 아무리 생각해도 내 코드 너무 더러운 것 같다... 라이브러리를 써야 더 간단해지는 것 같던데... 라이브러리를 잘 활용하자.


자바 ^^

profile
김뉴비

0개의 댓글

관련 채용 정보