반응형

분류 전체보기 209

Memory의 종류와 역사

Memory는 크게 ROM과 RAM의 두 가지 종류로 나눌 수 있습니다. ROM(Read Only Memory) ROM은 Read Only Memory의 약자로서 본래 만들어질 때 한 번 내용을 입력하면 이를 바꿀 수 없고, 읽을 수만 있는 메모리였습니다. 하지만 후에 내용을 다시 쓰고 지울 수 있게 되고, 이 방식에 따라 Mask ROM, OTP ROM(PROM), EPROM, EEPROM으로 발전했습니다. Mask ROM Mask ROM은 생산 과정에서 내용을 기록시켜놓으면 이를 지울 수 없고, 읽을 수만 있습니다. 다른 ROM소자와 달리 물리적으로 데이터를 기록하기 때문에 데이터 안전성이 매우 높지만, 재프로그래밍이 원천적으로 불가능합니다. 따라서 생산시에 내용 데이터가 잘못되어 있다면 어찌할 방도..

Computer Science 2020.09.12

Virtual Machine(VM, 가상 머신)

Virtual Machine이란? Virtual Machine(가상머신, VM)은 컴퓨팅 환경을 소프트웨어로 구현한 것으로서, 다시말해 컴퓨터를 에뮬레이션하는 소프트웨어라고 할 수 있습니다. 가상 머신의 종류 가상 머신은 시스템 가상 머신과 프로세스 가상 머신의 두 가지 종류로 나눌 수 있는데, 전자는 완전한 시스템 플랫폼을 제공하는, 즉 완전한 운영체제(OS)실행을 지원합니다. 반면 후자는 하나의 단일 프로세스를 실행하기 위해 만들어져 있는데, 다시 말해 단일 프로세스를 지원합니다. VM은 CPU, RAM, 하드디스크 등 컴퓨터 주요 부품들을 가상으로 만들어서 구동하는 식으로 동작합니다. 이를 위해서는 각 부품들의 기능을 소프트웨어적으로 구현해야 합니다. 이때 사용되는 개념으로 에뮬레이션, 전가상화, ..

Computer Science 2020.09.12

Hardware Abstraction Layer(HAL, 하드웨어 추상화 계층)

HAL HAL이란 Hardware Abstraction Layer의 약자로서, 컴퓨터 하드웨어와 소프트웨어 사이의 추상화 계층입니다. HAL은 소프트웨어가 수많은 종류의 하드웨어 상에서 별 차이 없도록 동작할 수 있도록 하는 역할을 하며, OS의 커널 또는 장치 드라이버에서 호출될 수 있습니다. HAL에서는 추상화 개념을 사용하는데, 추상화는 주어진 문제나 시스템 중에서 중요하고 관계있는 부분만을 분리하여 간결하고 이해하기 쉽게 만드는 과정이라고 할 수 있습니다. HAL에서는 하드웨어 부품에 따라 해야 할 복잡한 과정을 일관성 있고, 간략한 인터페이스로 제공하기 위해 같은 류의 하드웨어를 공통 명령어 집합으로 묶어두는데, 이를 "하드웨어 추상화"라고 합니다. HAL은 소프트웨어와 하드웨어 사이에서 소프트..

Computer Science 2020.09.12

자바 18. 단일상속, object클래스

저번 글에 이어서 클래스간의 관계에 대해서 단일상속과 object클래스라는 것에 대해 알아봅시다. 단일상속 먼저 저번 글에서 하나의 조상이 여러개의 자손을 가지는 상속은 가능하다고 이야기했었습니다. 그렇다면 반대로 하나의 자손이 여러개의 조상으로부터 상속받는 것은 어떨까요? 아쉽게도 자바에서는 이렇게 둘 이상의 조상을 가지는 상속(다중상속)을 지원하지 않습니다. 다중상속을 허용하면 여러 클래스로부터 상속을 받을 수 있기 때문에 복합적인 기능을 가진 클래스를 쉽게 작성할 순 있겠지만, 클래스간의 관계가 매우 복잡해지고, 서로 다른 조상간에 같은 이름을 가진 멤버를 구별할 수 있는 방법이 없다는 단점이 있습니다. 예를 들어 Parents1, 2클래스에 모두 method라는 메서드가 있다고 가정하고 이 두 클..

자바 17. 상속, 포함관계

