본문 바로가기

전체 글

(118)
자바 : 배열과 예외 처리 📗 배열 (1차원) 배열이란 인덱스와 인덱스에 대응하는 데이터들로 이루어진 구조를 말한다. 같은 타입의 데이터들이 순차적으로 저장되어있다. ✅ 1차원 배열의 생성 단계 자바에선 배열, 클래스, 인터페이스를 생성할 땐 "new" 를 이용해서 동적 생성해야 한다. 1. 배열 선언 단계 int 배열에 대한 레퍼런스 변수를 생성한다. int [] arr; 2. 배열 생성 단계 배열을 생성하고 생성된 배열 주소를 레퍼런스에 넣는다. arr = new[5]; 배열 선언과 함께 초기화도 가능하다. int [] arr = {0, 1, 2, 3, 4}; 📗 레퍼런스 치환과 배열 공유 하나의 배열은 다수의 레퍼런스가 참조 가능하다. 하나의 배열을 다수의 레퍼런스가 참조할 때, 배열 내 값이 다른 레퍼런스가 수행한 명령에 ..
자바 : 자바의 데이터 타입 📗 기본형 타입 기본형 타입은 총 8가지가 존재한다. 기본형 타입은 기본값이 존재하기에 Null 값이 존재하지 않는다. 따라서 Null 값을 이용하고 싶다면 래퍼 (Wrapper) 클래스를 이용해야한다. 분류 저장 가능한 값의 범위 크기 boolean true, false 1byte char 0 ~ 65,535 2byte byte -128 ~ 127 1byte short -32,768 ~ 32,767 2byte int -2,147,483,648 ~ 2,147,483,647 4byte long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 8byte float (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값 4byte double (1.7 ..
자바 : 자바의 태동 📗 JAVA의 시작 자바는 1991년, 가전기기 어플리케이션 제작 프로젝트인 그린 프로젝트에 의해 초안이 제안되었다. 자바 이전에 사용하던 언어(예. C, C++)들은 플랫폼간 호환성이 없는 언어였고 복잡하며 실행파일이 메모리에 올려져야 실행되어 메모리 관리가 어려웠다. 하지만 가전제품은 적은 메모리를 사용했고 여러 플랫폼들이 있기 때문에 플랫폼 독립적이며 메모리 사용량이 적고 호환성이 좋은 언어가 필요했다. ✔ 자바는 어떻게 호환성 문제를 해결했을까? C나 C++는 플랫폼 종속적이었기 때문에 각각의 플랫폼 마다 컴파일을 해줘야 했다. 하지만 자바는 바이트코드와 JVM (Java Virtual Machine)을 이용하여 플랫폼 종속성 문제를 극복했다. ✔ 바이트코드와 JVM (자바 가상 머신) 이란? 자..
컴퓨터 구조 : 캐시 메모리 📗 캐시 메모리 CPU와 메모리 사이에 위치한 레지스터 보단 용량이 크고 메모리 보단 빠른 SRAM 기반의 저장 장치를 말한다. ✔ 저장 장치들 사이 캐시 메모리의 위치 캐시메모리는 CPU의 연산속도와 메모리 접근 속도의 차이를 조금이나마 줄이기 위해 탄생함 CPU가 매번 메모리에 액세서 하는것은 시간이 오래걸리므로 메모리에서 CPU가 사용할 데이터의 일부를 미리 캐시 메모리로 가져와 사용하자는 취지에서 만들어졌다. 📗 계층적 캐시 메모리 일반적으로 L1, L2 캐시메모리는 코어 내부에, L3 캐시는 코어 외부에 있다. 📗 분리형 캐시 메모리 L1 캐시 메모리를 데이터를 저장하는 L1 캐시메모리인 L1D와 명령어를 저장하는 L1 캐시메모리인 L1I 로 분리한 분리형 캐시 메모리도 존재한다. ✔ 분리형 캐..
컴퓨터 구조 : 메모리의 주소 공간 📗 논리 주소와 물리 주소 CPU와 실행중인 프로그램은 메모리 몇번지에 무엇이 저장되어 있는지 모른다. 왜냐면 메모리에 저장된 값은 시시각각 변하기 때문이다. - 새롭게 실행되는 것 -> 새롭게 적재 - 실행이 끝난 것 -> 메모리에서 삭제 - 같은 프로그램을 실행해도 실행할 때 마다 적재되는 주소가 달라진다. ✔ 왜 시시각각 변하는 걸까? - 프로그램 런타임에 새로운 코드나 라이브러리가 메모리에 동적으로 할당되기 때문이다. - 보안상의 이유도 존재함. 프로세스의 주소 공간을 매 실행마다 무작위로 배치하여, 같은 코드라도 메모리 주소가 예측하기 어렵게 만들어 악성코드나 공격자가 공격하기 어렵게 만듬 -> 운영체제에서 ASLR 사용 ( Address Space Layout Randomization ) - ..
컴퓨터 구조 : RAM의 특성과 종류 📗 RAM CPU는 RAM으로부터 명령어와 데이터를 가져와서 실행하고 RAM은 실행할 프로그램을 저장한다. RAM은 휘발성으로 전원이 꺼지면 데이터가 날아간다. 때문에 전원이 꺼져도 데이터가 보존되는 대용량 보조기억장치가 필요하다. ✔ 램 용량이 크면 뭐가 좋을까? 램 용량이 크면 동시에 많은 프로그램들을 실행하는데 유리하다. 📗 RAM의 종류 💻 DRAM (Dynamic-RAM) DRAM은 일반적으로 메모리로써 사용되는 RAM이다. 저장된 데이터가 동적으로 사라지는 RAM이다. 데이터 소멸을 막기 위해 주기적으로 재활성화 해주어야 한다. 상대적으로 소비 전력이 낮고 저렴하고 집적도가 높아 대용량으로 설계하기에 용이하다. 💻 SRAM (Static-RAM) SRAM은 DRAM과 다르게 저장된 데이터가 사..
컴퓨터 구조 : 명령어 집합 구조, CISC 와 RISC 📗 명령어 집합(ISA) 명령어 집합이란 CPU가 이해할 수 있는 명령어들의 모음을 말한다. 명령어의 세세한 구조와, 연산, 주소지정 방식은 CPU 마다 다르다. CPU는 자신의 명령어 집합에 속한 명령어만 이해할 수 있다. 예를 들어, 명령어 집합이 각기 다른 A와 B CPU가 있다고 할 때, A CPU에서 만든 실행 파일을 그대로 B CPU에 옮겨 특별한 설정 없이 바로 실행하면 실행되지 않는다. 명령어들의 모음으로 만들어진 것이 실행 파일인데, A에서 이해할 수 있는 명령어의 모음으로 만든 실행 파일을 B에 바로 옮기면 이해할 수 있는 명령어가 아니기 때문에 실행이 불가한 것이다. => 같은 소스코드를 컴파일 하더라도 CPU에 따라 다른 기계어, 어셈블리어가 나올 수 있다. 🖥️ISA(Instruc..
컴퓨터 구조 : 명령어 병렬 처리 기법 📗 명령어 파이프라인 명령어 파이프라인이란 명령어를 읽어 순차적으로 실행하는 프로세서에 적용되는 기술로 한번에 하나의 명령어만 실행하는 것이 아니라 하나의 명령어가 실행되는 도중에 다른 명령어 실행을 시작하는 식으로 동시에 여러 개의 명령어를 실행하는 기법이다. 💻 명령어 처리 과정 1. 명령어 인출 2. 명령어 해석 3. 명령어 실행 4. 필요하다면 결과 값을 저장 같은 단계가 겹치지 않는다면 CPU는 각 단계를 동시에 실행할 수 있다. 예) 명령어 1에서 명령어를 해석하는 동안, 명령어 2를 인출해 올 수 있다. ✅ 명령어 파이프라인을 사용하지 않는다면? 한 명령어의 인출-해석-실행-저장 작업이 끝나야 다른 명령어를 시작할 수 있을 것이므로 명령어 처리 실행 시간이 매우 오래 걸릴 것이다. 💻 파이프..

반응형