Programming

    컨트롤러는 상태를 가지면 안된다.

    이번 글에서는 컨트롤러가 상태를 가지면 안되는 이유에 대해서 이야기해보고자 합니다. 서론 로또 미션을 진행하면서 다음과 같이 컨트롤러 내 인스턴스 변수로 발행한 로또와 당첨번호를 저장했었습니다. 피드백을 통해 이러한 방식에 문제가 있다는 사실을 알게 되었습니다. public class LottoController { private Lottos lottos; private LottoWinningNumbers lottoWinningNumbers; // ... } 컨트롤러와 모델의 차이점 위 방식에 문제가 있다는 사실을 알고 나서 문득 한가지 의문이 들었습니다. '컨트롤러가 왜 상태를 가지면 안될까? 그럼 모델이 상태를 가져져도 되는 이유는 뭐지?' 잠시 MVC 구조를 짚고 넘어가겠습니다. MVC에서 Mode..

    MAC 주소와 ARP

    1. MAC 주소 OSI 7계층에서 각 계층은 독립적인 주소를 갖는다. 애플리케이션 계층에서는 호스트 이름, 네트워크 계층에서는 IP 주소, 그리고 링크 계층에선 바로 이 MAC 주소를 갖는다. 실제로 MAC 주소를 갖는 것은 호스트나 라우터가 아닌 호스트나 라우터에 삽입된 NIC(네트워크 인터페이스 카드)이다. 그래서 NIC를 여러개 갖고 있으면 MAC 주소도 여러개 갖고 있다. MAC 주소는 소프트웨어을 통해 바꿀 수 있지만, 보통은 NIC에 고정된 식별자이다. IP 주소는 호스트가 이동하면서 변하는 것과 달리 MAC 주소는 NIC에 고정되어 변하지 않는다. 그래서 IP 주소는 우편 주소, MAC 주소는 주민등록번호에 비유할 수 있다. IP 주소와 MAC 주소 모두 호스트를 지칭하는 주소이다. 2. ..

    MAC 프로토콜 종류와 특징

    네트워크 링크에는 두 종류가 있다. 점대점 링크와 브로드캐스트 링크이다. 점대점 링크는 송신자와 수신자가 하나의 링크로 연결된 것이고, 브로드캐스트 링크는 하나의 공유된 브로드캐스트 채널에 다수의 송/수신 노드가 연결된 것이다. 우리가 쓰는 대부분의 컴퓨터네트워크는 브로드캐스트 링크를 사용한다. 브로드캐스트 링크는 많은 사람들이 대화하는 파티로 비유할 수 있다. 파티에서는 여러 사람들이 동시에 말을 한다. 그러나 네트워크에서는 동시에 데이터를 전송하게 되면 충돌이 발생하고, 수신 노드는 받은 데이터를 처리할 수 없게 된다. 그래서 충돌을 방지하기 위해 노드 간의 접속을 조정할 필요가 있다. 이것은 다중 접속 프로토콜이 해결해야할 문제이며, 이를 해결하기 위해 수많은 방법이 고안되었다. 이러한 방법을 MA..

    자바 추상클래스와 인터페이스

    추상 클래스와 인터페이스의 차이에 대해 설명해주세요. 1. 추상메소드와 추상클래스 추상 메소드는 빈 껍데기이다. 추상메소드란 선언은 되어 있으나 코드가 구현되지 않은 것을 말한다. //추상 메소드 public abstract String getName(); //추상 메소드가 아님. why? 코드가 구현되어 있기 때문에! public abstract String getName() { return "hello"; } 추상 클래스를 사용하는 이유 : 추상 클래스를 상속받은 클래스는 추상 클래스 안에 있는 모든 추상 메소드를 구현해야 한다. 위 설명만 들으면 인터페이스와 추상 클래스가 같다고 느낄 수 있다. 인터페이스도 인터페이스 안에 있는 모든 추상메소드를 구현해야하기 때문이다. 2. 인터페이스 vs 추상클래..

    디스크 스케쥴링(Disk scheduling) - FCFS,SSTF, SCAN

    1. 디스크 스케쥴링 디스크 접근 시간은 Seek time + rotational delay + transfer time 의 합이다. 이때 다음 실린더를 탐색하는 시간(seek time)이 가장 오래 걸린다. 다중 프로그래밍 환경 다중 프로그래밍 환경에서 디스크 큐(disk queue)에는 많은 요청(request) 들이 쌓여있다. 프로세스들이 디스크로 계속해서 읽기, 쓰기 요청을 하기 때문이다. 이러한 요청들을 어떻게 처리해야 탐색시간을 줄일 수 있을까? 2. 디스크 스케쥴링 알고리즘 1) FCFS Scheduling FCFS는 First-Come First-Served의 약자로 먼저 들어온 요청을 먼저 처리하는 방법이다. 가장 단순하며 공정한 방법이다. 예제 200 cylinder disk, 0 ....

    파일 할당(File Allocation)

    컴퓨터 시스템 자원 관리 - CPU : 프로세스 관리 (CPU 스케쥴링, 프로세스 동기화) - 주기억장치 : 메인 메모리 관리 (페이징, 가상 메모리) - 보조기억장치 : 파일 시스템 보조기억장치 (하드디스크) - 하드디스크 : track(cylinder), sector - Sector size = 512 bytes, cf.Block size 하드디스크의 섹터 사이즈는 보통 512bytes 이며 이 섹터들을 모아 블록 단위로 헤더가 읽는다. - 디스크 = pool of free blocks => 각각의 파일에 대해 free blcok을 어떻게 할당해줄까? 효과적으로 하드디스크 용량을 관리하는 것과 파일 탐색 및 읽는 시간을 모두 고려해야 한다! 1. 파일 할당 방법 1) 연속 할당 연속 할당이란 각 파일..

    프레임 할당 (Allocation of Frames)

    1. 쓰레싱(Thrashing) 1) CPU utilization vs Degree of multiprogramming CPU 이용률 vs 메인메모리에 올라와있는 프로세스의 개수 일반적으로 프로세스의 개수가 증가하면 CPU 이용률이 증가한다. CPU가 노는 시간이 줄어들기 때문이다. 그러나 프로세스가 일정 범위를 넘어서면 CPU 이용률이 감소하게 된다. 이러한 현상을 Thrashing이라 한다. 2) 쓰레싱 극복 Thrashing이 일어나는 이유는 빈번한 page in/out 때문이다. 프로세스가 늘어나면서 i/o 시간이 증가하기 때문에 CPU 이용률이 급격히 감소하는 Thrashing 이 발생하게 된다. 쓰레싱을 극복하기 위한 방법은 여러가지가 있다. 1) Global replacement 대신 loc..

    페이지 교체 알고리즘 - FIFO, OPT, LRU

    1. 페이지 교체 1) 요구 페이징(Demand Paging) 요구되어지는 페이지만 backing store 에서 메모리로 가져온다. 프로그램이 계속 실행되면서 요구 페이지가 늘어나고, 언젠가는 메모리가 가득 차게 된다. => Memory full! 메모리가 가득 차면 추가로 페이지를 가져오기 위해 어떤 페이지는 backing store로 몰아내고(page-out) 그 빈 공간으로 페이지를 가져온다.(page-in) 용어 : victim page ; victim이란 말은 희생양 이라는 뜻이다. 즉, 페이지 교체를 위해 backing store로 쫓겨난 페이지를 말한다. 2. Victim Page 페이지 교체를 위해 어느 페이지를 몰아낼 것인가? => i/o 시간 절약을 위해 기왕이면 modify 되지 않..