이번 글에서는 클래스 간의 관계에 대해서 상속과, 포함관계를 알아보도록 하겠습니다. 상속 상속은 자바에서 제공하는 아주 특별한 기술인데, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것입니다. 이를 통해 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고, 코드를 공통적으로 관리할 수 있습니다. 이러한 특징으로 코드의 재사용성을 높이고, 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여하는 기술입니다. 말만으로는 잘 모를 것 같은데, 간단하게 상속을 사용하는 법을 알아보도록 합시다. public class example{ public static void main(String[] args){ Parents p = new Parents(); Child c = new Child();..

자바 16. 변수의 초기화

이번 글에서는 변수의 초기화에 대해서 알아보도록 합시다. 다들 아시다시피 초기화란 변수를 선언하고 처음으로 값을 저장하는 것을 말합니다. 이 초기화는 필수적일 때도 있고, 선택적일 때도 있지만, 가능하면 선언과 동시에 초기화하는 것이 좋습니다. 이때 지역변수, 즉 메서드 내에 선언되어 있는 변수들은 사용하기 전에 꼭 초기화를 해주어야 하지만, 멤버변수는 초기화를 하지 않아도 자동으로 변수의 자료형에 따라 기본값이 저장되기 때문에 초기화 없이 사용이 가능합니다. 예를 들어 위와 같은 상황에서 인스턴스변수인 x는 자동으로 int의 기본값인 0이 저장되기 때문에 y에 값을 대입할 수 있습니다. 반면 지역변수인 i는 선언후 값을 초기화하지 않았기 때문에 j에 값을 대입할 수가 없어 오류가 발생합니다. 각 자료형..

자바 15. 생성자(Constructor)

이번 글에서는 생성자에 대해서 알아보도록 하겠습니다. 생성자(Constructor)란? 생서자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드' 입니다. 따라서 인스턴스 변수의 초기화 작업등 인스턴스 생성 시에 실행되어야 하는 작업을 위해 사용됩니다. 생성자도 메서드처럼 클래스 내에 선언되며, 구조도 유사하지만 리턴값이 없습니다. 생성자의 조건은 다음과 같습니다. 1. 생성자의 이름은 클래스의 이름과 같아야 한다. 2. 생성자는 리턴값이 없다. 다음으로 생성자를 정의하는 방법입니다. 클래스이름(타입, 변수명, 타입 변수명, ...){ //인스턴스 생성 시 수행될 코드 } Tv(){ //매개변수가 없는 생성자 } Tv(int height, int width){ //매개변수가 있는 생성자 } 이 생..

자바 14. 메서드 오버로딩

객체지향 프로그래밍 이어서 공부해보도록 합시다. 메서드 오버로딩(method overloading) 이번 글에선 먼저 메서드 오버로딩에 대해서 알아보도록 하겠습니다. 먼저 메서드는 저번 글에서 말했다시피 이름이 같아도 매개변수의 개수, 또는 타입이 다르면 서로 다른 메서드로 인식됩니다. 이렇게 한 클래스 내에서 같음 이름을 가진 여러개의 메서드를 정의하는 것을 메서드 오버로딩 또는 간단히 오버로딩 이라고 합니다. 메서드 오버로딩의 조건은 다음과 같습니다. 1. 메서드 이름이 같아야 한다. 2. 매개변수의 개수 또는 타입이 달라야 한다.(매개변수의 이름은 상관없음) 3. 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다. 위의 조건을 만족시키지 못하면 컴파일 시에 오류가 발생하니 꼭 주의하..

자바 13. 변수의 종류, 메서드

객체지향 프로그래밍에 대해 이어서 알아보도록 하겠습니다. 이번 글에서는 변수의 위치에따른 종류와 메서드에 대해서 알아보겠습니다. 위치에 따른 변수의 종류 자바에서 변수는 해당 변수를 어느 위치에 선언하느냐에 따라 클래스변수, 인스턴스변수, 지역변수의 세 종류로 나뉩니다. 인스턴스변수(instance variable) 인스턴스변수는 클래스 영역에 선언되며, 해당 클래스의 인스턴스를 생성할 때 만들어집니다. 때문에 인스턴스변수를 사용하려면 당연히 인스턴스를 먼저 생성해야 합니다. 또한 인스턴스는 여러 개 생성할 수 있고, 각 인스턴스의 인스턴스변수는 서로 독립적입니다. 각 인스턴스마다 독립적인 데이터를 저장해야 할 때, 인스턴스변수를 사용합니다. 클래스변수(calss variable) 클래스변수는 선언되는 ..

자바 12. 클래스와 객체

이미 아시다시피 자바는 대표적인 객체지향 언어 중 하나입니다. 객체지향의 주요 특징은 다음과 같습니다. 1. 코드의 재사용성이 높다. -새로운 코드를 작성할 때 기존의 코드를 사용하여 쉽게 작성할 수 있다. 2. 코드의 관리가 용이하다. -코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다. 3. 신뢰성이 높은 프로그래밍을 가능하게 한다. -제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오작동을 방지할 수 있다. 이 중에서도 객체지향언어의 가장 큰 장점은 코드의 재사용성이 높고, 유지보수가 용이하다는 점인데, 앞으로 알아볼 여러가지 객체지향개념을 통해서 보다 쉽게 이해할 수 있을 것입니다. 그러면 이제 자바에서 어떻..

반응형